diff libpurple/protocols/jabber/jabber.c @ 17836:95affacf6f82

Added the ability to define extensions to caps
author Andreas Monitzer <pidgin@monitzer.com>
date Wed, 06 Jun 2007 01:19:49 +0000
parents 6ab1089e2101
children 0370da969e8a
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jabber.c	Wed Jun 06 00:04:29 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Wed Jun 06 01:19:49 2007 +0000
@@ -1024,6 +1024,12 @@
 #endif
 	if(js->serverFQDN)
 		g_free(js->serverFQDN);
+	while(js->features) {
+        g_free(((JabberFeature*)js->features->data)->shortname);
+        g_free(((JabberFeature*)js->features->data)->namespace);
+		g_free(js->features->data);
+		js->features = g_list_delete_link(js->features, js->features);
+	}
 	g_free(js->server_name);
 	g_free(js->gmail_last_time);
 	g_free(js->gmail_last_tid);
@@ -1093,6 +1099,32 @@
 	js->idle = idle ? time(NULL) - idle : idle;
 }
 
+void jabber_add_feature(JabberStream *js, const char *shortname, const char *namespace) {
+    JabberFeature *feat = g_new0(JabberFeature,1);
+    feat->shortname = g_strdup(shortname);
+    feat->namespace = g_strdup(namespace);
+    
+    /* try to remove just in case it already exists in the list */
+    jabber_remove_feature(js, shortname);
+    
+    js->features = g_list_append(js->features, feat);
+}
+
+void jabber_remove_feature(JabberStream *js, const char *shortname) {
+    GList *feature;
+    for(feature = js->features; feature; feature = feature->next) {
+        JabberFeature *feat = (JabberFeature*)feature->data;
+        if(!strcmp(feat->shortname, shortname)) {
+            g_free(feat->shortname);
+            g_free(feat->namespace);
+            
+            g_free(feature->data);
+            feature = g_list_delete_link(feature, feature);
+            break;
+        }
+    }
+}
+
 const char *jabber_list_icon(PurpleAccount *a, PurpleBuddy *b)
 {
 	return "jabber";