libpurple/protocols/jabber/caps.c

branch
soc.2008.vv
changeset 26117
69b9346d3e48
parent 22648
e286d795c5f9
parent 24029
b6955f09ca0b
child 26337
ec2fc1bc9024
--- a/libpurple/protocols/jabber/caps.c	Mon Aug 18 06:25:38 2008 +0000
+++ b/libpurple/protocols/jabber/caps.c	Mon Aug 18 06:31:08 2008 +0000
@@ -438,8 +438,6 @@
 	/* collect data and fetch all exts */
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
 		"http://jabber.org/protocol/disco#info");
-	xmlnode *child;
-	GList *iter;
 	jabber_caps_cbplususerdata *userdata = data;
 
 	/* TODO: Better error checking! */
@@ -447,6 +445,8 @@
 	if (query) {
 		JabberCapsValue *value = g_new0(JabberCapsValue, 1);
 		JabberCapsKey *key = g_new0(JabberCapsKey, 1);
+		xmlnode *child;
+		GList *iter;
 
 		value->ext = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, jabber_caps_ext_destroy_value);
 
@@ -476,23 +476,29 @@
 		}
 		g_hash_table_replace(capstable, key, value);
 		jabber_caps_store();
-	}
+
 
-	/* fetch all exts */
-	for(iter = userdata->ext; iter; iter = g_list_next(iter)) {
-		JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
-		xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", "http://jabber.org/protocol/disco#info");
-		char *node = g_strdup_printf("%s#%s", userdata->node, (const char*)iter->data);
-		jabber_ext_userdata *ext_data = g_new0(jabber_ext_userdata, 1);
-		ext_data->node = node;
-		ext_data->userdata = userdata;
+		/* fetch all exts */
+		for(iter = userdata->ext; iter; iter = g_list_next(iter)) {
+			JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET,
+				"http://jabber.org/protocol/disco#info");
+			xmlnode *query = xmlnode_get_child_with_namespace(iq->node,
+				"query", "http://jabber.org/protocol/disco#info");
+			char *node = g_strdup_printf("%s#%s", userdata->node, (const char*)iter->data);
+			jabber_ext_userdata *ext_data = g_new0(jabber_ext_userdata, 1);
+			ext_data->node = node;
+			ext_data->userdata = userdata;
 
-		xmlnode_set_attrib(query, "node", node);
-		xmlnode_set_attrib(iq->node, "to", userdata->who);
+			xmlnode_set_attrib(query, "node", node);
+			xmlnode_set_attrib(iq->node, "to", userdata->who);
 
-		jabber_iq_set_callback(iq, jabber_caps_ext_iqcb, ext_data);
-		jabber_iq_send(iq);
-	}
+			jabber_iq_set_callback(iq, jabber_caps_ext_iqcb, ext_data);
+			jabber_iq_send(iq);
+		}
+
+	} else
+		/* Don't wait for the ext discoveries; they aren't going to happen */
+		userdata->extOutstanding = 0;
 
 	jabber_caps_get_info_check_completion(userdata);
 }

mercurial