libpurple/protocols/jabber/disco.c

changeset 26596
d44a3a6a3046
parent 26595
f306ea83cb90
child 26741
3e50f27057d5
--- a/libpurple/protocols/jabber/disco.c	Tue Mar 31 18:32:33 2009 +0000
+++ b/libpurple/protocols/jabber/disco.c	Wed Apr 01 05:26:25 2009 +0000
@@ -602,44 +602,43 @@
 	jabber_disco_list_data_destroy(data);
 }
 
-static PurpleDiscoServiceCategory
+static PurpleDiscoServiceType
 jabber_disco_category_from_string(const gchar *str)
 {
-	if (!strcasecmp(str, "gateway"))
-		return PURPLE_DISCO_SERVICE_CAT_GATEWAY;
-	else if (!strcasecmp(str, "directory"))
-		return PURPLE_DISCO_SERVICE_CAT_DIRECTORY;
-	else if (!strcasecmp(str, "conference"))
-		return PURPLE_DISCO_SERVICE_CAT_MUC;
+	if (!g_ascii_strcasecmp(str, "gateway"))
+		return PURPLE_DISCO_SERVICE_TYPE_GATEWAY;
+	else if (!g_ascii_strcasecmp(str, "directory"))
+		return PURPLE_DISCO_SERVICE_TYPE_DIRECTORY;
+	else if (!g_ascii_strcasecmp(str, "conference"))
+		return PURPLE_DISCO_SERVICE_TYPE_CHAT;
 
-	return PURPLE_DISCO_SERVICE_CAT_OTHER;
+	return PURPLE_DISCO_SERVICE_TYPE_OTHER;
 }
 
-static PurpleDiscoServiceType
+static const gchar *
 jabber_disco_type_from_string(const gchar *str)
 {
 	if (!strcasecmp(str, "xmpp"))
-		return PURPLE_DISCO_SERVICE_TYPE_XMPP;
+		return "jabber";
 	else if (!strcasecmp(str, "icq"))
-		return PURPLE_DISCO_SERVICE_TYPE_ICQ;
+		return "icq";
 	else if (!strcasecmp(str, "smtp"))
-		return PURPLE_DISCO_SERVICE_TYPE_MAIL;
-	else if (!strcasecmp(str, "user"))
-		return PURPLE_DISCO_SERVICE_TYPE_USER;
+		return "smtp";
 	else if (!strcasecmp(str, "yahoo"))
-		return PURPLE_DISCO_SERVICE_TYPE_YAHOO;
+		return "yahoo";
 	else if (!strcasecmp(str, "irc"))
-		return PURPLE_DISCO_SERVICE_TYPE_IRC;
+		return "irc";
 	else if (!strcasecmp(str, "gadu-gadu"))
-		return PURPLE_DISCO_SERVICE_TYPE_GG;
+		return "gg";
 	else if (!strcasecmp(str, "aim"))
-		return PURPLE_DISCO_SERVICE_TYPE_AIM;
+		return "aim";
 	else if (!strcasecmp(str, "qq"))
-		return PURPLE_DISCO_SERVICE_TYPE_QQ;
+		return "qq";
 	else if (!strcasecmp(str, "msn"))
-		return PURPLE_DISCO_SERVICE_TYPE_MSN;
+		return "msn";
 
-	return PURPLE_DISCO_SERVICE_TYPE_NONE;
+	/* fallback to the string itself */
+	return str;
 }
 
 static void
@@ -743,8 +742,8 @@
 	const char *acat, *atype, *adesc, *anode;
 	char *aname;
 	PurpleDiscoService *s;
-	PurpleDiscoServiceCategory cat;
 	PurpleDiscoServiceType type;
+	const char *gateway_type = NULL;
 	PurpleDiscoServiceFlags flags = PURPLE_DISCO_ADD;
 
 	list_data = disco_data->list_data;
@@ -787,8 +786,9 @@
 		aname = g_strdup(from);
 	}
 
-	cat = jabber_disco_category_from_string(acat);
-	type = jabber_disco_type_from_string(atype);
+	type = jabber_disco_category_from_string(acat);
+	if (type == PURPLE_DISCO_SERVICE_TYPE_GATEWAY)
+		gateway_type = jabber_disco_type_from_string(atype);
 
 	for (child = xmlnode_get_child(query, "feature"); child;
 			child = xmlnode_get_next_twin(child)) {
@@ -804,16 +804,19 @@
 			flags |= PURPLE_DISCO_BROWSE;
 
 		if (!strcmp(var, "http://jabber.org/protocol/muc"))
-			cat = PURPLE_DISCO_SERVICE_CAT_MUC;
+			type = PURPLE_DISCO_SERVICE_TYPE_CHAT;
 	}
 
-	purple_debug_info("disco", "service %s, category %s (%d), type %s (%d), description %s, flags %04x\n",
+	purple_debug_info("disco", "service %s, category %s (%d), type %s (%s), description %s, flags %04x\n",
 			aname,
-			acat, cat,
-			atype, type,
+			acat, type,
+			atype, gateway_type ? gateway_type : "(null)",
 			adesc, flags);
 
-	s = purple_disco_list_service_new(cat, aname, type, adesc, flags);
+	s = purple_disco_list_service_new(type, aname, adesc, flags);
+	if (type == PURPLE_DISCO_SERVICE_TYPE_GATEWAY)
+		purple_disco_service_set_gateway_type(s, gateway_type);
+
 	purple_disco_list_service_add(list, s, parent);
 
 	/* if (flags & PURPLE_DISCO_FLAG_BROWSE) - not all browsable services has this future */

mercurial