Mercurial > pidgin
changeset 32509:a3283d6a19b2
*** Plucked rev 4b5c688e1486f88c95bbe6946367a00b2d1e02dd (markdoliner@pidgin.im):
Adjust this debug statement. listener_ip is based off of the bos connection
fd, not the listener_fd, so it's more useful to log info about the bos conn
fd.
*** Plucked rev 9ac3dc3dac01d52f74ef1da3fe9122a233650e5a (markdoliner@pidgin.im):
We don't need to abort the file transfer attempt entirely when this happens.
We can just try the next connection method (both users connect to a 3rd
party proxy)
*** Plucked rev 77872b7f18741bca0e5bda735debf9ea3e3d386f (markdoliner@pidgin.im):
Move this check up a level so that it affects direct connections, too.
I think this will fix the crash reported in http://trac.adium.im/ticket/15839
Still not sure why ip_atoi fails here.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 13 Feb 2012 03:32:29 +0000 |
parents | 704e168fd9ae |
children | b441fd23e5bb |
files | libpurple/protocols/oscar/peer.c |
diffstat | 1 files changed, 19 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/oscar/peer.c Mon Feb 06 22:44:28 2012 +0000 +++ b/libpurple/protocols/oscar/peer.c Mon Feb 13 03:32:29 2012 +0000 @@ -660,6 +660,7 @@ char *tmp; FlapConnection *bos_conn; const char *listener_ip; + const guchar *ip_atoi; unsigned short listener_port; conn = data; @@ -694,11 +695,28 @@ listener_ip = purple_network_get_my_ip(bos_conn->gsc->fd); else listener_ip = purple_network_get_my_ip(bos_conn->fd); + + ip_atoi = purple_network_ip_atoi(listener_ip); + if (ip_atoi == NULL) { + /* Could not convert IP to 4 byte array--weird, but this does + happen for some users (#4829, Adium #15839). Maybe they're + connecting with IPv6...? Maybe through a proxy? */ + purple_debug_error("oscar", "Can't ask peer to connect to us " + "because purple_network_ip_atoi(%s) returned NULL. " + "fd=%d. is_ssl=%d\n", + listener_ip ? listener_ip : "(null)", + bos_conn->gsc ? bos_conn->gsc->fd : bos_conn->fd, + bos_conn->gsc ? 1 : 0); + peer_connection_trynext(conn); + return; + } + listener_port = purple_network_get_port_from_fd(conn->listenerfd); + if (conn->type == OSCAR_CAPABILITY_DIRECTIM) { aim_im_sendch2_odc_requestdirect(od, - conn->cookie, conn->bn, purple_network_ip_atoi(listener_ip), + conn->cookie, conn->bn, ip_atoi, listener_port, ++conn->lastrequestnumber); /* Print a message to a local conversation window */ @@ -710,15 +728,6 @@ } else if (conn->type == OSCAR_CAPABILITY_SENDFILE) { - const guchar *ip_atoi = purple_network_ip_atoi(listener_ip); - if (ip_atoi == NULL) { - purple_debug_error("oscar", "Cannot send file. atoi(%s) failed.\n" - "Other possibly useful information: fd = %d, port = %d\n", - listener_ip ? listener_ip : "(null!)", conn->listenerfd, - listener_port); - purple_xfer_cancel_local(conn->xfer); - return; - } aim_im_sendch2_sendfile_requestdirect(od, conn->cookie, conn->bn, ip_atoi,