Mercurial > pidgin
changeset 19796:3a15b4e5c336
[gaim-migrate @ 16716]
add/delete contact function OK
committed by MaYuan<mayuan2006@gmail.com>
committer: Ethan Blanton <elb@pidgin.im>
author | Ma Yuan <mayuan2006@gmail.com> |
---|---|
date | Sat, 12 Aug 2006 10:30:30 +0000 |
parents | 38e4a4b404e5 |
children | 1ffbe358c877 |
files | src/protocols/msn/contact.c src/protocols/msn/contact.h src/protocols/msn/msn.c src/protocols/msn/notification.c src/protocols/msn/notification.h src/protocols/msn/oim.c src/protocols/msn/soap.c src/protocols/msn/soap.h src/protocols/msn/state.c src/protocols/msn/userlist.c |
diffstat | 10 files changed, 270 insertions(+), 104 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/msn/contact.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/contact.c Sat Aug 12 10:30:30 2006 +0000 @@ -195,7 +195,7 @@ } static void -msn_contact_written_cb(gpointer data, gint source, GaimInputCondition cond) +msn_get_contact_written_cb(gpointer data, gint source, GaimInputCondition cond) { MsnSoapConn * soapconn = data; @@ -210,7 +210,7 @@ gaim_debug_info("MaYuan","msn_get_contact_list()...\n"); contact->soapconn->login_path = g_strdup(MSN_GET_CONTACT_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_GET_CONTACT_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GET_CONTACT_TEMPLATE,msn_contact_written_cb); + msn_soap_post(contact->soapconn,MSN_GET_CONTACT_TEMPLATE,msn_get_contact_written_cb); } static void @@ -372,7 +372,7 @@ xmlnode_free(node); msn_soap_free_read_buf(contact->soapconn); - dump_adl_cmd(session); + msn_notification_dump_contact(session); msn_set_psm(session); msn_session_finish_login(session); } @@ -415,44 +415,99 @@ msn_soap_post(contact->soapconn,MSN_GET_ADDRESS_TEMPLATE,msn_address_written_cb); } +static void +msn_add_contact_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","block read done\n"); +} + +static void +msn_add_contact_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","finish unblock written\n"); + soapconn->read_cb = msn_add_contact_read_cb; + msn_soap_read_cb(data,source,cond); +} + /*add a Contact */ void -msn_add_contact(MsnContact *contact,const char *passport) +msn_add_contact(MsnContact *contact,const char *passport,char *groupId) { char *body = NULL; char *contact_xml = NULL; gaim_debug_info("MaYuan","msn add a contact...\n"); contact_xml = g_strdup_printf(MSN_CONTACT_XML,passport); - body = g_strdup_printf(MSN_ADD_CONTACT_TEMPLATE,contact_xml); - g_free(contact_xml); - - /*build SOAP and POST it*/ - contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); - contact->soapconn->soap_action = g_strdup(MSN_CONTACT_ADD_SOAP_ACTION); - msn_soap_post(contact->soapconn,body,msn_address_written_cb); + if(groupId == NULL){ + body = g_strdup_printf(MSN_ADD_CONTACT_TEMPLATE,contact_xml); + g_free(contact_xml); + /*build SOAP and POST it*/ + contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); + contact->soapconn->soap_action = g_strdup(MSN_CONTACT_ADD_SOAP_ACTION); + }else{ + body = g_strdup_printf(MSN_ADD_CONTACT_GROUP_TEMPLATE,groupId,contact_xml); + g_free(contact_xml); + /*build SOAP and POST it*/ + contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); + contact->soapconn->soap_action = g_strdup(MSN_ADD_CONTACT_GROUP_SOAP_ACTION); + } + msn_soap_post(contact->soapconn,body,msn_add_contact_written_cb); g_free(body); } +static void +msn_delete_contact_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","delete contact read done\n"); +} + +static void +msn_delete_contact_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","delete contact written\n"); + soapconn->read_cb = msn_delete_contact_read_cb; + msn_soap_read_cb(data,source,cond); +} + /*delete a Contact*/ void -msn_delete_contact(MsnContact *contact,const char *passport_id) +msn_delete_contact(MsnContact *contact,const char *contactId) { char *body = NULL; char *contact_xml = NULL ; - gaim_debug_info("MaYuan","msn delete a contact...\n"); - contact_xml = g_strdup_printf(MSN_CONTACTS_DEL_XML,passport_id); + gaim_debug_info("MaYuan","msn delete a contact,contactId:{%s}...\n",contactId); + contact_xml = g_strdup_printf(MSN_CONTACTS_DEL_XML,contactId); body = g_strdup_printf(MSN_DEL_CONTACT_TEMPLATE,contact_xml); g_free(contact_xml); /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_CONTACT_DEL_SOAP_ACTION); - msn_soap_post(contact->soapconn,body,msn_address_written_cb); + msn_soap_post(contact->soapconn,body,msn_delete_contact_written_cb); g_free(body); } +static void +msn_block_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","block read done\n"); +} + +static void +msn_block_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","finish unblock written\n"); + soapconn->read_cb = msn_block_read_cb; + msn_soap_read_cb(data,source,cond); +} + /*block a Contact*/ void msn_block_contact(MsnContact *contact,const char* membership_id) @@ -464,10 +519,26 @@ /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_SHARE_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_CONTACT_BLOCK_SOAP_ACTION); - msn_soap_post(contact->soapconn,body,msn_address_written_cb); + msn_soap_post(contact->soapconn,body,msn_block_written_cb); g_free(body); } +static void +msn_unblock_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","unblock read done\n"); +} + +static void +msn_unblock_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","finish unblock written\n"); + soapconn->read_cb = msn_unblock_read_cb; + msn_soap_read_cb(data,source,cond); +} + /*unblock a contact*/ void msn_unblock_contact(MsnContact *contact,const char* passport) @@ -480,10 +551,26 @@ /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_SHARE_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_CONTACT_UNBLOCK_SOAP_ACTION); - msn_soap_post(contact->soapconn,body,msn_address_written_cb); + msn_soap_post(contact->soapconn,body,msn_unblock_written_cb); g_free(body); } +static void +msn_gleams_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","Gleams read done\n"); +} + +static void +msn_gleams_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","finish Group written\n"); + soapconn->read_cb = msn_gleams_read_cb; + msn_soap_read_cb(data,source,cond); +} + /*get the gleams info*/ void msn_get_gleams(MsnContact *contact) @@ -492,7 +579,7 @@ /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_GET_GLEAMS_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_address_written_cb); + msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_gleams_written_cb); } /***************************************************************
--- a/src/protocols/msn/contact.h Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/contact.h Sat Aug 12 10:30:30 2006 +0000 @@ -25,7 +25,7 @@ #ifndef _MSN_CONTACT_H_ #define _MSN_CONTACT_H_ -#define MSN_CONTACT_SERVER "contacts.msn.com" +#define MSN_CONTACT_SERVER "omega.contacts.msn.com" /*get contact list soap request template*/ #define MSN_GET_CONTACT_POST_URL "/abservice/SharingService.asmx" @@ -116,6 +116,10 @@ #define MSN_ADD_CONTACT_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>ContactSave</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><ABContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\"><abId>00000000-0000-0000-0000-000000000000</abId><contacts>%s</contacts><options><EnableAllowListManagement>true</EnableAllowListManagement></options></ABContactAdd></soap:Body></soap:Envelope>" +/*Contact Group Add*/ +#define MSN_ADD_CONTACT_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactAdd" +#define MSN_ADD_CONTACT_GROUP_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>ContactSave</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><ABGroupContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\"><abId>00000000-0000-0000-0000-000000000000</abId><groupFilter><groupIds><guid>%s</guid></groupIds></groupFilter><contacts>%s</contacts><groupContactAddOptions><fGenerateMissingQuickName>true</fGenerateMissingQuickName><EnableAllowListManagement>true</EnableAllowListManagement></groupContactAddOptions></ABGroupContactAdd></soap:Body></soap:Envelope>" + /*delete contact from contact list soap request template*/ #define MSN_CONTACT_DEL_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactDelete" #define MSN_CONTACTS_DEL_XML "<Contact><contactId>%s</contactId></Contact>" @@ -168,6 +172,11 @@ void msn_get_contact_list(MsnContact * contact); void msn_get_address_book(MsnContact *contact); +/*contact SOAP Operation*/ +void msn_add_contact(MsnContact *contact,const char *passport,char *groupId); +void msn_delete_contact(MsnContact *contact,const char *contactId); + + /*group operation*/ void msn_add_group(MsnSession *session,const char* group_name); void msn_del_group(MsnSession *session,const char *guid);
--- a/src/protocols/msn/msn.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/msn.c Sat Aug 12 10:30:30 2006 +0000 @@ -972,6 +972,7 @@ userlist = session->userlist; who = msn_normalize(gc->account, buddy->name); + gaim_debug_info("MaYuan","add user:{%s} to group:{%s}\n",who,group->name); if (!session->logged_in) { #if 0
--- a/src/protocols/msn/notification.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/notification.c Sat Aug 12 10:30:30 2006 +0000 @@ -34,6 +34,11 @@ static MsnTable *cbs_table; +/**************************************************************************** + * Local Function Prototype + ****************************************************************************/ +void msn_add_contact_xml(xmlnode *mlNode,char *passport,int list_op,int type); + /************************************************************************** * Main **************************************************************************/ @@ -434,19 +439,70 @@ /************************************************************************** * Buddy Lists **************************************************************************/ +/* add contact to xmlnode */ +void +msn_add_contact_xml(xmlnode *mlNode,char *passport,int list_op,int type) +{ + xmlnode *d_node,*c_node; + char **tokens; + char *email,*domain; + char *list_op_str,*type_str; + + gaim_debug_info("MaYuan","passport:%s\n",passport); + tokens = g_strsplit(passport, "@", 2); + email = tokens[0]; + domain = tokens[1]; + + /*find a domain Node*/ + for(d_node = xmlnode_get_child(mlNode,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)){ + const char * attr = NULL; + gaim_debug_info("MaYuan","d_node:%s\n",d_node->name); + attr = xmlnode_get_attrib(d_node,"n"); + if(attr == NULL){ + continue; + } + if(!strcmp(attr,domain)){ + break; + } + } + if(d_node == NULL){ + /*domain not found, create a new domain Node*/ + gaim_debug_info("MaYuan","get No d_node\n"); + d_node = xmlnode_new("d"); + xmlnode_set_attrib(d_node,"n",domain); + xmlnode_insert_child(mlNode,d_node); + } + + /*create contact node*/ + c_node = xmlnode_new("c"); + xmlnode_set_attrib(c_node,"n",email); + + list_op_str = g_strdup_printf("%d",list_op); + gaim_debug_info("MaYuan","list_op:%d\n",list_op_str); + xmlnode_set_attrib(c_node,"l",list_op_str); + g_free(list_op_str); +#if 0 + type_str = g_strdup_printf("%d",type); + xmlnode_set_attrib(c_node,"t",type_str); +#else + type_str = g_strdup_printf("1"); + xmlnode_set_attrib(c_node,"t",type_str); + g_free(type_str); +#endif + xmlnode_insert_child(d_node, c_node); +} + +/*dump contact info to NS*/ void -dump_adl_cmd(MsnSession *session) +msn_notification_dump_contact(MsnSession *session) { MsnCmdProc *cmdproc; MsnTransaction *trans; MsnUserList *userlist; MsnUser *user; GList *l; - xmlnode *adl_node,*d_node,*c_node; - char **tokens; - char *email,*domain; + xmlnode *adl_node; char *payload; - char *list_op,*type; int payload_len; cmdproc = session->notification->cmdproc; @@ -458,58 +514,15 @@ /*get the userlist*/ for (l = userlist->users; l != NULL; l = l->next){ user = l->data; - - gaim_debug_info("MaYuan","passport:%s\n",user->passport); - tokens = g_strsplit(user->passport, "@", 2); - email = tokens[0]; - domain = tokens[1]; - - /*find a domain node*/ - for(d_node = xmlnode_get_child(adl_node,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)){ - const char * attr = NULL; - gaim_debug_info("MaYuan","d_node:%s\n",d_node->name); - attr = xmlnode_get_attrib(d_node,"n"); - if(attr == NULL){ - continue; - } - if(!strcmp(attr,domain)){ - break; - } - } - if(d_node == NULL){ - gaim_debug_info("MaYuan","get No d_node\n"); - d_node = xmlnode_new("d"); - xmlnode_set_attrib(d_node,"n",domain); - xmlnode_insert_child(adl_node,d_node); - } - - /*create contact node*/ - c_node = xmlnode_new("c"); - xmlnode_set_attrib(c_node,"n",email); - - list_op = g_strdup_printf("%d",user->list_op); - gaim_debug_info("MaYuan","list_op:%d\n",user->list_op); - xmlnode_set_attrib(c_node,"l",list_op); -#if 0 - type = g_strdup_printf("%d",user->type); - xmlnode_set_attrib(c_node,"t",type); -#else - type = g_strdup_printf("1"); - xmlnode_set_attrib(c_node,"t",type); -#endif - xmlnode_insert_child(d_node, c_node); - - g_free(list_op); - g_free(type); + msn_add_contact_xml(adl_node,user->passport,user->list_op,user->type); } payload = xmlnode_to_str(adl_node,&payload_len); + xmlnode_free(adl_node); gaim_debug_info("MaYuan","ADL{%s}\n",payload); trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); - msn_transaction_set_payload(trans, payload, strlen(payload)); - msn_cmdproc_send_trans(cmdproc, trans); } @@ -1530,16 +1543,29 @@ const char *group_id) { MsnCmdProc *cmdproc; + MsnTransaction *trans; + xmlnode *adl_node; + char *payload; + int payload_len; + cmdproc = notification->servconn->cmdproc; - if (group_id != NULL && !strcmp(list, "FL")) + if (strcmp(list, "FL") != 0){ + } + + adl_node = xmlnode_new("ml"); + adl_node->child = NULL; + xmlnode_set_attrib(adl_node, "l", "1"); - if (group_id >= 0){ - msn_cmdproc_send(cmdproc, "ADD", "%s %s %s %d", - list, who, store_name, group_id); - }else{ - msn_cmdproc_send(cmdproc, "ADD", "%s %s %s", list, who, store_name); - } + msn_add_contact_xml(adl_node,who,3,1); + + payload = xmlnode_to_str(adl_node,&payload_len); + xmlnode_free(adl_node); + + gaim_debug_info("MaYuan","ADL{%s}\n",payload); + trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); + msn_transaction_set_payload(trans, payload, strlen(payload)); + msn_cmdproc_send_trans(cmdproc, trans); } void @@ -1547,19 +1573,31 @@ const char *who, const char *group_id) { MsnCmdProc *cmdproc; + MsnTransaction *trans; + xmlnode *rml_node; + char *payload; + int payload_len; + cmdproc = notification->servconn->cmdproc; - if (group_id != NULL){ - msn_cmdproc_send(cmdproc, "REM", "%s %s %d", list, who, group_id); - }else{ - msn_cmdproc_send(cmdproc, "REM", "%s %s", list, who); - } + rml_node = xmlnode_new("ml"); + rml_node->child = NULL; + xmlnode_set_attrib(rml_node, "l", "1"); + + msn_add_contact_xml(rml_node,who,3,1); + + payload = xmlnode_to_str(rml_node,&payload_len); + xmlnode_free(rml_node); + + gaim_debug_info("MaYuan","RML{%s}\n",payload); + trans = msn_transaction_new(cmdproc, "RML","%d",strlen(payload)); + msn_transaction_set_payload(trans, payload, strlen(payload)); + msn_cmdproc_send_trans(cmdproc, trans); } /************************************************************************** * Init **************************************************************************/ - void msn_notification_init(void) {
--- a/src/protocols/msn/notification.h Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/notification.h Sat Aug 12 10:30:30 2006 +0000 @@ -63,7 +63,7 @@ gboolean msn_notification_connect(MsnNotification *notification, const char *host, int port); void msn_notification_disconnect(MsnNotification *notification); -void dump_adl_cmd(MsnSession *session); +void msn_notification_dump_contact(MsnSession *session); /** * Closes a notification.
--- a/src/protocols/msn/oim.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/oim.c Sat Aug 12 10:30:30 2006 +0000 @@ -106,7 +106,8 @@ } /*pose single message to oim server*/ -void msn_oim_send_single_msg(MsnOim *oim,char * msg) +void +msn_oim_send_single_msg(MsnOim *oim,char * msg) { const char *oimsoapbody,*t,*p; @@ -139,6 +140,10 @@ } /**************************************** + * OIM delete SOAP request + * **************************************/ + +/**************************************** * OIM get SOAP request * **************************************/ /*oim SOAP server login error*/ @@ -179,9 +184,13 @@ GaimInputCondition cond) { MsnSoapConn * soapconn = data; - MsnOim * msnoim; + MsnOim * oim = soapconn->session->oim; gaim_debug_info("MaYuan","OIM get read buffer:{%s}\n",soapconn->body); + + /*get next single Offline Message*/ + oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); +// msn_oim_get_msg(oim); } static void @@ -220,7 +229,6 @@ if ((conv = msn_oim_get_conv(oim,passport)) != NULL){ gaim_conversation_write(conv, NULL, msg, GAIM_MESSAGE_SYSTEM, time(NULL)); } - } /*parse the oim XML data*/ @@ -269,19 +277,15 @@ msgid ); msn_soap_post(oim->retrieveconn, oimsoapbody, msn_oim_get_written_cb); - } /*MSN OIM get SOAP request*/ void msn_oim_get_msg(MsnOim *oim) { - GList *list; - gaim_debug_info("MaYuan","Get OIM with SOAP \n"); // gaim_debug_info("MaYuan","oim->oim_list:%p,data:%s \n",oim->oim_list,oim->oim_list->data); - for(list = oim->oim_list; list!= NULL;list = g_list_next(list)){ - msn_oim_post_single_get_msg(oim,list->data); - oim->oim_list = g_list_remove(oim->oim_list, list->data); + if(oim->oim_list !=NULL){ + msn_oim_post_single_get_msg(oim,oim->oim_list->data); } }
--- a/src/protocols/msn/soap.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/soap.c Sat Aug 12 10:30:30 2006 +0000 @@ -146,12 +146,12 @@ { gssize len; gssize total_len = 0; - char temp_buf[10240]; + char temp_buf[MSN_SOAP_READ_BUFF_SIZE]; if(soapconn->ssl_conn){ - len = gaim_ssl_read(soapconn->gsc, temp_buf,sizeof(temp_buf)); + len = gaim_ssl_read(soapconn->gsc, temp_buf,MSN_SOAP_READ_BUFF_SIZE); }else{ - len = read(soapconn->fd, temp_buf,sizeof(temp_buf)); + len = read(soapconn->fd, temp_buf,MSN_SOAP_READ_BUFF_SIZE); } if(len >0){ total_len += len; @@ -162,6 +162,7 @@ soapconn->read_len += len; soapconn->read_buf[soapconn->read_len] = '\0'; } + gaim_debug_info("MaYuan","++soap ssl read:{%d}\n",total_len); // gaim_debug_info("MaYuan","nexus ssl read:{%s}\n",soapconn->read_buf); return total_len; } @@ -209,6 +210,7 @@ /* Redirect. */ char *location, *c; + gaim_debug_error("MaYuan", "soap redirect\n"); location = strstr(soapconn->read_buf, "Location: "); if (location == NULL) { @@ -244,6 +246,7 @@ { const char *error; + gaim_debug_error("MaYuan", "soap 401\n"); if ((error = strstr(soapconn->read_buf, "WWW-Authenticate")) != NULL) { if ((error = strstr(error, "cbtxt=")) != NULL) @@ -284,12 +287,11 @@ /*setup the conn body */ soapconn->body = body_start; soapconn->body_len = atoi(body_len); - // gaim_debug_misc("MaYuan","content length :%d",soapconn->body_len); + gaim_debug_misc("MaYuan","SOAP Read length :%d,body len:%d\n",soapconn->read_len,soapconn->body_len); - if(soapconn->read_len < body_start - soapconn->read_buf + atoi(body_len)){ + if(soapconn->read_len < body_start - soapconn->read_buf + soapconn->body_len){ return; } - g_free(body_len); #if 1 @@ -313,6 +315,7 @@ // soapconn->gsc = NULL; #endif } + return; } void @@ -342,6 +345,13 @@ MsnSoapConn *soapconn = data; int len, total_len; + g_return_if_fail(soapconn != NULL); + if(soapconn->write_buf == NULL){ + gaim_debug_error("MaYuan","soap buffer is NULL\n"); + gaim_input_remove(soapconn->output_handler); + soapconn->output_handler = -1; + return; + } total_len = strlen(soapconn->write_buf); /*
--- a/src/protocols/msn/soap.h Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/soap.h Sat Aug 12 10:30:30 2006 +0000 @@ -26,6 +26,8 @@ #ifndef _MSN_SOAP_H_ #define _MSN_SOAP_H_ +#define MSN_SOAP_READ_BUFF_SIZE 8192 + /*MSN Https connection structure*/ typedef struct _MsnSoapConn MsnSoapConn;
--- a/src/protocols/msn/state.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/state.c Sat Aug 12 10:30:30 2006 +0000 @@ -38,6 +38,17 @@ N_("Available") }; +/* Local Function Prototype*/ +char * msn_build_psm(char * psmstr,char *mediastr,char * guidstr); + +/* + * WLM media PSM info build prcedure + * + * Result can like: + * <CurrentMedia>\0Music\01\0{0} - {1}\0 Song Title\0Song Artist\0Song Album\0\0</CurrentMedia>\ + * <CurrentMedia>\0Games\01\0Playing {0}\0Game Name\0</CurrentMedia>\ + * <CurrentMedia>\0Office\01\0Office Message\0Office App Name\0</CurrentMedia>" + */ char * msn_build_psm(char * psmstr,char *mediastr,char * guidstr) { @@ -53,10 +64,6 @@ } xmlnode_insert_child(dataNode,psmNode); -//"<CurrentMedia>\0Music\01\0{0} - {1}\0 Song Title\0Song Artist\0Song Album\0\0</CurrentMedia>\ -<CurrentMedia>\0Games\01\0Playing {0}\0Game Name\0</CurrentMedia>\ -<CurrentMedia>\0Office\01\0Office Message\0Office App Name\0</CurrentMedia>" - mediaNode = xmlnode_new("CurrentMedia"); if(mediastr != NULL){ xmlnode_insert_data(psmNode,mediastr,strlen(mediastr));
--- a/src/protocols/msn/userlist.c Thu Aug 10 15:43:55 2006 +0000 +++ b/src/protocols/msn/userlist.c Sat Aug 12 10:30:30 2006 +0000 @@ -591,6 +591,10 @@ const char *list; user = msn_userlist_find_user(userlist, who); + + /*delete the contact from address book via soap action*/ + msn_delete_contact(userlist->session->contact,user->uid); + group_id = NULL; if (group_name != NULL){ @@ -614,7 +618,7 @@ /* Then request the rem to the server. */ list = lists[list_id]; - msn_notification_rem_buddy(userlist->session->notification, list, who, group_id); +// msn_notification_rem_buddy(userlist->session->notification, list, who, group_id); } /*add buddy*/ @@ -628,6 +632,7 @@ const char *list; const char *store_name; + gaim_debug_info("MaYuan", "userlist add buddy,name:{%s},group:{%s}\n",who ,group_name); group_id = NULL; if (!gaim_email_is_valid(who)){ @@ -668,8 +673,11 @@ /* Then request the add to the server. */ list = lists[list_id]; - msn_notification_add_buddy(userlist->session->notification, list, who, + gaim_debug_info("MaYuan", "add user:{%s} to group id {%s}\n",store_name ,group_id); + msn_add_contact(userlist->session->contact,who,group_id); +/* msn_notification_add_buddy(userlist->session->notification, list, who, store_name, group_id); + */ } void