# HG changeset patch # User Mark Doliner # Date 1162065843 0 # Node ID 118fd0dc5b6e0a755d5e326f29b3ba808ebcaa17 # Parent bfcdd361357e28e5f9837b45bdda02fcdb94e4ad [gaim-migrate @ 17606] Add a "handle" parameter to gaim_proxy_connect(). It seemed like people thought this was a good idea. You can still cancel each gaim_proxy_connect() individually, if needed. I passed in NULL for the handle in most places. It might be better to pass in the gc in more places, but these changes do no harm, and they should help some Yahoo! things, and I wanted to get the API change in. committer: Tailor Script diff -r bfcdd361357e -r 118fd0dc5b6e ChangeLog.API --- a/ChangeLog.API Sat Oct 28 19:52:30 2006 +0000 +++ b/ChangeLog.API Sat Oct 28 20:04:03 2006 +0000 @@ -118,7 +118,9 @@ gaim_proxy_connect() and gaim_network_listen*(). * gaim_proxy_connect(): changed to return NULL on error and a pointer to a GaimProxyConnectInfo object which can be used to cancel - connection attempts using gaim_proxy_connect_cancel(). + connection attempts using gaim_proxy_connect_cancel(). Also added + a 'handle' parameter that can be used to cancel to cancel the + connection attempt using gaim_proxy_connect_cancel_with_handle(). * gaim_gethostbyname_async(): Renamed to gaim_dnsquery_a() and changed to return a pointer to a data structure that can be used to cancel the pending DNS query using gaim_dnsquery_destroy() @@ -321,6 +323,8 @@ call to gaim_network_listen() or gaim_network_listen_range() * gaim_proxy_connect_cancel(): Can be used to cancel a pending gaim_proxy_connect() request + * gaim_proxy_connect_cancel_with_handle(): Can be used to cancel + a previous gaim_proxy_connect() request using a specified handle * gaim_dnsquery_destroy(): Can be used to cancel a pending DNS query. * gaim_util_fetch_url_cancel(): Can be used to cancel a pending diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/ft.c --- a/libgaim/ft.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/ft.c Sat Oct 28 20:04:03 2006 +0000 @@ -945,7 +945,7 @@ xfer->remote_port = port; /* Establish a file descriptor. */ - gaim_proxy_connect(xfer->account, xfer->remote_ip, + gaim_proxy_connect(NULL, xfer->account, xfer->remote_ip, xfer->remote_port, connect_cb, xfer); return; diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/irc/irc.c --- a/libgaim/protocols/irc/irc.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/irc/irc.c Sat Oct 28 20:04:03 2006 +0000 @@ -341,11 +341,10 @@ if (!irc->gsc) { - irc->connect_data = gaim_proxy_connect(account, irc->server, + if (gaim_proxy_connect(gc, account, irc->server, gaim_account_get_int(account, "port", IRC_DEFAULT_PORT), - irc_login_cb, gc); - - if (!irc->connect_data || !gaim_account_get_connection(account)) { + irc_login_cb, gc) == NULL) + { gaim_connection_error(gc, _("Couldn't create socket")); return; } @@ -409,8 +408,6 @@ GaimConnection *gc = data; struct irc_conn *irc = gc->proto_data; - irc->connect_data = NULL; - if (source < 0) { gaim_connection_error(gc, _("Couldn't connect to host")); return; @@ -452,9 +449,6 @@ if (irc->gsc || (irc->fd >= 0)) irc_cmd_quit(irc, "quit", NULL, NULL); - if (irc->connect_data) - gaim_proxy_connect_cancel(irc->connect_data); - if (gc->inpa) gaim_input_remove(gc->inpa); diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/irc/irc.h --- a/libgaim/protocols/irc/irc.h Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/irc/irc.h Sat Oct 28 20:04:03 2006 +0000 @@ -54,8 +54,6 @@ guint timer; GHashTable *buddies; - GaimProxyConnectData *connect_data; - char *inbuf; int inbuflen; int inbufused; diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/jabber/jabber.c --- a/libgaim/protocols/jabber/jabber.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/jabber/jabber.c Sat Oct 28 20:04:03 2006 +0000 @@ -445,8 +445,6 @@ GaimConnection *gc = data; JabberStream *js = gc->proto_data; - js->connect_data = NULL; - if (source < 0) { gaim_connection_error(gc, _("Couldn't connect to host")); return; @@ -490,10 +488,8 @@ static void jabber_login_connect(JabberStream *js, const char *server, int port) { - js->connect_data = gaim_proxy_connect(js->gc->account, server, - port, jabber_login_callback, js->gc); - - if (js->connect_data == NULL) + if (gaim_proxy_connect(js->gc, js->gc->account, server, + port, jabber_login_callback, js->gc) == NULL) gaim_connection_error(js->gc, _("Unable to create socket")); } @@ -922,11 +918,9 @@ } if(!js->gsc) { - js->connect_data = gaim_proxy_connect(account, server, + if (gaim_proxy_connect(gc, account, server, gaim_account_get_int(account, "port", 5222), - jabber_login_callback, gc); - - if (js->connect_data == NULL) + jabber_login_callback, gc) == NULL) gaim_connection_error(gc, _("Unable to create socket")); } } @@ -945,9 +939,6 @@ if (js->srv_query_data) gaim_srv_cancel(js->srv_query_data); - if (js->connect_data) - gaim_proxy_connect_cancel(js->connect_data); - if(js->gsc) { #ifdef HAVE_OPENSSL if (!gc->disconnect_timeout) diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/jabber/jabber.h --- a/libgaim/protocols/jabber/jabber.h Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/jabber/jabber.h Sat Oct 28 20:04:03 2006 +0000 @@ -67,7 +67,6 @@ int fd; GaimSrvQueryData *srv_query_data; - GaimProxyConnectData *connect_data; xmlParserCtxt *context; xmlnode *current; diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/jabber/si.c --- a/libgaim/protocols/jabber/si.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/jabber/si.c Sat Oct 28 20:04:03 2006 +0000 @@ -177,7 +177,8 @@ for(i=0; i<20; i++, p+=2) snprintf(p, 3, "%02x", hashval[i]); - jsx->connect_data = gaim_proxy_connect_socks5(jsx->gpi, dstaddr, 0, + jsx->connect_data = gaim_proxy_connect_socks5(NULL, jsx->gpi, + dstaddr, 0, jabber_si_bytestreams_connect_cb, xfer); g_free(dstaddr); diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/msn/directconn.c --- a/libgaim/protocols/msn/directconn.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/msn/directconn.c Sat Oct 28 20:04:03 2006 +0000 @@ -423,8 +423,8 @@ } #endif - directconn->connect_data = gaim_proxy_connect(session->account, host, port, - connect_cb, directconn); + directconn->connect_data = gaim_proxy_connect(NULL, session->account, + host, port, connect_cb, directconn); if (directconn->connect_data != NULL) { diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/msn/httpconn.c --- a/libgaim/protocols/msn/httpconn.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/msn/httpconn.c Sat Oct 28 20:04:03 2006 +0000 @@ -727,7 +727,7 @@ if (httpconn->connected) msn_httpconn_disconnect(httpconn); - httpconn->connect_data = gaim_proxy_connect(httpconn->session->account, + httpconn->connect_data = gaim_proxy_connect(NULL, httpconn->session->account, "gateway.messenger.hotmail.com", 80, connect_cb, httpconn); if (httpconn->connect_data != NULL) diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/msn/servconn.c --- a/libgaim/protocols/msn/servconn.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/msn/servconn.c Sat Oct 28 20:04:03 2006 +0000 @@ -213,9 +213,7 @@ if (servconn->connected) msn_servconn_disconnect(servconn); - if (servconn->host != NULL) - g_free(servconn->host); - + g_free(servconn->host); servconn->host = g_strdup(host); if (session->http_method) @@ -235,8 +233,8 @@ return TRUE; } - servconn->connect_data = gaim_proxy_connect(session->account, host, port, - connect_cb, servconn); + servconn->connect_data = gaim_proxy_connect(NULL, session->account, + host, port, connect_cb, servconn); if (servconn->connect_data != NULL) { diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/oscar/oscar.c --- a/libgaim/protocols/oscar/oscar.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/oscar/oscar.c Sat Oct 28 20:04:03 2006 +0000 @@ -1211,7 +1211,7 @@ gaim_prefs_connect_callback(gc, "/plugins/prpl/oscar/recent_buddies", recent_buddies_cb, gc); newconn = flap_connection_new(od, SNAC_FAMILY_AUTH); - newconn->connect_data = gaim_proxy_connect(account, + newconn->connect_data = gaim_proxy_connect(NULL, account, gaim_account_get_string(account, "server", OSCAR_DEFAULT_LOGIN_SERVER), gaim_account_get_int(account, "port", OSCAR_DEFAULT_LOGIN_PORT), connection_established_cb, newconn); @@ -1333,7 +1333,7 @@ newconn = flap_connection_new(od, SNAC_FAMILY_LOCATE); newconn->cookielen = info->cookielen; newconn->cookie = g_memdup(info->cookie, info->cookielen); - newconn->connect_data = gaim_proxy_connect(account, host, port, + newconn->connect_data = gaim_proxy_connect(NULL, account, host, port, connection_established_cb, newconn); g_free(host); if (newconn->connect_data == NULL) @@ -1546,7 +1546,7 @@ pos->modname = g_strdup(modname); /* TODO: Keep track of this return value. */ - if (gaim_proxy_connect(pos->gc->account, "gaim.sourceforge.net", 80, + if (gaim_proxy_connect(NULL, pos->gc->account, "gaim.sourceforge.net", 80, straight_to_hell, pos) == NULL) { char buf[256]; @@ -1632,13 +1632,13 @@ gaim_debug_info("oscar", "Connecting to chat room %s exchange %hu\n", cc->name, cc->exchange); } - newconn->connect_data = gaim_proxy_connect(account, host, port, + newconn->connect_data = gaim_proxy_connect(NULL, account, host, port, connection_established_cb, newconn); if (newconn->connect_data == NULL) { flap_connection_schedule_destroy(newconn, OSCAR_DISCONNECT_COULD_NOT_CONNECT, - _("gaim_proxy_connect() failed")); + _("Unable to initialize connection")); gaim_debug_error("oscar", "Unable to connect to FLAP server " "of type 0x%04hx\n", redir->group); } diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/oscar/peer.c --- a/libgaim/protocols/oscar/peer.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/oscar/peer.c Sat Oct 28 20:04:03 2006 +0000 @@ -708,7 +708,7 @@ g_free(tmp); } - conn->connect_data = gaim_proxy_connect(account, + conn->connect_data = gaim_proxy_connect(NULL, account, conn->verifiedip, conn->port, peer_connection_established_cb, conn); if (conn->connect_data != NULL) @@ -743,7 +743,7 @@ g_free(tmp); } - conn->connect_data = gaim_proxy_connect(account, + conn->connect_data = gaim_proxy_connect(NULL, account, conn->clientip, conn->port, peer_connection_established_cb, conn); if (conn->connect_data != NULL) @@ -807,7 +807,7 @@ g_free(tmp); } - conn->connect_data = gaim_proxy_connect(account, + conn->connect_data = gaim_proxy_connect(NULL, account, (conn->proxyip != NULL) ? conn->proxyip : PEER_PROXY_SERVER, PEER_PROXY_PORT, peer_proxy_connection_established_cb, conn); diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/qq/qq_proxy.c --- a/libgaim/protocols/qq/qq_proxy.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/qq/qq_proxy.c Sat Oct 28 20:04:03 2006 +0000 @@ -420,7 +420,7 @@ qd->server_port = port; if(use_tcp) - return (gaim_proxy_connect(account, host, port, func, data) == NULL); + return (gaim_proxy_connect(NULL, account, host, port, func, data) == NULL); else return _qq_udp_proxy_connect(account, host, port, func, data); } diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/sametime/sametime.c --- a/libgaim/protocols/sametime/sametime.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/sametime/sametime.c Sat Oct 28 20:04:03 2006 +0000 @@ -225,7 +225,6 @@ /** socket fd */ int socket; gint outpa; /* like inpa, but the other way */ - GaimProxyConnectData *connect_data; /** circular buffer for outgoing data */ GaimCircBuffer *sock_buf; @@ -1409,7 +1408,7 @@ port = gaim_account_get_int(account, MW_KEY_PORT, MW_PLUGIN_DEFAULT_PORT); if(gaim_account_get_bool(account, MW_KEY_FORCE, FALSE) || - (gaim_proxy_connect(account, host, port, connect_cb, pd) == NULL)) { + (gaim_proxy_connect(NULL, account, host, port, connect_cb, pd) == NULL)) { mwSession_forceLogin(session); } @@ -1674,8 +1673,6 @@ struct mwGaimPluginData *pd = data; GaimConnection *gc = pd->gc; - pd->connect_data = NULL; - if(source < 0) { /* connection failed */ @@ -3680,8 +3677,7 @@ gaim_connection_update_progress(gc, _("Connecting"), 1, MW_CONNECT_STEPS); - pd->connect_data = gaim_proxy_connect(account, host, port, connect_cb, pd); - if(pd->connect_data == NULL) { + if (gaim_proxy_connect(gc, account, host, port, connect_cb, pd) == NULL) { gaim_connection_error(gc, _("Unable to connect to host")); } } @@ -3714,11 +3710,6 @@ gc->inpa = 0; } - if(pd->connect_data != NULL) { - gaim_proxy_connect_cancel(pd->connect_data); - pd->connect_data = NULL; - } - /* clean up the rest */ mwGaimPluginData_free(pd); } diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/silc/silc.c --- a/libgaim/protocols/silc/silc.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/silc/silc.c Sat Oct 28 20:04:03 2006 +0000 @@ -154,7 +154,6 @@ g_return_if_fail(gc != NULL); sg = gc->proto_data; - sg->connect_data = NULL; if (source < 0) { gaim_connection_error(gc, _("Connection failed")); @@ -357,12 +356,11 @@ gc->proto_data = sg; /* Connect to the SILC server */ - sg->connect_data = gaim_proxy_connect(account, + if (gaim_proxy_connect(gc, account, gaim_account_get_string(account, "server", "silc.silcnet.org"), gaim_account_get_int(account, "port", 706), - silcgaim_login_connected, gc); - if (sg->connect_data == NULL) + silcgaim_login_connected, gc) == NULL) { gaim_connection_error(gc, _("Unable to create connection")); return; @@ -382,8 +380,6 @@ SilcGaim sg = (SilcGaim)context; silc_client_stop(sg->client); silc_client_free(sg->client); - if (sg->connect_data != NULL) - gaim_proxy_connect_cancel(sg->connect_data); #ifdef HAVE_SILCMIME_H if (sg->mimeass) silc_mime_assembler_free(sg->mimeass); diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/silc/silcgaim.h --- a/libgaim/protocols/silc/silcgaim.h Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/silc/silcgaim.h Sat Oct 28 20:04:03 2006 +0000 @@ -67,7 +67,6 @@ SilcClient client; SilcClientConnection conn; - GaimProxyConnectData *connect_data; guint scheduler; GaimConnection *gc; GaimAccount *account; diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/simple/simple.c --- a/libgaim/protocols/simple/simple.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/simple/simple.c Sat Oct 28 20:04:03 2006 +0000 @@ -457,12 +457,10 @@ static void sendlater(GaimConnection *gc, const char *buf) { struct simple_account_data *sip = gc->proto_data; - GaimProxyConnectData *connect_data; if(!sip->connecting) { gaim_debug_info("simple", "connecting to %s port %d\n", sip->realhostname ? sip->realhostname : "{NULL}", sip->realport); - connect_data = gaim_proxy_connect(sip->account, sip->realhostname, sip->realport, send_later_cb, gc); - if(connect_data == NULL) { + if (gaim_proxy_connect(gc, sip->account, sip->realhostname, sip->realport, send_later_cb, gc) == NULL) { gaim_connection_error(gc, _("Couldn't create socket")); } sip->connecting = TRUE; @@ -1565,7 +1563,6 @@ static void simple_tcp_connect_listen_cb(int listenfd, gpointer data) { struct simple_account_data *sip = (struct simple_account_data*) data; - GaimProxyConnectData *connect_data; sip->listen_data = NULL; @@ -1582,9 +1579,8 @@ gaim_debug_info("simple", "connecting to %s port %d\n", sip->realhostname, sip->realport); /* open tcp connection to the server */ - connect_data = gaim_proxy_connect(sip->account, sip->realhostname, - sip->realport, login_cb, sip->gc); - if(connect_data == NULL) { + if (gaim_proxy_connect(sip->gc, sip->account, sip->realhostname, + sip->realport, login_cb, sip->gc) == NULL) { gaim_connection_error(sip->gc, _("Couldn't create socket")); } } diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/toc/toc.c --- a/libgaim/protocols/toc/toc.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/toc/toc.c Sat Oct 28 20:04:03 2006 +0000 @@ -141,7 +141,7 @@ gaim_connection_update_progress(gc, buf, 0, TOC_CONNECT_STEPS); gaim_debug(GAIM_DEBUG_INFO, "toc", "Client connects to TOC\n"); - if (gaim_proxy_connect(account, + if (gaim_proxy_connect(gc, account, gaim_account_get_string(account, "server", TOC_HOST), gaim_account_get_int(account, "port", TOC_PORT), toc_login_callback, gc) != 0 || !account->gc) { @@ -1933,7 +1933,7 @@ g_snprintf(buf, sizeof(buf), "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_SEND_UID); sflap_send(ft->gc, buf, -1, TYPE_DATA); - if (gaim_proxy_connect(account, ft->ip, ft->port, toc_send_file_connect, ft) != 0) { + if (gaim_proxy_connect(ft->gc, account, ft->ip, ft->port, toc_send_file_connect, ft) != 0) { gaim_notify_error(ft->gc, NULL, _("Could not connect for transfer."), NULL); g_free(ft->filename); @@ -2145,7 +2145,7 @@ g_snprintf(buf2, sizeof(buf2), "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_GET_UID); sflap_send(ft->gc, buf2, -1, TYPE_DATA); - if (gaim_proxy_connect(account, ft->ip, ft->port, toc_get_file_connect, ft) < 0) { + if (gaim_proxy_connect(ft->gc, account, ft->ip, ft->port, toc_get_file_connect, ft) < 0) { gaim_notify_error(ft->gc, NULL, _("Could not connect for transfer."), NULL); fclose(ft->file); diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/yahoo/yahoo.c --- a/libgaim/protocols/yahoo/yahoo.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/yahoo/yahoo.c Sat Oct 28 20:04:03 2006 +0000 @@ -2459,7 +2459,7 @@ yd->rxqueue = NULL; yd->rxlen = 0; /* Now we have our cookies to login with. I'll go get the milk. */ - if (gaim_proxy_connect(account, "wcs2.msg.dcn.yahoo.com", + if (gaim_proxy_connect(gc, account, "wcs2.msg.dcn.yahoo.com", gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), yahoo_got_web_connected, gc) == NULL) { gaim_connection_error(gc, _("Connection problem")); @@ -2633,7 +2633,7 @@ "Host: login.yahoo.com\r\n\r\n"); g_hash_table_destroy(hash); yd->auth = g_string_free(url, FALSE); - if (gaim_proxy_connect(account, "login.yahoo.com", 80, yahoo_got_cookies, gc) == NULL) { + if (gaim_proxy_connect(gc, account, "login.yahoo.com", 80, yahoo_got_cookies, gc) == NULL) { gaim_connection_error(gc, _("Connection problem")); return; } @@ -2732,7 +2732,7 @@ if (gaim_account_get_bool(account, "yahoojp", FALSE)) { yd->jp = TRUE; - if (gaim_proxy_connect(account, + if (gaim_proxy_connect(gc, account, gaim_account_get_string(account, "serverjp", YAHOOJP_PAGER_HOST), gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), yahoo_got_connected, gc) == NULL) @@ -2742,7 +2742,7 @@ } } else { yd->jp = FALSE; - if (gaim_proxy_connect(account, + if (gaim_proxy_connect(gc, account, gaim_account_get_string(account, "server", YAHOO_PAGER_HOST), gaim_account_get_int(account, "port", YAHOO_PAGER_PORT), yahoo_got_connected, gc) == NULL) diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/yahoo/yahoo_filexfer.c --- a/libgaim/protocols/yahoo/yahoo_filexfer.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/yahoo/yahoo_filexfer.c Sat Oct 28 20:04:03 2006 +0000 @@ -261,7 +261,7 @@ if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { if (yd->jp) { - if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST), + if (gaim_proxy_connect(NULL, account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST), gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), yahoo_sendfile_connected, xfer) == NULL) { @@ -270,7 +270,7 @@ gaim_xfer_cancel_remote(xfer); } } else { - if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), + if (gaim_proxy_connect(NULL, account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), yahoo_sendfile_connected, xfer) == NULL) { @@ -281,7 +281,7 @@ } } else { /* TODO: Using xfer->fd like this is probably a bad thing... */ - if (gaim_proxy_connect(account, xfer_data->host, xfer_data->port, + if (gaim_proxy_connect(NULL, account, xfer_data->host, xfer_data->port, yahoo_receivefile_connected, xfer) == NULL) xfer->fd = -1; else diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/yahoo/yahoo_picture.c --- a/libgaim/protocols/yahoo/yahoo_picture.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/yahoo/yahoo_picture.c Sat Oct 28 20:04:03 2006 +0000 @@ -511,7 +511,7 @@ } if (yd->jp) { - if ((connect_data = gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST), + if ((connect_data = gaim_proxy_connect(NULL, account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST), gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), yahoo_buddy_icon_upload_connected, d)) == NULL) { @@ -519,7 +519,7 @@ yahoo_buddy_icon_upload_data_free(d); } } else { - if ((connect_data = gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), + if ((connect_data = gaim_proxy_connect(NULL, account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), yahoo_buddy_icon_upload_connected, d)) == NULL) { diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/yahoo/yahoochat.c --- a/libgaim/protocols/yahoo/yahoochat.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/yahoo/yahoochat.c Sat Oct 28 20:04:03 2006 +0000 @@ -1449,7 +1449,7 @@ gaim_roomlist_set_fields(rl, fields); - if (gaim_proxy_connect(gaim_connection_get_account(gc), yrl->host, 80, + if (gaim_proxy_connect(NULL, gaim_connection_get_account(gc), yrl->host, 80, yahoo_roomlist_got_connected, yrl) == NULL) { gaim_notify_error(gc, NULL, _("Connection problem"), _("Unable to fetch room list.")); @@ -1518,7 +1518,7 @@ yrl->ucat = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_CATEGORY, _("User Rooms"), yrl->cat); gaim_roomlist_room_add(list, yrl->ucat); - if (gaim_proxy_connect(list->account, yrl->host, 80, + if (gaim_proxy_connect(NULL, list->account, yrl->host, 80, yahoo_roomlist_got_connected, yrl) == NULL) { gaim_notify_error(gaim_account_get_connection(list->account), diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/protocols/yahoo/ycht.c --- a/libgaim/protocols/yahoo/ycht.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/protocols/yahoo/ycht.c Sat Oct 28 20:04:03 2006 +0000 @@ -577,7 +577,7 @@ yd->ycht = ycht; - if (gaim_proxy_connect(account, + if (gaim_proxy_connect(NULL, account, gaim_account_get_string(account, "ycht-server", YAHOO_YCHT_HOST), gaim_account_get_int(account, "ycht-port", YAHOO_YCHT_PORT), ycht_got_connected, ycht) == NULL) diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/proxy.c --- a/libgaim/proxy.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/proxy.c Sat Oct 28 20:04:03 2006 +0000 @@ -40,6 +40,7 @@ #include "util.h" struct _GaimProxyConnectData { + void *handle; GaimProxyConnectFunction connect_cb; gpointer data; gchar *host; @@ -82,12 +83,7 @@ static GaimProxyInfo *global_proxy_info = NULL; -/* - * TODO: Once all callers of gaim_proxy_connect() are keeping track - * of the return value from that function this linked list - * will no longer be needed. - */ -static GSList *connect_datas = NULL; +static GSList *handles = NULL; static void try_connect(GaimProxyConnectData *connect_data); @@ -281,7 +277,7 @@ static void gaim_proxy_connect_data_destroy(GaimProxyConnectData *connect_data) { - connect_datas = g_slist_remove(connect_datas, connect_data); + handles = g_slist_remove(handles, connect_data); if (connect_data->query_data != NULL) gaim_dnsquery_destroy(connect_data->query_data); @@ -1750,7 +1746,8 @@ } GaimProxyConnectData * -gaim_proxy_connect(GaimAccount *account, const char *host, int port, +gaim_proxy_connect(void *handle, GaimAccount *account, + const char *host, int port, GaimProxyConnectFunction connect_cb, gpointer data) { const char *connecthost = host; @@ -1763,6 +1760,7 @@ connect_data = g_new0(GaimProxyConnectData, 1); connect_data->fd = -1; + connect_data->handle = handle; connect_data->connect_cb = connect_cb; connect_data->data = data; connect_data->host = g_strdup(host); @@ -1804,7 +1802,7 @@ return NULL; } - connect_datas = g_slist_prepend(connect_datas, connect_data); + handles = g_slist_prepend(handles, connect_data); return connect_data; } @@ -1813,8 +1811,10 @@ * Combine some of this code with gaim_proxy_connect() */ GaimProxyConnectData * -gaim_proxy_connect_socks5(GaimProxyInfo *gpi, const char *host, int port, - GaimProxyConnectFunction connect_cb, gpointer data) +gaim_proxy_connect_socks5(void *handle, GaimProxyInfo *gpi, + const char *host, int port, + GaimProxyConnectFunction connect_cb, + gpointer data) { GaimProxyConnectData *connect_data; @@ -1824,6 +1824,7 @@ connect_data = g_new0(GaimProxyConnectData, 1); connect_data->fd = -1; + connect_data->handle = handle; connect_data->connect_cb = connect_cb; connect_data->data = data; connect_data->host = g_strdup(host); @@ -1840,7 +1841,7 @@ return NULL; } - connect_datas = g_slist_prepend(connect_datas, connect_data); + handles = g_slist_prepend(handles, connect_data); return connect_data; } @@ -1852,6 +1853,21 @@ gaim_proxy_connect_data_destroy(connect_data); } +void +gaim_proxy_connect_cancel_with_handle(void *handle) +{ + GSList *l, *l_next; + + for (l = handles; l != NULL; l = l_next) { + GaimProxyConnectData *connect_data = l->data; + + l_next = l->next; + + if (connect_data->handle == handle) + gaim_proxy_connect_cancel(connect_data); + } +} + static void proxy_pref_cb(const char *name, GaimPrefType type, gconstpointer value, gpointer data) @@ -1927,9 +1943,9 @@ void gaim_proxy_uninit(void) { - while (connect_datas != NULL) + while (handles != NULL) { - gaim_proxy_connect_data_disconnect(connect_datas->data, NULL); - gaim_proxy_connect_data_destroy(connect_datas->data); + gaim_proxy_connect_data_disconnect(handles->data, NULL); + gaim_proxy_connect_data_destroy(handles->data); } } diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/proxy.h --- a/libgaim/proxy.h Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/proxy.h Sat Oct 28 20:04:03 2006 +0000 @@ -237,7 +237,8 @@ * structure that can be used to cancel the pending * connection, if needed. */ -GaimProxyConnectData *gaim_proxy_connect(GaimAccount *account, +GaimProxyConnectData *gaim_proxy_connect(void *handle, + GaimAccount *account, const char *host, int port, GaimProxyConnectFunction connect_cb, gpointer data); @@ -257,7 +258,8 @@ * structure that can be used to cancel the pending * connection, if needed. */ -GaimProxyConnectData *gaim_proxy_connect_socks5(GaimProxyInfo *gpi, +GaimProxyConnectData *gaim_proxy_connect_socks5(void *handle, + GaimProxyInfo *gpi, const char *host, int port, GaimProxyConnectFunction connect_cb, gpointer data); @@ -272,6 +274,13 @@ */ void gaim_proxy_connect_cancel(GaimProxyConnectData *connect_data); +/* + * Closes all proxy connections registered with the specified handle. + * + * @param handle The handle. + */ +void gaim_proxy_connect_cancel_with_handle(void *handle); + /*@}*/ #ifdef __cplusplus diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/sslconn.c --- a/libgaim/sslconn.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/sslconn.c Sat Oct 28 20:04:03 2006 +0000 @@ -117,7 +117,7 @@ gsc->connect_cb = func; gsc->error_cb = error_func; - gsc->connect_data = gaim_proxy_connect(account, host, port, gaim_ssl_connect_cb, gsc); + gsc->connect_data = gaim_proxy_connect(NULL, account, host, port, gaim_ssl_connect_cb, gsc); if (gsc->connect_data == NULL) { diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/upnp.c --- a/libgaim/upnp.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/upnp.c Sat Oct 28 20:04:03 2006 +0000 @@ -215,14 +215,14 @@ /* make sure we have a valid http response */ if(g_strstr_len(httpResponse, len, HTTP_OK) == NULL) { gaim_debug_error("upnp", - "parse_description_response(): Failed In HTTP_OK\n\n"); + "parse_description_response(): Failed In HTTP_OK\n"); return NULL; } /* find the root of the xml document */ if((xmlRoot = g_strstr_len(httpResponse, len, "tima = 0; if (dd->retry_count < NUM_UDP_ATTEMPTS) { + /* TODO: We probably shouldn't be incrementing retry_count in two places */ dd->retry_count++; gaim_upnp_discover_send_broadcast(dd); } else { @@ -625,7 +626,7 @@ sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock == -1) { gaim_debug_error("upnp", - "gaim_upnp_discover(): Failed In sock creation\n\n"); + "gaim_upnp_discover(): Failed In sock creation\n"); /* Short circuit the retry attempts */ dd->retry_count = NUM_UDP_ATTEMPTS; gaim_timeout_add(10, gaim_upnp_discover_timeout, dd); @@ -634,10 +635,10 @@ dd->fd = sock; - /* This shouldn't block */ + /* TODO: Non-blocking! */ if((hp = gethostbyname(HTTPMU_HOST_ADDRESS)) == NULL) { gaim_debug_error("upnp", - "gaim_upnp_discover(): Failed In gethostbyname\n\n"); + "gaim_upnp_discover(): Failed In gethostbyname\n"); /* Short circuit the retry attempts */ dd->retry_count = NUM_UDP_ATTEMPTS; gaim_timeout_add(10, gaim_upnp_discover_timeout, dd); @@ -670,7 +671,7 @@ if(!gaim_url_parse(control_info.control_url, &addressOfControl, &port, &pathOfControl, NULL, NULL)) { gaim_debug_error("upnp", - "generate_action_message_and_send(): Failed In Parse URL\n\n"); + "generate_action_message_and_send(): Failed In Parse URL\n"); /* XXX: This should probably be async */ if(cb) cb(NULL, cb_data, NULL, 0, NULL); @@ -728,17 +729,17 @@ if((temp = g_strstr_len(httpResponse, len, ""))) { gaim_debug_error("upnp", - "looked_up_public_ip_cb(): Failed In Finding >\n\n"); + "looked_up_public_ip_cb(): Failed In Finding >\n"); return; } if(!(temp2 = g_strstr_len(temp, len - (temp - httpResponse), "<"))) { gaim_debug_error("upnp", - "looked_up_public_ip_cb(): Failed In Finding <\n\n"); + "looked_up_public_ip_cb(): Failed In Finding <\n"); return; } *temp2 = '\0'; @@ -798,14 +799,14 @@ if(!gaim_url_parse(control_info.control_url, &addressOfControl, &port, NULL, NULL, NULL)) { gaim_debug_error("upnp", - "lookup_internal_ip(): Failed In Parse URL\n\n"); + "lookup_internal_ip(): Failed In Parse URL\n"); return; } if(port == 0 || port == -1) { port = DEFAULT_HTTP_PORT; } - if(gaim_proxy_connect(NULL, addressOfControl, port, + if(gaim_proxy_connect(NULL, NULL, addressOfControl, port, looked_up_internal_ip_cb, NULL) == NULL) { gaim_debug_error("upnp", "Get Local IP Connect Failed: Address: %s @@@ Port %d\n", @@ -828,7 +829,7 @@ (g_strstr_len(httpResponse, len, HTTP_OK) == NULL)) { gaim_debug_error("upnp", - "gaim_upnp_set_port_mapping(): Failed HTTP_OK\n\n%s\n\n", + "gaim_upnp_set_port_mapping(): Failed HTTP_OK\n%s\n", httpResponse ? httpResponse : "(null)"); success = FALSE; } else @@ -852,7 +853,7 @@ /* get the internal IP */ if(!(internal_ip = gaim_upnp_get_internal_ip())) { gaim_debug_error("upnp", - "gaim_upnp_set_port_mapping(): couldn't get local ip\n\n"); + "gaim_upnp_set_port_mapping(): couldn't get local ip\n"); /* UGLY */ if (ar->cb) ar->cb(FALSE, ar->cb_data); diff -r bfcdd361357e -r 118fd0dc5b6e libgaim/util.c --- a/libgaim/util.c Sat Oct 28 19:52:30 2006 +0000 +++ b/libgaim/util.c Sat Oct 28 20:04:03 2006 +0000 @@ -3152,7 +3152,7 @@ gaim_url_parse(new_url, &gfud->website.address, &gfud->website.port, &gfud->website.page, &gfud->website.user, &gfud->website.passwd); - gfud->connect_data = gaim_proxy_connect(NULL, + gfud->connect_data = gaim_proxy_connect(NULL, NULL, gfud->website.address, gfud->website.port, url_fetch_connect_cb, gfud); @@ -3451,7 +3451,7 @@ gaim_url_parse(url, &gfud->website.address, &gfud->website.port, &gfud->website.page, &gfud->website.user, &gfud->website.passwd); - gfud->connect_data = gaim_proxy_connect(NULL, + gfud->connect_data = gaim_proxy_connect(NULL, NULL, gfud->website.address, gfud->website.port, url_fetch_connect_cb, gfud);