X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/871e2fd07a6381b9e2dcacc27608541ca826e3d6..1449ad2bc8b00bd9171d392d71da0a45dff71f0a:/aim_txqueue.c diff --git a/aim_txqueue.c b/aim_txqueue.c index 6f6b3c1..bc5eab3 100644 --- a/aim_txqueue.c +++ b/aim_txqueue.c @@ -151,6 +151,19 @@ faim_internal int aim_tx_enqueue__immediate(struct aim_session_t *sess, struct c return 0; } +faim_internal int aim_tx_enqueue(struct aim_session_t *sess, struct command_tx_struct *command) +{ + /* + * If we want to send a connection thats inprogress, we have to force + * them to use the queue based version. Otherwise, use whatever they + * want. + */ + if (command && command->conn && (command->conn->status & AIM_CONN_STATUS_INPROGRESS)) { + return aim_tx_enqueue__queuebased(sess, command); + } + return (*sess->tx_enqueue)(sess, command); +} + /* * aim_get_next_txseqnum() * @@ -293,7 +306,7 @@ faim_internal int aim_tx_sendframe(struct aim_session_t *sess, struct command_tx if (send(cur->conn->fd, curPacket, buflen, 0) != buflen) { faim_mutex_unlock(&cur->conn->active); cur->sent = 1; - aim_conn_kill(sess, &cur->conn); + aim_conn_close(cur->conn); return 0; /* bail out */ } @@ -347,6 +360,9 @@ faim_export int aim_tx_flushqueue(struct aim_session_t *sess) /* only process if its unlocked and unsent */ if (!cur->lock && !cur->sent) { + if (cur->conn && (cur->conn->status & AIM_CONN_STATUS_INPROGRESS)) + continue; + /* * And now for the meager attempt to force transmit * latency and avoid missed messages.