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) {