Mercurial > pidgin
changeset 24515:f1936abe1616
Get the MSN buddy's network ID from the FindMembership response.
References #6755.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Mon, 01 Dec 2008 05:21:39 +0000 |
parents | e88f30b437ad |
children | ff275531cbf2 fdd9fd5c2086 6f41450584a7 |
files | libpurple/protocols/msn/contact.c |
diffstat | 1 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/msn/contact.c Fri Nov 28 05:11:52 2008 +0000 +++ b/libpurple/protocols/msn/contact.c Mon Dec 01 05:21:39 2008 +0000 @@ -223,9 +223,26 @@ char *type = xmlnode_get_data(xmlnode_get_child(member, "Type")); char *member_id = xmlnode_get_data(xmlnode_get_child(member, "MembershipId")); MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL); + xmlnode *annotation; + guint nid = MSN_NETWORK_PASSPORT; - purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s\n", - node, passport, type, member_id == NULL ? "(null)" : member_id); + for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); + annotation; + annotation = xmlnode_get_next_twin(annotation)) { + char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); + if (name && !strcmp(name, "MSN.IM.BuddyType")) { + char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); + if (value != NULL) + nid = strtoul(value, NULL, 10); + g_free(value); + } + g_free(name); + } + + purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n", + node, passport, type, member_id == NULL ? "(null)" : member_id, nid); + + msn_user_set_network(user, nid); if (member_id) { user->membership_id[list] = atoi(member_id);