# HG changeset patch # User Tim Ringenbach # Date 1085019857 0 # Node ID 4623d24347d8a8930c752cf2057c23a444b309f4 # Parent 460d02fe03df69b78327b0da5ce02ef3d8511469 [gaim-migrate @ 9759] Oops, forgot about this. This keeps us from telling the other side to connect to us when we can't connect to them when the reason we were connecting to them in the first place was because they couldn't connect to us. committer: Tailor Script diff -r 460d02fe03df -r 4623d24347d8 src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Thu May 20 02:03:34 2004 +0000 +++ b/src/protocols/oscar/oscar.c Thu May 20 02:24:17 2004 +0000 @@ -143,6 +143,7 @@ gboolean connected; gboolean gpc_pend; gboolean killme; + gboolean donttryagain; }; struct ask_direct { @@ -150,6 +151,7 @@ char *sn; char ip[64]; fu8_t cookie[8]; + gboolean donttryagain; }; /* @@ -796,16 +798,21 @@ } if (source < 0) { - fu8_t cookie[8]; - char *who = g_strdup(dim->name); - const char *tmp = aim_odc_getcookie(dim->conn); - - memcpy(cookie, tmp, 8); - oscar_direct_im_destroy(od, dim); - oscar_direct_im_initiate(gc, who, cookie); - gaim_debug_info("oscar", "asking direct im initiator to connect to us\n"); - g_free(who); - return; + if (dim->donttryagain) { + oscar_direct_im_disconnect(od, dim); + return; + } else { + fu8_t cookie[8]; + char *who = g_strdup(dim->name); + const char *tmp = aim_odc_getcookie(dim->conn); + + memcpy(cookie, tmp, 8); + oscar_direct_im_destroy(od, dim); + oscar_direct_im_initiate(gc, who, cookie); + gaim_debug_info("oscar", "asking direct im initiator to connect to us\n"); + g_free(who); + return; + } } dim->conn->fd = source; @@ -820,16 +827,21 @@ gaim_conversation_write(conv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); } else { - fu8_t cookie[8]; - char *who = g_strdup(dim->name); - const char *tmp = aim_odc_getcookie(dim->conn); - - memcpy(cookie, tmp, 8); - oscar_direct_im_destroy(od, dim); - oscar_direct_im_initiate(gc, who, cookie); - gaim_debug_info("oscar", "asking direct im initiator to connect to us\n"); - g_free(who); - return; + if (dim->donttryagain) { + oscar_direct_im_disconnect(od, dim); + return; + } else { + fu8_t cookie[8]; + char *who = g_strdup(dim->name); + const char *tmp = aim_odc_getcookie(dim->conn); + + memcpy(cookie, tmp, 8); + oscar_direct_im_destroy(od, dim); + oscar_direct_im_initiate(gc, who, cookie); + gaim_debug_info("oscar", "asking direct im initiator to connect to us\n"); + g_free(who); + return; + } } @@ -860,6 +872,7 @@ } dim = g_new0(struct oscar_direct_im, 1); dim->gc = d->gc; + dim->donttryagain = d->donttryagain; g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); dim->conn = aim_odc_connect(od->sess, d->sn, NULL, d->cookie); @@ -3237,6 +3250,7 @@ memcpy(d->cookie, args->cookie, 8); if (dim && !dim->connected && (!memcmp(aim_odc_getcookie(dim->conn), args->cookie, 8))) { oscar_direct_im_destroy(od, dim); + d->donttryagain = TRUE; accept_direct_im_request(d); } else { if (dim && !dim->connected)