X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/a15d82b1157e91e0c5d05170323796d1e7557ad8..1449ad2bc8b00bd9171d392d71da0a45dff71f0a:/aim_txqueue.c diff --git a/aim_txqueue.c b/aim_txqueue.c index 2344073..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() * @@ -273,10 +286,10 @@ faim_internal int aim_tx_sendframe(struct aim_session_t *sess, struct command_tx } else if (cur->hdrtype == AIM_FRAMETYPE_OFT) { int z = 0; - z += aimutil_put8(curPacket+z, 0x4f); - z += aimutil_put8(curPacket+z, 0x44); - z += aimutil_put8(curPacket+z, 0x43); - z += aimutil_put8(curPacket+z, 0x32); + z += aimutil_put8(curPacket+z, cur->hdr.oft.magic[0]); + z += aimutil_put8(curPacket+z, cur->hdr.oft.magic[1]); + z += aimutil_put8(curPacket+z, cur->hdr.oft.magic[2]); + z += aimutil_put8(curPacket+z, cur->hdr.oft.magic[3]); z += aimutil_put16(curPacket+z, cur->hdr.oft.hdr2len + 8); z += aimutil_put16(curPacket+z, cur->hdr.oft.type); @@ -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.