diff options
-rw-r--r-- | protocols/jabber/s5bytestream.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/protocols/jabber/s5bytestream.c b/protocols/jabber/s5bytestream.c index 169429d8..60d522e4 100644 --- a/protocols/jabber/s5bytestream.c +++ b/protocols/jabber/s5bytestream.c @@ -252,6 +252,31 @@ gboolean jabber_bs_abort(struct bs_transfer *bt, char *format, ...) } } +void jabber_bs_remove_events(struct bs_transfer *bt) +{ + struct jabber_transfer *tf = bt->tf; + + if (tf->watch_out) { + b_event_remove(tf->watch_out); + tf->watch_out = 0; + } + + if (tf->watch_in) { + b_event_remove(tf->watch_in); + tf->watch_in = 0; + } + + if (tf->fd != -1) { + closesocket(tf->fd); + tf->fd = -1; + } + + if (bt->connect_timeout) { + b_event_remove(bt->connect_timeout); + bt->connect_timeout = 0; + } +} + /* Bad luck */ void jabber_bs_canceled(file_transfer_t *ft, char *reason) { @@ -554,6 +579,7 @@ gboolean jabber_bs_recv_handshake_abort(struct bs_transfer *bt, char *error) shlist = g_slist_find(bt->streamhosts, bt->sh); if (shlist && shlist->next) { bt->sh = shlist->next->data; + jabber_bs_remove_events(bt); return jabber_bs_recv_handshake(bt, -1, 0); } @@ -763,20 +789,7 @@ static xt_status jabber_bs_send_handle_reply(struct im_connection *ic, struct xt } else { /* using a proxy, abort listen */ - if (tf->watch_in) { - b_event_remove(tf->watch_in); - tf->watch_in = 0; - } - - if (tf->fd != -1) { - closesocket(tf->fd); - tf->fd = -1; - } - - if (bt->connect_timeout) { - b_event_remove(bt->connect_timeout); - bt->connect_timeout = 0; - } + jabber_bs_remove_events(bt); GSList *shlist; for (shlist = jd->streamhosts; shlist; shlist = g_slist_next(shlist)) { |