libgaim/protocols/jabber/disco.c

changeset 15197
1d98528d4ee3
parent 14356
7f4abf922cfa
child 15225
d04a059065dd
--- a/libgaim/protocols/jabber/disco.c	Thu Dec 07 23:16:04 2006 +0000
+++ b/libgaim/protocols/jabber/disco.c	Fri Dec 08 02:51:47 2006 +0000
@@ -212,7 +212,48 @@
 }
 
 static void
-jabber_disco_server_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
+jabber_disco_server_info_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
+{
+  	xmlnode *query, *child;
+	const char *from = xmlnode_get_attrib(packet, "from");
+	const char *type = xmlnode_get_attrib(packet, "type");
+
+	if(!from || !type)
+		return;
+
+	if(strcmp(from, js->user->domain))
+		return;
+
+	if(strcmp(type, "result"))
+		return;
+
+	query = xmlnode_get_child(packet, "query");
+	
+	if (!query) return;
+	
+	for (child = xmlnode_get_child(query, "category"); child; 
+	     child = xmlnode_get_next_twin(child)) {
+		const char *category, *type, *name;
+		category = xmlnode_get_attrib(child, "category");
+		if (!category || strcmp(category, "server"))
+			continue;
+		type = xmlnode_get_attrib(child, "type");
+		if (!type || strcmp(type, "im"))
+			continue;
+		
+		name = xmlnode_get_attrib(child, "name");
+		if (!name)
+			continue;
+
+		g_free(js->server_name);
+		js->server_name = g_strdup(name);
+		if (!strcmp(name, "Google Talk"))
+			js->googletalk = TRUE;
+	}
+}
+
+static void
+jabber_disco_server_items_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
 {
 	xmlnode *query, *child;
 	const char *from = xmlnode_get_attrib(packet, "from");
@@ -255,7 +296,13 @@
 
 	xmlnode_set_attrib(iq->node, "to", js->user->domain);
 
-	jabber_iq_set_callback(iq, jabber_disco_server_result_cb, NULL);
+	jabber_iq_set_callback(iq, jabber_disco_server_items_result_cb, NULL);
+	jabber_iq_send(iq);
+
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET,
+		                 "http://jabber.org/protocol/disco#info");
+	xmlnode_set_attrib(iq->node, "to", js->user->domain);
+	jabber_iq_set_callback(iq, jabber_disco_server_info_result_cb, NULL);
 	jabber_iq_send(iq);
 }
 

mercurial