Mercurial > hg
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;