Mercurial > hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
191:24e6bcb589b0 | 192:62bc2992216b |
---|---|
92 *user = strdup(tmp); | 92 *user = strdup(tmp); |
93 free(tmp); | 93 free(tmp); |
94 } | 94 } |
95 */ | 95 */ |
96 | 96 |
97 // jidtodisp(jid) | |
98 // Strips the resource part from the jid | |
99 // The caller should g_free the result after use. | |
97 char *jidtodisp(const char *jid) | 100 char *jidtodisp(const char *jid) |
98 { | 101 { |
99 char *ptr; | 102 char *ptr; |
100 char *alias; | 103 char *alias; |
101 | 104 |
292 } | 295 } |
293 | 296 |
294 void jb_addbuddy(const char *jid, const char *group) | 297 void jb_addbuddy(const char *jid, const char *group) |
295 { | 298 { |
296 xmlnode x, y, z; | 299 xmlnode x, y, z; |
300 char *cleanjid; | |
297 | 301 |
298 // XXX Check jid (but perhaps caller should do it) | 302 // XXX Check jid (but perhaps caller should do it) |
299 | 303 |
300 // We don't check if the jabber user already exists in the roster, | 304 // We don't check if the jabber user already exists in the roster, |
301 // because it allows to re-ask for notification. | 305 // because it allows to re-ask for notification. |
316 } | 320 } |
317 | 321 |
318 jab_send(jc, x); | 322 jab_send(jc, x); |
319 xmlnode_free(x); | 323 xmlnode_free(x); |
320 | 324 |
321 roster_add_user(jid, NULL, group, ROSTER_TYPE_USER); | 325 cleanjid = jidtodisp(jid); |
326 roster_add_user(cleanjid, NULL, group, ROSTER_TYPE_USER); | |
327 g_free(cleanjid); | |
322 buddylist_build(); | 328 buddylist_build(); |
323 | 329 |
324 // maybe not needed: if user appears his status will change | 330 // maybe not needed: if user appears his status will change |
325 //update_roster = TRUE; | 331 //update_roster = TRUE; |
326 } | 332 } |
405 z = xmlnode_get_tag(y, "group"); | 411 z = xmlnode_get_tag(y, "group"); |
406 if (z) group = xmlnode_get_data(z); | 412 if (z) group = xmlnode_get_data(z); |
407 | 413 |
408 if (alias) { | 414 if (alias) { |
409 char *buddyname; | 415 char *buddyname; |
416 char *cleanalias = jidtodisp(alias); | |
410 if (name) | 417 if (name) |
411 buddyname = (char*)name; | 418 buddyname = (char*)name; |
412 else | 419 else |
413 buddyname = jidtodisp(alias); | 420 buddyname = cleanalias; |
414 | 421 |
415 roster_add_user(alias, buddyname, group, ROSTER_TYPE_USER); | 422 roster_add_user(cleanalias, buddyname, group, ROSTER_TYPE_USER); |
416 if (!name) | 423 g_free(cleanalias); |
417 free(buddyname); | |
418 } | 424 } |
419 } | 425 } |
420 | 426 |
421 postlogin(); | 427 postlogin(); |
422 } | 428 } |
435 //scr_LogPrint("Msg from <%s>, type=%s", jidtodisp(from), type); | 441 //scr_LogPrint("Msg from <%s>, type=%s", jidtodisp(from), type); |
436 */ | 442 */ |
437 | 443 |
438 jid = jidtodisp(from); | 444 jid = jidtodisp(from); |
439 hk_message_in(jid, 0, body); | 445 hk_message_in(jid, 0, body); |
440 free(jid); | 446 g_free(jid); |
441 } | 447 } |
442 | 448 |
443 void statehandler(jconn conn, int state) | 449 void statehandler(jconn conn, int state) |
444 { | 450 { |
445 static int previous_state = -1; | 451 static int previous_state = -1; |
446 | 452 |
447 ut_WriteLog("StateHandler called (state=%d).\n", state); | 453 ut_WriteLog("StateHandler called (state=%d).\n", state); |
448 | 454 |
449 switch(state) { | 455 switch(state) { |
450 case JCONN_STATE_OFF: | 456 case JCONN_STATE_OFF: |
457 if (previous_state != JCONN_STATE_OFF) | |
458 scr_LogPrint("+ JCONN_STATE_OFF"); | |
451 | 459 |
452 online = FALSE; | 460 online = FALSE; |
453 mystatus = offline; | 461 mystatus = offline; |
454 roster_free(); | 462 roster_free(); |
455 update_roster = TRUE; | 463 update_roster = TRUE; |
456 | |
457 if (previous_state != JCONN_STATE_OFF) { | |
458 scr_LogPrint("+ JCONN_STATE_OFF"); | |
459 /* | |
460 jhook.roster.clear(); | |
461 jhook.agents.clear(); | |
462 */ | |
463 } | |
464 break; | 464 break; |
465 | 465 |
466 case JCONN_STATE_CONNECTED: | 466 case JCONN_STATE_CONNECTED: |
467 scr_LogPrint("+ JCONN_STATE_CONNECTED"); | 467 scr_LogPrint("+ JCONN_STATE_CONNECTED"); |
468 break; | 468 break; |
597 | 597 |
598 if (xmlnode_get_tag(y, "groupchat")) atype = groupchat; else | 598 if (xmlnode_get_tag(y, "groupchat")) atype = groupchat; else |
599 if (xmlnode_get_tag(y, "transport")) atype = transport; else | 599 if (xmlnode_get_tag(y, "transport")) atype = transport; else |
600 if (xmlnode_get_tag(y, "search")) atype = search; | 600 if (xmlnode_get_tag(y, "search")) atype = search; |
601 | 601 |
602 if (atype == transport) { | |
603 char *cleanjid = jidtodisp(alias); | |
604 roster_add_user(cleanjid, NULL, NULL, ROSTER_TYPE_AGENT); | |
605 g_free(cleanjid); | |
606 } | |
602 if (alias && name && desc) { | 607 if (alias && name && desc) { |
603 scr_LogPrint("Agent: %s / %s / %s / type=%d", | 608 scr_LogPrint("Agent: %s / %s / %s / type=%d", |
604 alias, name, desc, atype); | 609 alias, name, desc, atype); |
605 | 610 |
606 if (atype == search) { | 611 if (atype == search) { |