Mercurial > pidgin.yaz
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); |