comparison libpurple/protocols/jabber/presence.c @ 29070:5c77b620375c

merged with im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 30 Nov 2009 16:07:54 +0900
parents cfca0217d162
children 4ab6f0479bc5 1e19c439fa7a
comparison
equal deleted inserted replaced
29018:1929b7a0c2c8 29070:5c77b620375c
295 if (js->idle && state != JABBER_BUDDY_STATE_UNAVAILABLE) { 295 if (js->idle && state != JABBER_BUDDY_STATE_UNAVAILABLE) {
296 xmlnode *query = xmlnode_new_child(presence, "query"); 296 xmlnode *query = xmlnode_new_child(presence, "query");
297 gchar seconds[10]; 297 gchar seconds[10];
298 g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle)); 298 g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle));
299 299
300 xmlnode_set_namespace(query, "jabber:iq:last"); 300 xmlnode_set_namespace(query, NS_LAST_ACTIVITY);
301 xmlnode_set_attrib(query, "seconds", seconds); 301 xmlnode_set_attrib(query, "seconds", seconds);
302 } 302 }
303 303
304 /* JEP-0115 */ 304 /* JEP-0115 */
305 /* calculate hash */ 305 /* calculate hash */
460 460
461 if (info == NULL) 461 if (info == NULL)
462 goto out; 462 goto out;
463 463
464 if (!jbr->commands_fetched && jabber_resource_has_capability(jbr, "http://jabber.org/protocol/commands")) { 464 if (!jbr->commands_fetched && jabber_resource_has_capability(jbr, "http://jabber.org/protocol/commands")) {
465 JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items"); 465 JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, NS_DISCO_ITEMS);
466 xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", "http://jabber.org/protocol/disco#items"); 466 xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", NS_DISCO_ITEMS);
467 xmlnode_set_attrib(iq->node, "to", userdata->from); 467 xmlnode_set_attrib(iq->node, "to", userdata->from);
468 xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands"); 468 xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
469 jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL); 469 jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
470 jabber_iq_send(iq); 470 jabber_iq_send(iq);
471 471
631 g_free(p); 631 g_free(p);
632 } 632 }
633 } else if(xmlns == NULL) { 633 } else if(xmlns == NULL) {
634 /* The rest of the cases used to check xmlns individually. */ 634 /* The rest of the cases used to check xmlns individually. */
635 continue; 635 continue;
636 } else if(!strcmp(y->name, "delay") && !strcmp(xmlns, "urn:xmpp:delay")) { 636 } else if(!strcmp(y->name, "delay") && !strcmp(xmlns, NS_DELAYED_DELIVERY)) {
637 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */ 637 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */
638 delayed = TRUE; 638 delayed = TRUE;
639 stamp = xmlnode_get_attrib(y, "stamp"); 639 stamp = xmlnode_get_attrib(y, "stamp");
640 } else if(!strcmp(y->name, "c") && !strcmp(xmlns, "http://jabber.org/protocol/caps")) { 640 } else if(!strcmp(y->name, "c") && !strcmp(xmlns, "http://jabber.org/protocol/caps")) {
641 caps = y; /* store for later, when creating buddy resource */ 641 caps = y; /* store for later, when creating buddy resource */
642 } else if (g_str_equal(y->name, "nick") && g_str_equal(xmlns, "http://jabber.org/protocol/nick")) { 642 } else if (g_str_equal(y->name, "nick") && g_str_equal(xmlns, "http://jabber.org/protocol/nick")) {
643 nickname = xmlnode_get_data(y); 643 nickname = xmlnode_get_data(y);
644 } else if(!strcmp(y->name, "x")) { 644 } else if(!strcmp(y->name, "x")) {
645 if(!strcmp(xmlns, "jabber:x:delay")) { 645 if(!strcmp(xmlns, NS_DELAYED_DELIVERY_LEGACY)) {
646 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */ 646 /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */
647 delayed = TRUE; 647 delayed = TRUE;
648 stamp = xmlnode_get_attrib(y, "stamp"); 648 stamp = xmlnode_get_attrib(y, "stamp");
649 } else if(!strcmp(xmlns, "http://jabber.org/protocol/muc#user")) { 649 } else if(!strcmp(xmlns, "http://jabber.org/protocol/muc#user")) {
650 } else if(!strcmp(xmlns, "vcard-temp:x:update")) { 650 } else if(!strcmp(xmlns, "vcard-temp:x:update")) {
653 g_free(avatar_hash); 653 g_free(avatar_hash);
654 avatar_hash = xmlnode_get_data(photo); 654 avatar_hash = xmlnode_get_data(photo);
655 } 655 }
656 } 656 }
657 } else if (!strcmp(y->name, "query") && 657 } else if (!strcmp(y->name, "query") &&
658 !strcmp(xmlnode_get_namespace(y), "jabber:iq:last")) { 658 !strcmp(xmlnode_get_namespace(y), NS_LAST_ACTIVITY)) {
659 /* resource has specified idle */ 659 /* resource has specified idle */
660 const gchar *seconds = xmlnode_get_attrib(y, "seconds"); 660 const gchar *seconds = xmlnode_get_attrib(y, "seconds");
661 if (seconds) { 661 if (seconds) {
662 /* we may need to take "delayed" into account here */ 662 /* we may need to take "delayed" into account here */
663 idle = atoi(seconds); 663 idle = atoi(seconds);
955 } 955 }
956 } else { 956 } else {
957 buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "", 957 buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "",
958 jid->node ? "@" : "", jid->domain); 958 jid->node ? "@" : "", jid->domain);
959 if((b = purple_find_buddy(js->gc->account, buddy_name)) == NULL) { 959 if((b = purple_find_buddy(js->gc->account, buddy_name)) == NULL) {
960 if(!jid->node || strcmp(jid->node,js->user->node) || strcmp(jid->domain,js->user->domain)) { 960 if (jb != js->user_jb) {
961 purple_debug_warning("jabber", "Got presence for unknown buddy %s on account %s (%p)\n", 961 purple_debug_warning("jabber", "Got presence for unknown buddy %s on account %s (%p)\n",
962 buddy_name, purple_account_get_username(js->gc->account), js->gc->account); 962 buddy_name, purple_account_get_username(js->gc->account), js->gc->account);
963 jabber_id_free(jid); 963 jabber_id_free(jid);
964 g_free(avatar_hash); 964 g_free(avatar_hash);
965 g_free(buddy_name); 965 g_free(buddy_name);