From: <the...@us...> - 2006-10-28 20:05:04
|
Revision: 17606 http://svn.sourceforge.net/gaim/?rev=17606&view=rev Author: thekingant Date: 2006-10-28 13:04:03 -0700 (Sat, 28 Oct 2006) Log Message: ----------- 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. Modified Paths: -------------- trunk/ChangeLog.API trunk/libgaim/ft.c trunk/libgaim/protocols/irc/irc.c trunk/libgaim/protocols/irc/irc.h trunk/libgaim/protocols/jabber/jabber.c trunk/libgaim/protocols/jabber/jabber.h trunk/libgaim/protocols/jabber/si.c trunk/libgaim/protocols/msn/directconn.c trunk/libgaim/protocols/msn/httpconn.c trunk/libgaim/protocols/msn/servconn.c trunk/libgaim/protocols/oscar/oscar.c trunk/libgaim/protocols/oscar/peer.c trunk/libgaim/protocols/qq/qq_proxy.c trunk/libgaim/protocols/sametime/sametime.c trunk/libgaim/protocols/silc/silc.c trunk/libgaim/protocols/silc/silcgaim.h trunk/libgaim/protocols/simple/simple.c trunk/libgaim/protocols/toc/toc.c trunk/libgaim/protocols/yahoo/yahoo.c trunk/libgaim/protocols/yahoo/yahoo_filexfer.c trunk/libgaim/protocols/yahoo/yahoo_picture.c trunk/libgaim/protocols/yahoo/yahoochat.c trunk/libgaim/protocols/yahoo/ycht.c trunk/libgaim/proxy.c trunk/libgaim/proxy.h trunk/libgaim/sslconn.c trunk/libgaim/upnp.c trunk/libgaim/util.c Modified: trunk/ChangeLog.API =================================================================== --- trunk/ChangeLog.API 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/ChangeLog.API 2006-10-28 20:04:03 UTC (rev 17606) @@ -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 Modified: trunk/libgaim/ft.c =================================================================== --- trunk/libgaim/ft.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/ft.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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; Modified: trunk/libgaim/protocols/irc/irc.c =================================================================== --- trunk/libgaim/protocols/irc/irc.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/irc/irc.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); Modified: trunk/libgaim/protocols/irc/irc.h =================================================================== --- trunk/libgaim/protocols/irc/irc.h 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/irc/irc.h 2006-10-28 20:04:03 UTC (rev 17606) @@ -54,8 +54,6 @@ guint timer; GHashTable *buddies; - GaimProxyConnectData *connect_data; - char *inbuf; int inbuflen; int inbufused; Modified: trunk/libgaim/protocols/jabber/jabber.c =================================================================== --- trunk/libgaim/protocols/jabber/jabber.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/jabber/jabber.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) Modified: trunk/libgaim/protocols/jabber/jabber.h =================================================================== --- trunk/libgaim/protocols/jabber/jabber.h 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/jabber/jabber.h 2006-10-28 20:04:03 UTC (rev 17606) @@ -67,7 +67,6 @@ int fd; GaimSrvQueryData *srv_query_data; - GaimProxyConnectData *connect_data; xmlParserCtxt *context; xmlnode *current; Modified: trunk/libgaim/protocols/jabber/si.c =================================================================== --- trunk/libgaim/protocols/jabber/si.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/jabber/si.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); Modified: trunk/libgaim/protocols/msn/directconn.c =================================================================== --- trunk/libgaim/protocols/msn/directconn.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/msn/directconn.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) { Modified: trunk/libgaim/protocols/msn/httpconn.c =================================================================== --- trunk/libgaim/protocols/msn/httpconn.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/msn/httpconn.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) Modified: trunk/libgaim/protocols/msn/servconn.c =================================================================== --- trunk/libgaim/protocols/msn/servconn.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/msn/servconn.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) { Modified: trunk/libgaim/protocols/oscar/oscar.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/oscar/oscar.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); } Modified: trunk/libgaim/protocols/oscar/peer.c =================================================================== --- trunk/libgaim/protocols/oscar/peer.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/oscar/peer.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); Modified: trunk/libgaim/protocols/qq/qq_proxy.c =================================================================== --- trunk/libgaim/protocols/qq/qq_proxy.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/qq/qq_proxy.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); } Modified: trunk/libgaim/protocols/sametime/sametime.c =================================================================== --- trunk/libgaim/protocols/sametime/sametime.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/sametime/sametime.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); } Modified: trunk/libgaim/protocols/silc/silc.c =================================================================== --- trunk/libgaim/protocols/silc/silc.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/silc/silc.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); Modified: trunk/libgaim/protocols/silc/silcgaim.h =================================================================== --- trunk/libgaim/protocols/silc/silcgaim.h 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/silc/silcgaim.h 2006-10-28 20:04:03 UTC (rev 17606) @@ -67,7 +67,6 @@ SilcClient client; SilcClientConnection conn; - GaimProxyConnectData *connect_data; guint scheduler; GaimConnection *gc; GaimAccount *account; Modified: trunk/libgaim/protocols/simple/simple.c =================================================================== --- trunk/libgaim/protocols/simple/simple.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/simple/simple.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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")); } } Modified: trunk/libgaim/protocols/toc/toc.c =================================================================== --- trunk/libgaim/protocols/toc/toc.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/toc/toc.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); Modified: trunk/libgaim/protocols/yahoo/yahoo.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/yahoo/yahoo.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) Modified: trunk/libgaim/protocols/yahoo/yahoo_filexfer.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo_filexfer.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/yahoo/yahoo_filexfer.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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 Modified: trunk/libgaim/protocols/yahoo/yahoo_picture.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo_picture.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/yahoo/yahoo_picture.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) { Modified: trunk/libgaim/protocols/yahoo/yahoochat.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoochat.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/yahoo/yahoochat.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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), Modified: trunk/libgaim/protocols/yahoo/ycht.c =================================================================== --- trunk/libgaim/protocols/yahoo/ycht.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/protocols/yahoo/ycht.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) Modified: trunk/libgaim/proxy.c =================================================================== --- trunk/libgaim/proxy.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/proxy.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); } } Modified: trunk/libgaim/proxy.h =================================================================== --- trunk/libgaim/proxy.h 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/proxy.h 2006-10-28 20:04:03 UTC (rev 17606) @@ -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 Modified: trunk/libgaim/sslconn.c =================================================================== --- trunk/libgaim/sslconn.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/sslconn.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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) { Modified: trunk/libgaim/upnp.c =================================================================== --- trunk/libgaim/upnp.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/upnp.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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, "<root")) == NULL) { gaim_debug_error("upnp", - "parse_description_response(): Failed finding root\n\n"); + "parse_description_response(): Failed finding root\n"); return NULL; } @@ -230,7 +230,7 @@ if((xmlRootNode = xmlnode_from_str(xmlRoot, len - (xmlRoot - httpResponse))) == NULL) { gaim_debug_error("upnp", - "parse_description_response(): Could not parse xml root node\n\n"); + "parse_description_response(): Could not parse xml root node\n"); return NULL; } @@ -252,7 +252,7 @@ } if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 1\n\n"); + "parse_description_response(): could not get serviceTypeNode 1\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -260,7 +260,7 @@ serviceTypeNode = xmlnode_get_child(serviceTypeNode, "deviceList"); if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 2\n\n"); + "parse_description_response(): could not get serviceTypeNode 2\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -275,7 +275,7 @@ } if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 3\n\n"); + "parse_description_response(): could not get serviceTypeNode 3\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -283,7 +283,7 @@ serviceTypeNode = xmlnode_get_child(serviceTypeNode, "deviceList"); if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 4\n\n"); + "parse_description_response(): could not get serviceTypeNode 4\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -297,7 +297,7 @@ } if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 5\n\n"); + "parse_description_response(): could not get serviceTypeNode 5\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -305,7 +305,7 @@ serviceTypeNode = xmlnode_get_child(serviceTypeNode, "serviceList"); if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 6\n\n"); + "parse_description_response(): could not get serviceTypeNode 6\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -322,7 +322,7 @@ g_free(service); if(serviceTypeNode == NULL) { gaim_debug_error("upnp", - "parse_description_response(): could not get serviceTypeNode 7\n\n"); + "parse_description_response(): could not get serviceTypeNode 7\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -332,7 +332,7 @@ if((controlURLNode = xmlnode_get_child(serviceTypeNode, "controlURL")) == NULL) { gaim_debug_error("upnp", - "parse_description_response(): Could not find controlURL\n\n"); + "parse_description_response(): Could not find controlURL\n"); g_free(baseURL); xmlnode_free(xmlRootNode); return NULL; @@ -367,7 +367,7 @@ if(control_url == NULL) { gaim_debug_error("upnp", - "gaim_upnp_parse_description(): control URL is NULL\n\n"); + "gaim_upnp_parse_description(): control URL is NULL\n"); } control_info.status = control_url ? GAIM_UPNP_STATUS_DISCOVERED @@ -444,13 +444,13 @@ if(g_strstr_len(buf, buf_len, HTTP_OK) == NULL) { gaim_debug_error("upnp", - "parse_discover_response(): Failed In HTTP_OK\n\n"); + "parse_discover_response(): Failed In HTTP_OK\n"); return; } if((startDescURL = g_strstr_len(buf, buf_len, "http://")) == NULL) { gaim_debug_error("upnp", - "parse_discover_response(): Failed In finding http://\n\n"); + "parse_discover_response(): Failed In finding http://\n"); return; } @@ -461,7 +461,7 @@ buf_len - (startDescURL - buf), "\n"); if(endDescURL == NULL) { gaim_debug_error("upnp", - "parse_discover_response(): Failed In endDescURL\n\n"); + "parse_discover_response(): Failed In endDescURL\n"); return; } } @@ -469,7 +469,7 @@ /* XXX: I'm not sure how this could ever happen */ if(endDescURL == startDescURL) { gaim_debug_error("upnp", - "parse_discover_response(): endDescURL == startDescURL\n\n"); + "parse_discover_response(): endDescURL == startDescURL\n"); return; } @@ -492,6 +492,7 @@ dd->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, "<NewExternalIPAddress")) == NULL) { gaim_debug_error("upnp", - "looked_up_public_ip_cb(): Failed Finding <NewExternalIPAddress\n\n"); + "looked_up_public_ip_cb(): Failed Finding <NewExternalIPAddress\n"); return; } if(!(temp = 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; } 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); Modified: trunk/libgaim/util.c =================================================================== --- trunk/libgaim/util.c 2006-10-28 19:52:30 UTC (rev 17605) +++ trunk/libgaim/util.c 2006-10-28 20:04:03 UTC (rev 17606) @@ -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); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |