Mercurial > pidgin
comparison libpurple/protocols/jabber/presence.c @ 25149:416ff3d65c16
Rewrite jabber_presence_set_capabilities a little
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Fri, 21 Nov 2008 05:54:22 +0000 |
parents | 6d6e10476c52 |
children | 7dcba13d0e28 |
comparison
equal
deleted
inserted
replaced
25147:6d6e10476c52 | 25149:416ff3d65c16 |
---|---|
380 JabberStream *js; | 380 JabberStream *js; |
381 JabberBuddy *jb; | 381 JabberBuddy *jb; |
382 char *from; | 382 char *from; |
383 } JabberPresenceCapabilities; | 383 } JabberPresenceCapabilities; |
384 | 384 |
385 static void jabber_presence_set_capabilities(JabberCapsClientInfo *info, gpointer user_data) { | 385 static void jabber_presence_set_capabilities(JabberCapsClientInfo *info, JabberPresenceCapabilities *userdata) |
386 JabberPresenceCapabilities *userdata = user_data; | 386 { |
387 JabberID *jid; | |
388 JabberBuddyResource *jbr; | 387 JabberBuddyResource *jbr; |
389 GList *iter; | 388 char *resource = g_utf8_strrchr(userdata->from, -1, '/'); |
390 | 389 resource += 1; |
391 jid = jabber_id_new(userdata->from); | 390 |
392 jbr = jabber_buddy_find_resource(userdata->jb, jid->resource); | 391 jbr = jabber_buddy_find_resource(userdata->jb, resource); |
393 jabber_id_free(jid); | 392 if (!jbr) { |
394 | |
395 if(!jbr) { | |
396 g_free(userdata->from); | 393 g_free(userdata->from); |
397 g_free(userdata); | 394 g_free(userdata); |
398 return; | 395 return; |
399 } | 396 } |
400 | 397 |
401 if(jbr->caps) | 398 if(jbr->caps) |
402 jabber_caps_free_clientinfo(jbr->caps); | 399 jabber_caps_free_clientinfo(jbr->caps); |
403 jbr->caps = info; | 400 jbr->caps = info; |
404 | 401 |
405 if (info) { | 402 if (info) { |
406 for(iter = info->features; iter; iter = g_list_next(iter)) { | 403 GList *node = g_list_find_custom(info->features, "http://jabber.org/protocol/commands", (GCompareFunc)strcmp); |
407 if(!strcmp((const char*)iter->data, "http://jabber.org/protocol/commands")) { | 404 if (node) { |
408 JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items"); | 405 JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items"); |
409 xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items"); | 406 xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", "http://jabber.org/protocol/disco#items"); |
410 xmlnode_set_attrib(iq->node, "to", userdata->from); | 407 xmlnode_set_attrib(iq->node, "to", userdata->from); |
411 xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands"); | 408 xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands"); |
412 | 409 jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL); |
413 jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL); | 410 jabber_iq_send(iq); |
414 jabber_iq_send(iq); | |
415 break; | |
416 } | |
417 } | 411 } |
418 } | 412 } |
419 | 413 |
420 g_free(userdata->from); | 414 g_free(userdata->from); |
421 g_free(userdata); | 415 g_free(userdata); |
765 if(node && ver && hash) { | 759 if(node && ver && hash) { |
766 JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); | 760 JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); |
767 userdata->js = js; | 761 userdata->js = js; |
768 userdata->jb = jb; | 762 userdata->jb = jb; |
769 userdata->from = g_strdup(from); | 763 userdata->from = g_strdup(from); |
770 jabber_caps_get_info(js, from, node, ver, hash, jabber_presence_set_capabilities, userdata); | 764 jabber_caps_get_info(js, from, node, ver, hash, |
765 (jabber_caps_get_info_cb)jabber_presence_set_capabilities, | |
766 userdata); | |
771 } | 767 } |
772 } | 768 } |
773 } | 769 } |
774 | 770 |
775 if((found_jbr = jabber_buddy_find_resource(jb, NULL))) { | 771 if((found_jbr = jabber_buddy_find_resource(jb, NULL))) { |