libpurple/protocols/jabber/google.c

branch
cpw.malu.xmpp.google_relay
changeset 28597
0e06c97202e9
parent 28596
efc266a6c069
child 28715
405e99540ff1
--- a/libpurple/protocols/jabber/google.c	Wed Sep 30 18:53:47 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Wed Sep 30 21:31:04 2009 +0000
@@ -379,6 +379,21 @@
 }
 
 static void
+jabber_google_relay_remove_url_data(JabberStream *js, 
+	PurpleUtilFetchUrlData *url_data)
+{
+	GList *iter = js->google_relay_requests;
+
+	while (iter) {
+		if (iter->data == url_data) {
+			js->google_relay_requests =
+				g_list_delete_link(js->google_relay_requests, iter);
+			break;
+		}
+	}
+}
+
+static void
 jabber_google_relay_response_session_initiate_cb(PurpleUtilFetchUrlData *url_data, 
 	gpointer user_data, const gchar *url_text, gsize len, 
 	const gchar *error_message)
@@ -394,7 +409,9 @@
 	gchar *relay_username = NULL;
 	gchar *relay_password = NULL;
 
-	js->google_relay_request = NULL;
+	if (url_data) {
+		jabber_google_relay_remove_url_data(js, url_data);
+	}
 
 	purple_debug_info("jabber", "got response on HTTP request to relay server\n");
 
@@ -449,6 +466,7 @@
 jabber_google_do_relay_request(JabberStream *js, GoogleSession *session,
 	PurpleUtilFetchUrlCallback cb)
 {
+	PurpleUtilFetchUrlData *url_data = NULL;
 	gchar *url = g_strdup_printf("http://%s", js->google_relay_host);
 	gchar *request =
 		g_strdup_printf("GET /create_session HTTP/1.0\r\n"
@@ -458,9 +476,16 @@
 			js->google_relay_host, js->google_relay_token, js->google_relay_token);
 	purple_debug_info("jabber", 
 		"sending Google relay request %s to %s\n", request, url); 
-	js->google_relay_request =
+	url_data = 
 		purple_util_fetch_url_request(url, FALSE, NULL, FALSE, request, FALSE,
 			cb, session);
+	if (url_data) {
+		js->google_relay_requests =
+			g_list_prepend(js->google_relay_requests, url_data);
+	} else {
+		purple_debug_error("jabber", "unable to create Google relay request\n");
+		cb(NULL, session, NULL, 0, NULL);
+	}
 	g_free(url);
 	g_free(request);
 }
@@ -542,7 +567,9 @@
 	GList *codecs = NULL;
 	JabberIq *result;
 
-	js->google_relay_request = NULL;
+	if (url_data) {
+		jabber_google_relay_remove_url_data(js, url_data);
+	}
 
 	if (url_text && len > 0) {
 		purple_debug_info("jabber", "got Google relay request response:\n%s\n",

mercurial