# HG changeset patch # User Elliott Sales de Andrade # Date 1198629290 0 # Node ID b70f30dd47532eca67bf769369505f23b06c4ac0 # Parent 25899ec348a4972d77b3e4d21c089a29dedd8042 Patch 3 from Qulogic, this one updates contact list actions to use ticket tokens committer: Ka-Hing Cheung diff -r 25899ec348a4 -r b70f30dd4753 libpurple/protocols/msn/contact.c --- a/libpurple/protocols/msn/contact.c Wed Dec 26 00:34:12 2007 +0000 +++ b/libpurple/protocols/msn/contact.c Wed Dec 26 00:34:50 2007 +0000 @@ -29,6 +29,7 @@ #include "xmlnode.h" #include "group.h" #include "soap2.h" +#include "nexus.h" const char *MsnSoapPartnerScenarioText[] = { @@ -206,6 +207,26 @@ return MSN_USER_TYPE_UNKNOWN; } +/* Get a ticket token that's correctly formatted */ +static const char * +msn_contact_get_token(MsnContact *contact) +{ + GHashTable *token; + char *msn_t; + char *msn_p; + static char token_str[BUF_LEN]; + + token = msn_nexus_get_token(contact->session->nexus, MSN_AUTH_CONTACTS); + msn_t = g_hash_table_lookup(token, "t"); + msn_p = g_hash_table_lookup(token, "p"); + + g_sprintf(token_str, "t=%s&p=%s", msn_t, msn_p); + + g_hash_table_unref(token); + + return token_str; +} + /* Create the AddressBook in the server, if we don't have one */ static void msn_create_address_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data) @@ -230,7 +251,9 @@ purple_debug_info("msnab","Creating an Address Book.\n"); - body = g_strdup_printf(MSN_ADD_ADDRESSBOOK_TEMPLATE, contact->session->user->passport); + body = g_strdup_printf(MSN_ADD_ADDRESSBOOK_TEMPLATE, + msn_contact_get_token(contact), + contact->session->user->passport); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_ADD_ADDRESSBOOK_SOAP_ACTION, @@ -416,7 +439,9 @@ update_str = g_strdup_printf(MSN_GET_CONTACT_UPDATE_XML,update_time); } - body = g_strdup_printf(MSN_GET_CONTACT_TEMPLATE, partner_scenario_str, update_str ? update_str : ""); + body = g_strdup_printf(MSN_GET_CONTACT_TEMPLATE, partner_scenario_str, + msn_contact_get_token(contact), + update_str ? update_str : ""); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_GET_CONTACT_SOAP_ACTION, @@ -729,7 +754,10 @@ else if (LastChanged != NULL) update_str = g_strdup_printf(MSN_GET_ADDRESS_UPDATE_XML, LastChanged); - body = g_strdup_printf(MSN_GET_ADDRESS_TEMPLATE, MsnSoapPartnerScenarioText[partner_scenario], update_str ? update_str : ""); + body = g_strdup_printf(MSN_GET_ADDRESS_TEMPLATE, + MsnSoapPartnerScenarioText[partner_scenario], + msn_contact_get_token(contact), + update_str ? update_str : ""); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_GET_ADDRESS_SOAP_ACTION, @@ -794,7 +822,9 @@ purple_debug_info("MSNCL","Adding contact %s to contact list\n", passport); contact_xml = g_strdup_printf(MSN_CONTACT_XML, passport); - body = g_strdup_printf(MSN_ADD_CONTACT_TEMPLATE, contact_xml); + body = g_strdup_printf(MSN_ADD_CONTACT_TEMPLATE, + msn_contact_get_token(contact), + contact_xml); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_CONTACT_ADD_SOAP_ACTION, @@ -902,7 +932,10 @@ contact_xml = g_strdup_printf(MSN_CONTACT_XML, passport); } - body = g_strdup_printf(MSN_ADD_CONTACT_GROUP_TEMPLATE, groupId, contact_xml); + body = g_strdup_printf(MSN_ADD_CONTACT_GROUP_TEMPLATE, + msn_contact_get_token(contact), + groupId, + contact_xml); msn_soap_message_send(state->session, msn_soap_message_new(MSN_ADD_CONTACT_GROUP_SOAP_ACTION, @@ -950,7 +983,9 @@ /* build SOAP request */ purple_debug_info("MSNCL","Deleting contact with contactId: %s\n", contactId); - body = g_strdup_printf(MSN_DEL_CONTACT_TEMPLATE, contact_id_xml); + body = g_strdup_printf(MSN_DEL_CONTACT_TEMPLATE, + msn_contact_get_token(contact), + contact_id_xml); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_CONTACT_DEL_SOAP_ACTION, xmlnode_from_str(body, -1)), @@ -1022,7 +1057,10 @@ msn_callback_state_set_old_group_name(state, group_name); contact_id_xml = g_strdup_printf(MSN_CONTACT_ID_XML, user->uid); - body = g_strdup_printf(MSN_CONTACT_DEL_GROUP_TEMPLATE, contact_id_xml, groupId); + body = g_strdup_printf(MSN_CONTACT_DEL_GROUP_TEMPLATE, + msn_contact_get_token(contact), + contact_id_xml, + groupId); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_CONTACT_DEL_GROUP_SOAP_ACTION, @@ -1055,7 +1093,9 @@ escaped_nickname = g_markup_escape_text(nickname, -1); - body = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE, escaped_nickname); + body = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE, + msn_contact_get_token(contact), + escaped_nickname); msn_soap_message_send(contact->session, msn_soap_message_new(MSN_CONTACT_UPDATE_SOAP_ACTION, @@ -1134,6 +1174,7 @@ body = g_strdup_printf( MSN_CONTACT_DELECT_FROM_LIST_TEMPLATE, MsnSoapPartnerScenarioText[partner_scenario], + msn_contact_get_token(contact), MsnMemberRole[list], member); @@ -1206,6 +1247,7 @@ body = g_strdup_printf(MSN_CONTACT_ADD_TO_LIST_TEMPLATE, MsnSoapPartnerScenarioText[partner_scenario], + msn_contact_get_token(contact), MsnMemberRole[list], member); @@ -1234,13 +1276,18 @@ msn_get_gleams(MsnContact *contact) { MsnSoapReq *soap_request; + gchar *body = NULL; purple_debug_info("MSNP14","msn get gleams info...\n"); + + body = g_strdup_printf(MSN_GLEAMS_TEMPLATE, + msn_contact_get_token(contact)) msn_soap_message_send(contact->session, msn_soap_message_new(MSN_GET_GLEAMS_SOAP_ACTION, - xmlnode_from_str(MSN_GLEAMS_TEMPLATE, -1)), + xmlnode_from_str(body, -1)), MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, msn_gleams_read_cb, NULL); + g_free(body); } #endif @@ -1339,7 +1386,9 @@ /* escape group name's html special chars so it can safely be sent * in a XML SOAP request */ - body = g_markup_printf_escaped(MSN_GROUP_ADD_TEMPLATE, group_name); + body = g_markup_printf_escaped(MSN_GROUP_ADD_TEMPLATE, + msn_contact_get_token(session->contact), + group_name); msn_soap_message_send(session, msn_soap_message_new(MSN_GROUP_ADD_SOAP_ACTION, @@ -1382,7 +1431,9 @@ msn_callback_state_set_action(state, MSN_DEL_GROUP); msn_callback_state_set_guid(state, guid); - body = g_strdup_printf(MSN_GROUP_DEL_TEMPLATE, guid); + body = g_strdup_printf(MSN_GROUP_DEL_TEMPLATE, + msn_contact_get_token(session->contact), + guid); msn_soap_message_send(session, msn_soap_message_new(MSN_GROUP_DEL_SOAP_ACTION, @@ -1424,7 +1475,8 @@ msn_callback_state_set_action(state, MSN_RENAME_GROUP); body = g_markup_printf_escaped(MSN_GROUP_RENAME_TEMPLATE, - guid, new_group_name); + msn_contact_get_token(session->contact), + guid, new_group_name); msn_soap_message_send(session, msn_soap_message_new(MSN_GROUP_RENAME_SOAP_ACTION, diff -r 25899ec348a4 -r b70f30dd4753 libpurple/protocols/msn/contact.h --- a/libpurple/protocols/msn/contact.h Wed Dec 26 00:34:12 2007 +0000 +++ b/libpurple/protocols/msn/contact.h Wed Dec 26 00:34:50 2007 +0000 @@ -31,9 +31,12 @@ #define MSN_GET_CONTACT_POST_URL "/abservice/SharingService.asmx" #define MSN_GET_CONTACT_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/FindMembership" -#define MSN_GET_CONTACT_UPDATE_XML "Full"\ + +#define MSN_GET_CONTACT_UPDATE_XML \ + "Full"\ "true"\ "%s" + #define MSN_GET_CONTACT_TEMPLATE ""\ ""\ ""\ @@ -44,6 +47,7 @@ ""\ ""\ "false"\ + "%s"\ ""\ ""\ ""\ @@ -72,7 +76,11 @@ #define MSN_ADD_ADDRESSBOOK_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABAdd" #define MSN_ADD_ADDRESSBOOK_TEMPLATE ""\ -""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -81,6 +89,7 @@ ""\ ""\ "false"\ + "%s"\ ""\ ""\ ""\ @@ -98,7 +107,8 @@ /* Get AddressBook */ #define MSN_GET_ADDRESS_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABFindAll" #define MSN_GET_ADDRESS_FULL_TIME "0001-01-01T00:00:00.0000000-08:00" -#define MSN_GET_ADDRESS_UPDATE_XML "true"\ +#define MSN_GET_ADDRESS_UPDATE_XML \ + "true"\ "%s" #define MSN_GET_GLEAM_UPDATE_XML \ @@ -107,7 +117,11 @@ "%s" #define MSN_GET_ADDRESS_TEMPLATE ""\ -""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -116,6 +130,7 @@ ""\ ""\ "false"\ + "%s"\ ""\ ""\ ""\ @@ -131,7 +146,11 @@ /*Gleams SOAP request template*/ #define MSN_GET_GLEAMS_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABFindAll" #define MSN_GLEAMS_TEMPLATE ""\ -""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -140,6 +159,7 @@ ""\ ""\ "false"\ + "%s"\ ""\ ""\ ""\ @@ -157,26 +177,40 @@ * Contact Management SOAP actions *******************************************************/ -/* Add a new contact t*/ +/* Add a new contact */ #define MSN_CONTACT_ADD_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactAdd" -#define MSN_CONTACT_LIVE_PENDING_XML "LivePending%strue" +#define MSN_CONTACT_LIVE_PENDING_XML \ + ""\ + ""\ + "LivePending"\ + "%s"\ + "true"\ + ""\ + "" -#define MSN_CONTACT_XML ""\ - ""\ - "%s"\ - "false"\ - "true"\ - ""\ - "" +#define MSN_CONTACT_XML \ + ""\ + ""\ + "%s"\ + "false"\ + "true"\ + ""\ + "" -#define MSN_CONTACT_DISPLAYNAME_XML "%s%strue" - -#define MSN_ADD_CONTACT_TEMPLATE "09607671-1C32-421F-A6A6-CBFAA51AB5F4falseContactSavefalse00000000-0000-0000-0000-000000000000%strue" +#define MSN_CONTACT_DISPLAYNAME_XML \ + ""\ + ""\ + "%s"\ + "%s"\ + "true"\ + ""\ + "" -/* Add a contact to a group */ -#define MSN_ADD_CONTACT_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactAdd" -#define MSN_ADD_CONTACT_GROUP_TEMPLATE ""\ -""\ +#define MSN_ADD_CONTACT_TEMPLATE ""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -185,6 +219,36 @@ ""\ ""\ "false"\ + "%s"\ + ""\ + ""\ + ""\ + ""\ + "00000000-0000-0000-0000-000000000000"\ + "%s"\ + ""\ + "true"\ + ""\ + ""\ + ""\ +"" + +/* Add a contact to a group */ +#define MSN_ADD_CONTACT_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactAdd" +#define MSN_ADD_CONTACT_GROUP_TEMPLATE ""\ +""\ + ""\ + ""\ + "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ + "false"\ + "ContactSave"\ + ""\ + ""\ + "false"\ + "%s"\ ""\ ""\ ""\ @@ -207,17 +271,12 @@ /* Delete a contact from the Contact List */ #define MSN_CONTACT_DEL_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactDelete" #define MSN_CONTACT_ID_XML "%s" -#define MSN_DEL_CONTACT_TEMPLATE "09607671-1C32-421F-A6A6-CBFAA51AB5F4falseTimerfalse00000000-0000-0000-0000-000000000000%s" - -/* Remove a contact from a group */ -#define MSN_CONTACT_DEL_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactDelete" -#define MSN_CONTACT_DEL_GROUP_TEMPLATE "09607671-1C32-421F-A6A6-CBFAA51AB5F4falseTimerfalse00000000-0000-0000-0000-000000000000%s%s" - - -/* Update Contact Nickname */ -#define MSN_CONTACT_UPDATE_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactUpdate" -#define MSN_CONTACT_UPDATE_TEMPLATE ""\ -""\ +#define MSN_DEL_CONTACT_TEMPLATE ""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -226,6 +285,67 @@ ""\ ""\ "false"\ + "%s"\ + ""\ + ""\ + ""\ + ""\ + "00000000-0000-0000-0000-000000000000"\ + "%s"\ + ""\ + ""\ +"" + +/* Remove a contact from a group */ +#define MSN_CONTACT_DEL_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactDelete" +#define MSN_CONTACT_DEL_GROUP_TEMPLATE ""\ +""\ + ""\ + ""\ + "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ + "false"\ + "Timer"\ + ""\ + ""\ + "false"\ + "%s"\ + ""\ + ""\ + ""\ + ""\ + "00000000-0000-0000-0000-000000000000"\ + "%s"\ + ""\ + ""\ + "%s"\ + ""\ + ""\ + ""\ + ""\ +"" + + +/* Update Contact Nickname */ +#define MSN_CONTACT_UPDATE_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactUpdate" +#define MSN_CONTACT_UPDATE_TEMPLATE ""\ +""\ + ""\ + ""\ + "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ + "false"\ + "Timer"\ + ""\ + ""\ + "false"\ + "%s"\ ""\ ""\ ""\ @@ -255,22 +375,28 @@ #define MSN_ADD_MEMBER_TO_LIST_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/AddMember" #define MSN_DELETE_MEMBER_FROM_LIST_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/DeleteMember" -#define MSN_MEMBER_PASSPORT_XML ""\ - "Passport"\ - "Accepted"\ - "%s"\ - "" +#define MSN_MEMBER_PASSPORT_XML \ + ""\ + "Passport"\ + "Accepted"\ + "%s"\ + "" -#define MSN_MEMBER_MEMBERSHIPID_XML ""\ - "Passport"\ - "%u"\ - "Accepted"\ - "" +#define MSN_MEMBER_MEMBERSHIPID_XML \ + ""\ + "Passport"\ + "%u"\ + "Accepted"\ + "" /* first delete contact from allow list */ #define MSN_CONTACT_DELECT_FROM_LIST_TEMPLATE ""\ -""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -279,6 +405,7 @@ ""\ ""\ "false"\ + "%s"\ ""\ ""\ ""\ @@ -301,7 +428,11 @@ "" #define MSN_CONTACT_ADD_TO_LIST_TEMPLATE ""\ -""\ +""\ ""\ ""\ "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ @@ -310,6 +441,7 @@ ""\ ""\ "false"\ + "%s"\ ""\ ""\ ""\ @@ -339,15 +471,111 @@ /* add a group */ #define MSN_GROUP_ADD_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupAdd" -#define MSN_GROUP_ADD_TEMPLATE "09607671-1C32-421F-A6A6-CBFAA51AB5F4falseGroupSavefalse00000000-0000-0000-0000-000000000000false%sC8529CE2-6EAD-434d-881F-341E17DB3FF8falseMSN.IM.Display1" +#define MSN_GROUP_ADD_TEMPLATE ""\ +""\ + ""\ + ""\ + "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ + "false"\ + "GroupSave"\ + ""\ + ""\ + "false"\ + "%s"\ + ""\ + ""\ + ""\ + ""\ + "00000000-0000-0000-0000-000000000000"\ + ""\ + "false"\ + ""\ + ""\ + ""\ + "%s"\ + "C8529CE2-6EAD-434d-881F-341E17DB3FF8"\ + "false"\ + ""\ + ""\ + "MSN.IM.Display"\ + "1"\ + ""\ + ""\ + ""\ + ""\ + ""\ + ""\ +"" /* delete a group */ #define MSN_GROUP_DEL_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupDelete" -#define MSN_GROUP_DEL_TEMPLATE "09607671-1C32-421F-A6A6-CBFAA51AB5F4falseTimerfalse00000000-0000-0000-0000-000000000000%s" +#define MSN_GROUP_DEL_TEMPLATE ""\ +""\ + ""\ + ""\ + "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ + "false"\ + "Timer"\ + ""\ + ""\ + "false"\ + "%s"\ + ""\ + ""\ + ""\ + ""\ + "00000000-0000-0000-0000-000000000000"\ + ""\ + ""\ + "%s"\ + ""\ + ""\ + ""\ + ""\ +"" /* change a group's name */ #define MSN_GROUP_RENAME_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupUpdate" -#define MSN_GROUP_RENAME_TEMPLATE "09607671-1C32-421F-A6A6-CBFAA51AB5F4falseTimerfalse00000000-0000-0000-0000-000000000000%s%sGroupName " +#define MSN_GROUP_RENAME_TEMPLATE ""\ +""\ + ""\ + ""\ + "09607671-1C32-421F-A6A6-CBFAA51AB5F4"\ + "false"\ + "Timer"\ + ""\ + ""\ + "false"\ + "%s"\ + ""\ + ""\ + ""\ + ""\ + "00000000-0000-0000-0000-000000000000"\ + ""\ + ""\ + "%s"\ + ""\ + "%s"\ + ""\ + "GroupName "\ + ""\ + ""\ + ""\ + ""\ +"" typedef enum { diff -r 25899ec348a4 -r b70f30dd4753 libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Wed Dec 26 00:34:12 2007 +0000 +++ b/libpurple/protocols/msn/soap.c Wed Dec 26 00:34:50 2007 +0000 @@ -835,7 +835,6 @@ "POST %s HTTP/1.1\r\n" "SOAPAction: %s\r\n" "Content-Type:text/xml; charset=utf-8\r\n" - "Cookie: MSPAuth=%s\r\n" "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n" "Accept: */*\r\n" "Host: %s\r\n" @@ -845,7 +844,6 @@ "%s", request->login_path, request->soap_action, - soapconn->session->passport_info.mspauth, request->login_host, strlen(request->body), request->body diff -r 25899ec348a4 -r b70f30dd4753 libpurple/protocols/msn/soap2.c --- a/libpurple/protocols/msn/soap2.c Wed Dec 26 00:34:12 2007 +0000 +++ b/libpurple/protocols/msn/soap2.c Wed Dec 26 00:34:50 2007 +0000 @@ -461,22 +461,15 @@ int len = -1; char *body = xmlnode_to_str(req->message->xml, &len); GSList *iter; - char *authstr = NULL; g_queue_pop_head(conn->queue); conn->buf = g_string_new(""); - if (conn->session->passport_info.mspauth) - authstr = g_strdup_printf("Cookie: MSPAuth=%s\r\n", - conn->session->passport_info.mspauth); - - g_string_append_printf(conn->buf, "POST %s HTTP/1.1\r\n" "SOAPAction: %s\r\n" "Content-Type:text/xml; charset=utf-8\r\n" - "%s" "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n" "Accept: */*\r\n" "Host: %s\r\n" @@ -484,7 +477,7 @@ "Connection: Keep-Alive\r\n" "Cache-Control: no-cache\r\n", req->path, req->message->action ? req->message->action : "", - authstr ? authstr : "", conn->host, len); + conn->host, len); for (iter = req->message->headers; iter; iter = iter->next) { g_string_append(conn->buf, (char *)iter->data); @@ -503,7 +496,6 @@ PURPLE_INPUT_WRITE, msn_soap_write_cb, conn); msn_soap_write_cb(conn, conn->ssl->fd, PURPLE_INPUT_WRITE); - g_free(authstr); g_free(body); } }