Mercurial > pidgin
comparison libpurple/protocols/jabber/presence.c @ 26753:09dc63a697e1
Fetch and track capabilities for MUC members. Add a further constraint for
fetching that *node && *ver (someone in chat@c.j.o was advertising
<c node="" ver="">).
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Wed, 29 Apr 2009 06:06:41 +0000 |
parents | 50db9eb2499a |
children | e816444c1a01 |
comparison
equal
deleted
inserted
replaced
26752:50db9eb2499a | 26753:09dc63a697e1 |
---|---|
776 if (idle) { | 776 if (idle) { |
777 jbr->idle = time(NULL) - idle; | 777 jbr->idle = time(NULL) - idle; |
778 } else { | 778 } else { |
779 jbr->idle = 0; | 779 jbr->idle = 0; |
780 } | 780 } |
781 | |
782 if(caps) { | |
783 /* handle XEP-0115 */ | |
784 const char *node = xmlnode_get_attrib(caps,"node"); | |
785 const char *ver = xmlnode_get_attrib(caps,"ver"); | |
786 const char *hash = xmlnode_get_attrib(caps,"hash"); | |
787 const char *ext = xmlnode_get_attrib(caps,"ext"); | |
788 | |
789 /* v1.3 uses: node, ver, and optionally ext. | |
790 * v1.5 uses: node, ver, and hash. */ | |
791 if (node && ver) { | |
792 JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); | |
793 userdata->js = js; | |
794 userdata->jb = jb; | |
795 userdata->from = g_strdup(from); | |
796 jabber_caps_get_info(js, from, node, ver, hash, ext, | |
797 (jabber_caps_get_info_cb)jabber_presence_set_capabilities, | |
798 userdata); | |
799 } | |
800 } | |
801 } | 781 } |
802 | 782 |
803 if((found_jbr = jabber_buddy_find_resource(jb, NULL))) { | 783 if((found_jbr = jabber_buddy_find_resource(jb, NULL))) { |
804 jabber_google_presence_incoming(js, buddy_name, found_jbr); | 784 jabber_google_presence_incoming(js, buddy_name, found_jbr); |
805 purple_prpl_got_user_status(js->gc->account, buddy_name, jabber_buddy_state_get_status_id(found_jbr->state), "priority", found_jbr->priority, "message", found_jbr->status, NULL); | 785 purple_prpl_got_user_status(js->gc->account, buddy_name, jabber_buddy_state_get_status_id(found_jbr->state), "priority", found_jbr->priority, "message", found_jbr->status, NULL); |
807 } else { | 787 } else { |
808 purple_prpl_got_user_status(js->gc->account, buddy_name, "offline", status ? "message" : NULL, status, NULL); | 788 purple_prpl_got_user_status(js->gc->account, buddy_name, "offline", status ? "message" : NULL, status, NULL); |
809 } | 789 } |
810 g_free(buddy_name); | 790 g_free(buddy_name); |
811 } | 791 } |
792 | |
793 if (caps && (!type || g_str_equal(type, "available"))) { | |
794 /* handle Entity Capabilities (XEP-0115) */ | |
795 const char *node = xmlnode_get_attrib(caps, "node"); | |
796 const char *ver = xmlnode_get_attrib(caps, "ver"); | |
797 const char *hash = xmlnode_get_attrib(caps, "hash"); | |
798 const char *ext = xmlnode_get_attrib(caps, "ext"); | |
799 | |
800 /* v1.3 uses: node, ver, and optionally ext. | |
801 * v1.5 uses: node, ver, and hash. */ | |
802 if (node && *node && ver && *ver) { | |
803 JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); | |
804 userdata->js = js; | |
805 userdata->jb = jb; | |
806 userdata->from = g_strdup(from); | |
807 jabber_caps_get_info(js, from, node, ver, hash, ext, | |
808 (jabber_caps_get_info_cb)jabber_presence_set_capabilities, | |
809 userdata); | |
810 } | |
811 } | |
812 | |
812 g_free(status); | 813 g_free(status); |
813 jabber_id_free(jid); | 814 jabber_id_free(jid); |
814 g_free(avatar_hash); | 815 g_free(avatar_hash); |
815 } | 816 } |
816 | 817 |