changeset 192:62bc2992216b

[/trunk] Changeset 204 by mikael * Correctly set "agent" type... * Free all jidtodisp results with g_free() * Bugfix: Make sure to strip resource part when adding a buddy * Bugfix: do not treat users and agents separately (it can leads to 2 entries with the same jid).
author mikael
date Fri, 06 May 2005 17:05:53 +0000
parents 24e6bcb589b0
children 5cbdcccfab29
files mcabber/src/jabglue.c mcabber/src/roster.c
diffstat 2 files changed, 22 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/jabglue.c	Fri May 06 15:31:37 2005 +0000
+++ b/mcabber/src/jabglue.c	Fri May 06 17:05:53 2005 +0000
@@ -94,6 +94,9 @@
 }
 */
 
+//  jidtodisp(jid)
+// Strips the resource part from the jid
+// The caller should g_free the result after use.
 char *jidtodisp(const char *jid)
 {
   char *ptr;
@@ -294,6 +297,7 @@
 void jb_addbuddy(const char *jid, const char *group)
 {
   xmlnode x, y, z;
+  char *cleanjid;
 
   // XXX Check jid (but perhaps caller should do it)
 
@@ -318,7 +322,9 @@
   jab_send(jc, x);
   xmlnode_free(x);
 
-  roster_add_user(jid, NULL, group, ROSTER_TYPE_USER);
+  cleanjid = jidtodisp(jid);
+  roster_add_user(cleanjid, NULL, group, ROSTER_TYPE_USER);
+  g_free(cleanjid);
   buddylist_build();
 
   // maybe not needed: if user appears his status will change
@@ -407,14 +413,14 @@
 
     if (alias) {
       char *buddyname;
+      char *cleanalias = jidtodisp(alias);
       if (name)
         buddyname = (char*)name;
       else
-        buddyname = jidtodisp(alias);
+        buddyname = cleanalias;
 
-      roster_add_user(alias, buddyname, group, ROSTER_TYPE_USER);
-      if (!name)
-        free(buddyname);
+      roster_add_user(cleanalias, buddyname, group, ROSTER_TYPE_USER);
+      g_free(cleanalias);
     }
   }
 
@@ -437,7 +443,7 @@
 
   jid = jidtodisp(from);
   hk_message_in(jid, 0, body);
-  free(jid);
+  g_free(jid);
 }
 
 void statehandler(jconn conn, int state)
@@ -448,19 +454,13 @@
 
   switch(state) {
     case JCONN_STATE_OFF:
+        if (previous_state != JCONN_STATE_OFF)
+          scr_LogPrint("+ JCONN_STATE_OFF");
 
         online = FALSE;
         mystatus = offline;
         roster_free();
         update_roster = TRUE;
-
-        if (previous_state != JCONN_STATE_OFF) {
-          scr_LogPrint("+ JCONN_STATE_OFF");
-          /*
-           jhook.roster.clear();
-           jhook.agents.clear();
-          */
-        }
         break;
 
     case JCONN_STATE_CONNECTED:
@@ -599,6 +599,11 @@
                     if (xmlnode_get_tag(y, "transport")) atype = transport; else
                       if (xmlnode_get_tag(y, "search")) atype = search;
 
+                  if (atype == transport) {
+                    char *cleanjid = jidtodisp(alias);
+                    roster_add_user(cleanjid, NULL, NULL, ROSTER_TYPE_AGENT);
+                    g_free(cleanjid);
+                  }
                   if (alias && name && desc) {
                     scr_LogPrint("Agent: %s / %s / %s / type=%d",
                                  alias, name, desc, atype);
--- a/mcabber/src/roster.c	Fri May 06 15:31:37 2005 +0000
+++ b/mcabber/src/roster.c	Fri May 06 17:05:53 2005 +0000
@@ -74,8 +74,7 @@
   roster sample;
   GCompareFunc comp;
 
-  if (!jidname)
-    return NULL;    // should not happen
+  if (!jidname) return NULL;
 
   if (!roster_type)
     roster_type = ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_GROUP;
@@ -139,8 +138,8 @@
   if (!group)  group = "";
 
   // #1 Check this user doesn't already exist
-  if ((slist = roster_find(jid, jidsearch, type)) != NULL)
-    return slist;
+  slist = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
+  if (slist) return slist;
   // #2 add group if necessary
   slist = roster_add_group(group);
   if (!slist) return NULL;