# HG changeset patch # User mikael # Date 1115399153 0 # Node ID 62bc2992216bf6b3036aa3312cdc4c645d1e040a # Parent 24e6bcb589b037498420558831aaf7477dc3a505 [/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). diff -r 24e6bcb589b0 -r 62bc2992216b mcabber/src/jabglue.c --- 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); diff -r 24e6bcb589b0 -r 62bc2992216b mcabber/src/roster.c --- 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;