diff libgaim/protocols/jabber/si.c @ 14267:645598a4ec04

[gaim-migrate @ 16949] Change gaim_network_listen() and gaim_network_listen_range() to be cancelable. This doesn't actually help anything yet, since the gaim_upnp_functions() are not yet cancelable. But the framework is there, and the PRPLs shouldn't need any additional changes. Still to go: gaim_upnp_everything() gaim_url_fetch() gaim_srv_resolve() Let me know if there are others committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Mon, 21 Aug 2006 07:47:03 +0000
parents baff095b146c
children 8a6154a52b84
line wrap: on
line diff
--- a/libgaim/protocols/jabber/si.c	Mon Aug 21 07:44:31 2006 +0000
+++ b/libgaim/protocols/jabber/si.c	Mon Aug 21 07:47:03 2006 +0000
@@ -47,6 +47,7 @@
 	JabberStream *js;
 
 	GaimProxyConnectData *connect_data;
+	GaimNetworkListenData *listen_data;
 
 	gboolean accepted;
 
@@ -539,13 +540,14 @@
 	xmlnode *query, *streamhost;
 	char *jid, *port;
 
+	jsx = xfer->data;
+	jsx->listen_data = NULL;
+
 	if (gaim_xfer_get_status(xfer) == GAIM_XFER_STATUS_CANCEL_LOCAL) {
 		gaim_xfer_unref(xfer);
 		return;
 	}
 
-	jsx = xfer->data;
-
 	gaim_xfer_unref(xfer);
 
 	if (sock < 0) {
@@ -588,10 +590,14 @@
 static void
 jabber_si_xfer_bytestreams_send_init(GaimXfer *xfer)
 {
+	JabberSIXfer *jsx;
+
 	gaim_xfer_ref(xfer);
 
-	if(!gaim_network_listen_range(0, 0, SOCK_STREAM,
-				jabber_si_xfer_bytestreams_listen_cb, xfer)) {
+	jsx = xfer->data;
+	jsx->listen_data = gaim_network_listen_range(0, 0, SOCK_STREAM,
+				jabber_si_xfer_bytestreams_listen_cb, xfer);
+	if (jsx->listen_data == NULL) {
 		gaim_xfer_unref(xfer);
 		/* XXX: couldn't open a port, we're fscked */
 		gaim_xfer_cancel_local(xfer);
@@ -698,6 +704,8 @@
 
 	if (jsx->connect_data != NULL)
 		gaim_proxy_connect_cancel(jsx->connect_data);
+	if (jsx->listen_data != NULL)
+		gaim_network_listen_cancel(jsx->listen_data);
 
 	g_free(jsx->stream_id);
 	g_free(jsx->iq_id);