Mercurial > hg
diff mcabber/src/jabglue.c @ 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 | b4921dbf8709 |
children | a05d5c3876ec |
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);