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