From: <may...@us...> - 2006-08-19 16:48:57
|
Revision: 16887 Author: mayuan2006 Date: 2006-08-19 09:48:46 -0700 (Sat, 19 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16887&view=rev Log Message: ----------- work correct with yahoo Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/soap.c Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-19 16:41:40 UTC (rev 16886) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-19 16:48:46 UTC (rev 16887) @@ -416,10 +416,11 @@ cmdproc = session->notification->cmdproc; g_return_if_fail(msg != NULL); payload = msn_message_gen_payload(msg, &payload_len); - gaim_debug_info("MaYuan","send UUM,payload{%s}\n",payload); + gaim_debug_info("MaYuan","send UUM,payload{%s},strlen:%d,len:%d\n", + payload,strlen(payload),payload_len); type = msg->type; - trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,strlen(payload)); - msn_transaction_set_payload(trans, payload, strlen(payload)); + trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,payload_len); + msn_transaction_set_payload(trans, payload, payload_len); msn_cmdproc_send_trans(cmdproc, trans); } Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-19 16:41:40 UTC (rev 16886) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-19 16:48:46 UTC (rev 16887) @@ -356,7 +356,7 @@ // msn_soap_close(soapconn); #endif /*Process the next queued SOAP request*/ - msn_soap_post_head_request(soapconn); +// msn_soap_post_head_request(soapconn); } return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-21 16:16:20
|
Revision: 16952 Author: mayuan2006 Date: 2006-08-21 09:16:10 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16952&view=rev Log Message: ----------- update for fail-safe check of Passport 3.0's Authentication Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/nexus.c branches/soc-2006-msnp13/src/protocols/msn/userlist.c Modified: branches/soc-2006-msnp13/src/protocols/msn/nexus.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/nexus.c 2006-08-21 15:17:22 UTC (rev 16951) +++ branches/soc-2006-msnp13/src/protocols/msn/nexus.c 2006-08-21 16:16:10 UTC (rev 16952) @@ -163,7 +163,7 @@ MsnSoapConn *soapconn; MsnNexus * nexus; MsnSession *session; - char *ru,*lc,*id,*tw,*ct,*kpp,*kv,*ver,*rn,*tpf; + char *ru,*lc,*id,*tw,*ct,*kpp,*kv,*ver,*rn,*tpf,*fs; char *username, *password; char *request_str, *head, *tail,*challenge_str; @@ -187,6 +187,7 @@ lc = (char *)g_hash_table_lookup(nexus->challenge_data, "lc"); id = (char *)g_hash_table_lookup(nexus->challenge_data, "id"); tw = (char *)g_hash_table_lookup(nexus->challenge_data, "tw"); + fs = (char *)g_hash_table_lookup(nexus->challenge_data, "fs"); ru = (char *)g_hash_table_lookup(nexus->challenge_data, "ru"); ct = (char *)g_hash_table_lookup(nexus->challenge_data, "ct"); kpp= (char *)g_hash_table_lookup(nexus->challenge_data, "kpp"); @@ -206,10 +207,14 @@ return; } + if(!fs){ + fs =g_strdup_printf("1"); + } challenge_str = g_strdup_printf( - "lc=%s&id=%s&tw=%s&fs=1&ru=%s&ct=%s&kpp=%s&kv=%s&ver=%s&rn=%s&tpf=%s\r\n", - lc,id,tw,ru,ct,kpp,kv,ver,rn,tpf + "lc=%s&id=%s&tw=%s&fs=%s&ru=%s&ct=%s&kpp=%s&kv=%s&ver=%s&rn=%s&tpf=%s\r\n", + lc,id,tw,fs,ru,ct,kpp,kv,ver,rn,tpf ); + g_free(fs); /*build the SOAP windows Live ID XML body */ tail = g_strdup_printf(TWN_ENVELOP_TEMPLATE,username,password,challenge_str ); Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-21 15:17:22 UTC (rev 16951) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-21 16:16:10 UTC (rev 16952) @@ -90,16 +90,13 @@ pa->friendly = g_strdup(friendly); pa->gc = gc; - if (friendly != NULL) - { + if (friendly != NULL){ msg = g_strdup_printf( _("The user %s (%s) wants to add %s to his or her " "buddy list."), passport, friendly, gaim_account_get_username(gc->account)); - } - else - { + }else{ msg = g_strdup_printf( _("The user %s wants to add %s to his or " "her buddy list."), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-21 18:58:46
|
Revision: 16956 Author: mayuan2006 Date: 2006-08-21 11:58:31 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16956&view=rev Log Message: ----------- middle stage of multiple soap request why always read 0 bytes? committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/soap.c Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-21 17:40:07 UTC (rev 16955) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-21 18:58:31 UTC (rev 16956) @@ -196,6 +196,7 @@ /*we need to process the read message!*/ /*get next single Offline Message*/ // oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); + msn_soap_post_head_request(soapconn); } static void Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-21 17:40:07 UTC (rev 16955) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-21 18:58:31 UTC (rev 16956) @@ -26,6 +26,9 @@ #include "msn.h" #include "soap.h" +/*local function prototype*/ +void msn_soap_set_process_step(MsnSoapConn *soapconn, MsnSoapStep step); + /*setup the soap process step*/ void msn_soap_set_process_step(MsnSoapConn *soapconn, MsnSoapStep step) @@ -187,7 +190,6 @@ msn_soap_read(MsnSoapConn *soapconn) { gssize len,requested_len; - gssize total_len = 0; char temp_buf[MSN_SOAP_READ_BUFF_SIZE]; // requested_len = (soapconn->need_to_read > 0) ? soapconn->need_to_read : MSN_SOAP_READ_BUFF_SIZE; @@ -198,7 +200,6 @@ len = read(soapconn->fd, temp_buf,requested_len); } if(len >0){ - total_len += len; soapconn->read_buf = g_realloc(soapconn->read_buf, soapconn->read_len + len + 1); // strncpy(soapconn->read_buf + soapconn->read_len, temp_buf, len); @@ -206,9 +207,9 @@ 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","++soap ssl read:{%d}\n",len); // gaim_debug_info("MaYuan","nexus ssl read:{%s}\n",soapconn->read_buf); - return total_len; + return len; } /*read the whole SOAP server response*/ @@ -534,7 +535,7 @@ char * soap_head = NULL; char * request_str = NULL; - gaim_debug_info("MaYuan","msn_soap_post()...\n"); + gaim_debug_info("MaYuan","msn_soap_post_request()...\n"); msn_soap_set_process_step(soapconn,MSN_SOAP_PROCESSING); soap_head = g_strdup_printf( "POST %s HTTP/1.1\r\n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-22 06:10:16
|
Revision: 16973 Author: mayuan2006 Date: 2006-08-21 23:10:01 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16973&view=rev Log Message: ----------- change the soap process to below: Post one Soap request After finish one soap request,close the connection, If there are more, reconect and process it. to avoid the below problem: in one socket, If post soap request one by one, The second will always read 0 bytes. comitted by Ma Yuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/msg.c branches/soc-2006-msnp13/src/protocols/msn/msg.h branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/soap.c branches/soc-2006-msnp13/src/protocols/msn/switchboard.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-22 06:10:01 UTC (rev 16973) @@ -179,8 +179,6 @@ } xmlnode_free(node); - - msn_get_address_book(contact); } static void @@ -197,6 +195,10 @@ // gaim_debug_misc("msn", "soap contact server Reply: {%s}\n", soapconn->read_buf); msn_parse_contact_list(contact); + /*free the read buffer*/ + msn_soap_free_read_buf(soapconn); + + msn_get_address_book(contact); } static void @@ -420,6 +422,8 @@ // gaim_debug_misc("msn", "soap contact server Reply: {%s}\n", soapconn->read_buf); msn_parse_addressbook(contact); + /*free the read buffer*/ + msn_soap_free_read_buf(soapconn); } /**/ Modified: branches/soc-2006-msnp13/src/protocols/msn/msg.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msg.c 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/msg.c 2006-08-22 06:10:01 UTC (rev 16973) @@ -206,7 +206,8 @@ void msn_message_parse_payload(MsnMessage *msg, - const char *payload, size_t payload_len) + const char *payload, size_t payload_len, + const char *line_dem,const char *body_dem) { char *tmp_base, *tmp; const char *content_type; @@ -219,7 +220,7 @@ memcpy(tmp_base, payload, payload_len); /* Parse the attributes. */ - end = strstr(tmp, "\r\n\r\n"); + end = strstr(tmp, body_dem); /* TODO? some clients use \r delimiters instead of \r\n, the official client * doesn't send such messages, but does handle receiving them. We'll just * avoid crashing for now */ @@ -229,7 +230,7 @@ } *end = '\0'; - elems = g_strsplit(tmp, "\r\n", 0); + elems = g_strsplit(tmp, line_dem, 0); for (cur = elems; *cur != NULL; cur++){ const char *key, *value; @@ -268,7 +269,7 @@ g_strfreev(elems); /* Proceed to the end of the "\r\n\r\n" */ - tmp = end + 4; + tmp = end + strlen(body_dem); /* Now we *should* be at the body. */ content_type = msn_message_get_content_type(msg); Modified: branches/soc-2006-msnp13/src/protocols/msn/msg.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msg.h 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/msg.h 2006-08-22 06:10:01 UTC (rev 16973) @@ -34,6 +34,12 @@ typedef void (*MsnMsgCb)(MsnMessage *, void *data); +#define MSG_BODY_DEM "\r\n\r\n" +#define MSG_LINE_DEM "\r\n" + +#define MSG_OIM_BODY_DEM "\n\n" +#define MSG_OIM_LINE_DEM "\n" + /* typedef enum { @@ -180,7 +186,8 @@ * @param payload_len The length of the payload. */ void msn_message_parse_payload(MsnMessage *msg, const char *payload, - size_t payload_len); + size_t payload_len, + const char *line_dem,const char *body_dem); /** * Destroys a message. Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-22 06:10:01 UTC (rev 16973) @@ -373,7 +373,7 @@ msg = msn_message_new_from_cmd(cmdproc->session, cmd); - msn_message_parse_payload(msg, payload, len); + msn_message_parse_payload(msg, payload, len,MSG_LINE_DEM,MSG_BODY_DEM); #ifdef MSN_DEBUG_NS msn_message_show_readable(msg, "Notification", TRUE); #endif @@ -436,7 +436,7 @@ gaim_debug_info("MaYuan","Process UBM payload:%s\n",payload); msg = msn_message_new_from_cmd(cmdproc->session, cmd); - msn_message_parse_payload(msg, payload, len); + msn_message_parse_payload(msg, payload, len,MSG_LINE_DEM,MSG_BODY_DEM); #ifdef MSN_DEBUG_NS msn_message_show_readable(msg, "Notification", TRUE); #endif Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-22 06:10:01 UTC (rev 16973) @@ -184,6 +184,37 @@ gaim_debug_info("MaYuan","oim get SOAP Server connected!\n"); } +void +msn_oim_report_to_user(MsnOim *oim,char *msg_str) +{ + MsnMessage *message; + char * end,*endline; + + message = msn_message_new(MSN_MSG_UNKNOWN); + + msn_message_parse_payload(message,msg_str,strlen(msg_str), + MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); + gaim_debug_info("MaYuan","oim body:{%s}\n",message->body); +} + +void +msn_oim_process(MsnOim *oim,char *oim_msg) +{ + xmlnode *oimNode,*bodyNode,*responseNode,*msgNode; + char *msg_data,*msg_str; + + oimNode = xmlnode_from_str(oim_msg, strlen(oim_msg)); + bodyNode = xmlnode_get_child(oimNode,"Body"); +// gaim_debug_misc("xml","body{%p},name:%s\n",bodyNode,bodyNode->name); + responseNode = xmlnode_get_child(bodyNode,"GetMessageResponse"); + msgNode = xmlnode_get_child(responseNode,"GetMessageResult"); + msg_data = xmlnode_get_data(msgNode); + msg_str = g_strdup(msg_data); + gaim_debug_info("OIM","msg:{%s}\n",msg_str); + msn_oim_report_to_user(oim,msg_str); + g_free(msg_str); +} + static void msn_oim_get_read_cb(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond) @@ -194,9 +225,11 @@ gaim_debug_info("MaYuan","OIM get read buffer:{%s}\n",soapconn->body); /*we need to process the read message!*/ + msn_oim_process(oim,soapconn->body); + msn_soap_free_read_buf(soapconn); /*get next single Offline Message*/ // oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); - msn_soap_post_head_request(soapconn); + msn_soap_post(soapconn,NULL,msn_oim_retrieve_connect_init); } static void Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-22 06:10:01 UTC (rev 16973) @@ -345,19 +345,22 @@ /*remove the read handler*/ gaim_input_remove(soapconn->input_handler); soapconn->input_handler = -1; + /* + * close the soap connection,if more soap request came, + * Just reconnect to do it, + * + * To solve the problem described below: + * When I post the soap request in one socket one after the other, + * The first read is ok, But the second soap read always got 0 bytes, + * Weird! + * */ + msn_soap_close(soapconn); #endif /*call the read callback*/ if(soapconn->read_cb != NULL){ soapconn->read_cb(soapconn,source,0); } - /*clear the read buffer*/ - msn_soap_free_read_buf(soapconn); -#if 1 -// msn_soap_close(soapconn); -#endif - /*Process the next queued SOAP request*/ -// msn_soap_post_head_request(soapconn); } return; } @@ -510,9 +513,12 @@ msn_soap_post(MsnSoapConn *soapconn,MsnSoapReq *request, MsnSoapConnectInitFunction msn_soap_init_func) { - g_queue_push_tail(soapconn->soap_queue, request); - if(!msn_soap_connected(soapconn)&&(soapconn->step == MSN_SOAP_UNCONNECTED)){ - /*not connected?connect it first*/ + if(request != NULL){ + g_queue_push_tail(soapconn->soap_queue, request); + } + if(!msn_soap_connected(soapconn)&&(soapconn->step == MSN_SOAP_UNCONNECTED) + &&(!g_queue_is_empty(soapconn->soap_queue))){ + /*not connected?and we have something to process connect it first*/ gaim_debug_info("Ma Yuan","soap is not connected!\n"); msn_soap_init_func(soapconn); msn_soap_connect(soapconn); Modified: branches/soc-2006-msnp13/src/protocols/msn/switchboard.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/switchboard.c 2006-08-22 05:52:03 UTC (rev 16972) +++ branches/soc-2006-msnp13/src/protocols/msn/switchboard.c 2006-08-22 06:10:01 UTC (rev 16973) @@ -721,7 +721,8 @@ msg = msn_message_new_from_cmd(cmdproc->session, cmd); - msn_message_parse_payload(msg, payload, len); + msn_message_parse_payload(msg, payload, len, + MSG_LINE_DEM,MSG_BODY_DEM); #ifdef MSN_DEBUG_SB msn_message_show_readable(msg, "SB RECV", FALSE); #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-22 16:13:56
|
Revision: 16979 Author: mayuan2006 Date: 2006-08-22 09:13:43 -0700 (Tue, 22 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16979&view=rev Log Message: ----------- oim message post to user committed by Ma Yuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/soap.c Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-22 15:46:59 UTC (rev 16978) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-22 16:13:43 UTC (rev 16979) @@ -419,8 +419,8 @@ gaim_debug_info("MaYuan","send UUM,payload{%s},strlen:%d,len:%d\n", payload,strlen(payload),payload_len); type = msg->type; - trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,payload_len); - msn_transaction_set_payload(trans, payload, payload_len); + trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,strlen(payload)); + msn_transaction_set_payload(trans, payload, strlen(payload)); msn_cmdproc_send_trans(cmdproc, trans); } Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-22 15:46:59 UTC (rev 16978) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-22 16:13:43 UTC (rev 16979) @@ -163,7 +163,7 @@ session = soapconn->session; g_return_if_fail(session != NULL); - msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to OIM server")); +// msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to OIM server")); } /*msn oim SOAP server connect process*/ @@ -188,13 +188,44 @@ msn_oim_report_to_user(MsnOim *oim,char *msg_str) { MsnMessage *message; - char * end,*endline; + char *date,*from,*decode_msg; + gsize body_len; + char **tokens; + char *start,*end; + int has_nick = 0; + char *passport_str,*passport; message = msn_message_new(MSN_MSG_UNKNOWN); msn_message_parse_payload(message,msg_str,strlen(msg_str), MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); gaim_debug_info("MaYuan","oim body:{%s}\n",message->body); + decode_msg = gaim_base64_decode(message->body,&body_len); + date = (char *)g_hash_table_lookup(message->attr_table, "Date"); + from = (char *)g_hash_table_lookup(message->attr_table, "From"); + if(strstr(from," ")){ + has_nick = 1; + } + if(has_nick){ + tokens = g_strsplit(from , " " , 2); + passport_str = g_strdup(tokens[1]); + gaim_debug_info("MaYuan","oim Date:{%s},nickname:{%s},tokens[1]:{%s} passport{%s}\n", + date,tokens[0],tokens[1],passport_str); + g_strfreev(tokens); + }else{ + passport_str = g_strdup(from); + gaim_debug_info("MaYuan","oim Date:{%s},passport{%s}\n", + date,passport_str); + } + start = strstr(passport_str,"<"); + start += 1; + end = strstr(passport_str,">"); + passport = g_strndup(start,end - start); + g_free(passport_str); + gaim_debug_info("MaYuan","oim Date:{%s},passport{%s}\n",date,passport); + + msn_session_report_user(oim->session,passport,decode_msg,GAIM_MESSAGE_SYSTEM); + g_free(passport); } void Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-22 15:46:59 UTC (rev 16978) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-22 16:13:43 UTC (rev 16979) @@ -89,13 +89,15 @@ msn_soap_error_cb(GaimSslConnection *gsc, GaimSslErrorType error, void *data) { MsnSoapConn * soapconn = data; + g_return_if_fail(data != NULL); gaim_debug_info("MaYuan","Soap connection error!\n"); + msn_soap_set_process_step(soapconn, MSN_SOAP_UNCONNECTED); + /*error callback*/ if(soapconn->error_cb != NULL){ soapconn->error_cb(gsc,error,data); } - msn_soap_set_process_step(soapconn, MSN_SOAP_UNCONNECTED); } /*init the soap connection*/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-23 15:07:34
|
Revision: 17003 Author: mayuan2006 Date: 2006-08-23 08:07:17 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17003&view=rev Log Message: ----------- add the PSM processing need to store the PSM info to XML. Thanks for Chris <ukd...@ya...> 's code! committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/servconn.c branches/soc-2006-msnp13/src/protocols/msn/state.c branches/soc-2006-msnp13/src/protocols/msn/state.h branches/soc-2006-msnp13/src/protocols/msn/user.c branches/soc-2006-msnp13/src/protocols/msn/user.h Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-23 15:07:17 UTC (rev 17003) @@ -517,20 +517,47 @@ *ne = emblems[3]; } +/* + * Set the User status text + * Add the PSM String Using "Name - PSM String" format + */ static char * msn_status_text(GaimBuddy *buddy) { GaimPresence *presence; GaimStatus *status; + char *msg, *psm_str, *tmp2, *text, *name; presence = gaim_buddy_get_presence(buddy); status = gaim_presence_get_active_status(presence); - if (!gaim_presence_is_available(presence) && !gaim_presence_is_idle(presence)) - { - return g_strdup(gaim_status_get_name(status)); + msg = gaim_status_get_attr_string(status, "message"); + if (!gaim_presence_is_available(presence) && !gaim_presence_is_idle(presence)){ + name = gaim_status_get_name(status); + }else{ + name = NULL; } + if (msg != NULL) { + tmp2 = gaim_markup_strip_html(msg); + if (name){ + psm_str = g_strdup_printf("%s - %s", name, tmp2); + g_free(tmp2); + }else{ + psm_str = tmp2; + } + text = g_markup_escape_text(psm_str, -1); + g_free(psm_str); + return text; + } else { + if (!gaim_presence_is_available(presence) && !gaim_presence_is_idle(presence)){ + psm_str = g_strdup(gaim_status_get_name(status)); + text = g_markup_escape_text(psm_str, -1); + g_free(psm_str); + return text; + } + } + return NULL; } @@ -574,29 +601,42 @@ { GaimStatusType *status; GList *types = NULL; - +#if 0 status = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, NULL, NULL, FALSE, TRUE, FALSE); +#endif + status = gaim_status_type_new_with_attrs( + GAIM_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, - NULL, NULL, FALSE, TRUE, FALSE); + status = gaim_status_type_new_with_attrs( + GAIM_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, - "brb", _("Be Right Back"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_with_attrs( + GAIM_STATUS_AWAY, "brb", _("Be Right Back"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, status); - status = gaim_status_type_new_full(GAIM_STATUS_UNAVAILABLE, - "busy", _("Busy"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_with_attrs( + GAIM_STATUS_AWAY, "busy", _("Busy"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, status); - - status = gaim_status_type_new_full(GAIM_STATUS_UNAVAILABLE, - "phone", _("On the Phone"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_with_attrs( + GAIM_STATUS_AWAY, "phone", _("On the Phone"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, status); - - status = gaim_status_type_new_full(GAIM_STATUS_AWAY, - "lunch", _("Out to Lunch"), FALSE, TRUE, FALSE); + status = gaim_status_type_new_with_attrs( + GAIM_STATUS_AWAY, "lunch", _("Out to Lunch"), TRUE, TRUE, FALSE, + "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), + NULL); types = g_list_append(types, status); status = gaim_status_type_new_full(GAIM_STATUS_INVISIBLE, Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-23 15:07:17 UTC (rev 17003) @@ -1393,12 +1393,40 @@ /*get the payload content*/ } +/* + * Get the UBX's PSM info + * Post it to the User status + * Thanks for Chris <ukd...@ya...>'s code + */ static void ubx_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len) { + MsnSession *session; + GaimAccount *account; + GaimConnection *gc; + MsnUser *user; + MsnObject *msnobj; + int clientid; + int wlmclient; + const char *passport, *psm_str; + /*get the payload content*/ - gaim_debug_info("MaYuan","ubx{%s}\n",cmd->payload); + gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); + + session = cmdproc->session; + account = session->account; + gc = gaim_account_get_connection(account); + + passport = cmd->params[0]; + user = msn_userlist_find_user(session->userlist, passport); + + psm_str = msn_get_psm(cmd->payload,len); + gaim_debug_info("Ma Yuan","got psm {%s}\n", psm_str); + msn_user_set_statusline(user, psm_str); + msn_user_update(user); + + g_free(psm_str); } static void Modified: branches/soc-2006-msnp13/src/protocols/msn/servconn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/servconn.c 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/servconn.c 2006-08-23 15:07:17 UTC (rev 17003) @@ -235,13 +235,12 @@ r = gaim_proxy_connect(session->account, host, port, connect_cb, servconn); - if (r == 0) - { + if (r == 0){ servconn->processing = TRUE; return TRUE; - } - else + }else{ return FALSE; + } } void Modified: branches/soc-2006-msnp13/src/protocols/msn/state.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/state.c 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/state.c 2006-08-23 15:07:17 UTC (rev 17003) @@ -80,6 +80,34 @@ return result; } +/*get the PSM info from the XML string*/ +const char * +msn_get_psm(char *xml_str,gsize len) +{ + xmlnode *payloadNode, *psmNode; + char *psm_str,*psm; + + payloadNode = xmlnode_from_str(xml_str, len); + if (!payloadNode){ + gaim_debug_error("MaYuan","PSM XML parse Error!\n"); + return NULL; + } + psmNode = xmlnode_get_child(payloadNode, "PSM"); + if (!psmNode){ + gaim_debug_info("Ma Yuan","No PSM status Node"); + g_free(payloadNode); + return NULL; + } + psm_str = xmlnode_get_data(psmNode); + gaim_debug_info("Ma Yuan","got PSM {%s}\n", psm_str); + psm = g_strdup(psm_str); + + g_free(psmNode); + g_free(payloadNode); + + return psm; +} + void msn_set_psm(MsnSession *session) { Modified: branches/soc-2006-msnp13/src/protocols/msn/state.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/state.h 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/state.h 2006-08-23 15:07:17 UTC (rev 17003) @@ -61,6 +61,9 @@ void msn_set_psm(MsnSession *session); +/*get the PSM info from the XML string*/ +const char * msn_get_psm(char *xml_str,gsize len); + MsnAwayType msn_state_from_account(GaimAccount *account); #endif /* _MSN_STATE_H_ */ Modified: branches/soc-2006-msnp13/src/protocols/msn/user.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-23 15:07:17 UTC (rev 17003) @@ -84,13 +84,19 @@ account = user->userlist->session->account; - if (user->status != NULL) + if (user->statusline != NULL) { + char *status = g_strdup_printf("%s - %s", user->status, user->statusline); + gaim_prpl_got_user_status(account, user->passport, user->status, "message", user->statusline, NULL); + } + else if (user->status != NULL) { gaim_prpl_got_user_status(account, user->passport, user->status, NULL); + } - if (user->idle) + if (user->idle){ gaim_prpl_got_user_idle(account, user->passport, TRUE, -1); - else + }else{ gaim_prpl_got_user_idle(account, user->passport, FALSE, 0); + } } void @@ -138,6 +144,15 @@ } void +msn_user_set_statusline(MsnUser *user, const char *statusline) +{ + g_return_if_fail(user != NULL); + + g_free(user->statusline); + user->statusline = g_strdup(statusline); +} + +void msn_user_set_store_name(MsnUser *user, const char *name) { g_return_if_fail(user != NULL); Modified: branches/soc-2006-msnp13/src/protocols/msn/user.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-08-23 14:49:40 UTC (rev 17002) +++ branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-08-23 15:07:17 UTC (rev 17003) @@ -48,6 +48,8 @@ char * uid; /*< User Id */ const char *status; /**< The state of the user. */ + const char *statusline; /**< The state of the user. */ + gboolean idle; /**< The idle state of the user. */ struct @@ -105,6 +107,14 @@ */ void msn_user_update(MsnUser *user); + /** + * Sets the new statusline of user. + * + * @param user The user. + * @param state The statusline string. + */ +void msn_user_set_statusline(MsnUser *user, const char *statusline); + /** * Sets the new state of user. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-23 16:26:15
|
Revision: 17004 Author: mayuan2006 Date: 2006-08-23 09:25:54 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17004&view=rev Log Message: ----------- fix the windows bug of psm committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/state.c Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-23 15:07:17 UTC (rev 17003) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-23 16:25:54 UTC (rev 17004) @@ -1406,9 +1406,6 @@ GaimAccount *account; GaimConnection *gc; MsnUser *user; - MsnObject *msnobj; - int clientid; - int wlmclient; const char *passport, *psm_str; /*get the payload content*/ @@ -1422,7 +1419,6 @@ user = msn_userlist_find_user(session->userlist, passport); psm_str = msn_get_psm(cmd->payload,len); - gaim_debug_info("Ma Yuan","got psm {%s}\n", psm_str); msn_user_set_statusline(user, psm_str); msn_user_update(user); Modified: branches/soc-2006-msnp13/src/protocols/msn/state.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/state.c 2006-08-23 15:07:17 UTC (rev 17003) +++ branches/soc-2006-msnp13/src/protocols/msn/state.c 2006-08-23 16:25:54 UTC (rev 17004) @@ -86,20 +86,20 @@ { xmlnode *payloadNode, *psmNode; char *psm_str,*psm; - + + gaim_debug_info("Ma Yuan","msn get PSM\n"); payloadNode = xmlnode_from_str(xml_str, len); if (!payloadNode){ gaim_debug_error("MaYuan","PSM XML parse Error!\n"); return NULL; } psmNode = xmlnode_get_child(payloadNode, "PSM"); - if (!psmNode){ + if (psmNode == NULL){ gaim_debug_info("Ma Yuan","No PSM status Node"); g_free(payloadNode); return NULL; } psm_str = xmlnode_get_data(psmNode); - gaim_debug_info("Ma Yuan","got PSM {%s}\n", psm_str); psm = g_strdup(psm_str); g_free(psmNode); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-23 17:01:45
|
Revision: 17006 Author: mayuan2006 Date: 2006-08-23 10:01:31 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17006&view=rev Log Message: ----------- fix msg send bug tested ok on windows committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/msg.c branches/soc-2006-msnp13/src/protocols/msn/notification.c Modified: branches/soc-2006-msnp13/src/protocols/msn/msg.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msg.c 2006-08-23 16:36:58 UTC (rev 17005) +++ branches/soc-2006-msnp13/src/protocols/msn/msg.c 2006-08-23 17:01:31 UTC (rev 17006) @@ -468,16 +468,14 @@ } else { - if (body != NULL) - { + if (body != NULL){ memcpy(n, body, body_len); n += body_len; -// n = '\0'; + *n = '\0'; } } - if (ret_size != NULL) - { + if (ret_size != NULL){ *ret_size = n - base; if (*ret_size > 1664) Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-23 16:36:58 UTC (rev 17005) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-23 17:01:31 UTC (rev 17006) @@ -419,7 +419,7 @@ gaim_debug_info("MaYuan","send UUM,payload{%s},strlen:%d,len:%d\n", payload,strlen(payload),payload_len); type = msg->type; - trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,strlen(payload)); + trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,payload_len); msn_transaction_set_payload(trans, payload, strlen(payload)); msn_cmdproc_send_trans(cmdproc, trans); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-24 16:38:44
|
Revision: 17015 Author: mayuan2006 Date: 2006-08-24 09:38:30 -0700 (Thu, 24 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17015&view=rev Log Message: ----------- delete oim integration ok committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/README branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/oim.h branches/soc-2006-msnp13/src/protocols/msn/soap.c branches/soc-2006-msnp13/src/protocols/msn/soap.h Modified: branches/soc-2006-msnp13/src/protocols/msn/README =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/README 2006-08-24 14:21:43 UTC (rev 17014) +++ branches/soc-2006-msnp13/src/protocols/msn/README 2006-08-24 16:38:30 UTC (rev 17015) @@ -2,29 +2,31 @@ by Ma Yuan<may...@gm...> 1. Introduction +------------- MSNP14 Protocol, proposed by Windows Live Messenger, is new, and there is no available implementation except the official one on Windows Platform. It has introduced many new features attractable to many users, such as: * Offline Instant Message -You can send the offline Message to the offline User, + You can send the offline Message to the offline User, The message will be posted to that user the next time when he is online. - * Communicate with Yahoo User +* Communicate with Yahoo User U can chat with the Yahoo User in MSN, That's Fantastic! Till now , you can send text/Nudge to Yahoo User. - * Windows Live ID authentition +* Windows Live ID authentition WLM use the Window Live ID Authentication process,Known as Passport 3.0, The procedure is totally different to the previous Passport 2.0 - * Video/Audio Conversation - U can communicate with other's via Video/Audio. +* Video/Audio Conversation + U can communicate with other's via Video/Audio. (Though very interesting, not implemented in this version) 2.New Features Added +----------------- -till Now, This project has implemented the following Feature: +Till now, This project has implemented the following Feature: * Windows Live ID authentication. * Offline Instant Message @@ -33,9 +35,11 @@ * Communicate with Yahoo User Can send/receive Message/Nudge to Yahoo User. -3. Changes to made to fit MSNP14 Protocol +*. Changes to made to fit MSNP14 Protocol -4. Reference +3. Reference +------------- + The very useful sites of MSN Protocol: MSNpiki site: reverse engineer of MSN Protocol.up to dated. Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-24 14:21:43 UTC (rev 17014) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-24 16:38:30 UTC (rev 17015) @@ -1612,7 +1612,13 @@ // msn_add_group(session,"hello"); } +/*offline Message Notification*/ static void +delete_oim_msg(MsnCmdProc *cmdproc, MsnMessage *msg) +{ +} + +static void email_msg(MsnCmdProc *cmdproc, MsnMessage *msg) { MsnSession *session; @@ -1852,7 +1858,11 @@ msn_table_add_msg_type(cbs_table, "text/x-msmsgsemailnotification", email_msg); + /*delete an offline Message notification*/ msn_table_add_msg_type(cbs_table, + "text/x-msmsgsactivemailnotification", + delete_oim_msg); + msn_table_add_msg_type(cbs_table, "application/x-msmsgssystemmessage", system_msg); } Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-24 14:21:43 UTC (rev 17014) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-24 16:38:30 UTC (rev 17015) @@ -149,7 +149,55 @@ /**************************************** * OIM delete SOAP request * **************************************/ +static void +msn_oim_delete_read_cb(gpointer data, GaimSslConnection *gsc, + GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + MsnOim * oim = soapconn->session->oim; + gaim_debug_info("MaYuan","OIM delete read buffer:{%s}\n",soapconn->body); + + msn_soap_free_read_buf(soapconn); + /*get next single Offline Message*/ + msn_soap_post(soapconn,NULL,msn_oim_retrieve_connect_init); +} + +static void +msn_oim_delete_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + soapconn->read_cb = msn_oim_delete_read_cb; +} + +/*Post to get the Offline Instant Message*/ +static void +msn_oim_post_delete_msg(MsnOim *oim,const char *msgid) +{ + MsnSoapReq *soap_request; + const char *soap_body,*t,*p; + + g_return_if_fail(oim != NULL); + g_return_if_fail(msgid != NULL); + + gaim_debug_info("MaYuan","Delete single OIM Message {%s}\n",msgid); + t = oim->session->passport_info.t; + p = oim->session->passport_info.p; + + soap_body = g_strdup_printf(MSN_OIM_DEL_TEMPLATE, + t, + p, + msgid + ); + soap_request = msn_soap_request_new(MSN_OIM_RETRIEVE_HOST, + MSN_OIM_RETRIEVE_URL,MSN_OIM_DEL_SOAP_ACTION, + soap_body, + msn_oim_delete_read_cb, + msn_oim_delete_written_cb); + msn_soap_post(oim->retrieveconn,soap_request,msn_oim_retrieve_connect_init); +} + /**************************************** * OIM get SOAP request * **************************************/ @@ -162,6 +210,7 @@ session = soapconn->session; g_return_if_fail(session != NULL); + msn_soap_clean_unhandled_request(soapconn); // msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to OIM server")); } @@ -184,6 +233,7 @@ gaim_debug_info("MaYuan","oim get SOAP Server connected!\n"); } +/*Post the Offline Instant Message to User Conversation*/ void msn_oim_report_to_user(MsnOim *oim,char *msg_str) { @@ -194,6 +244,7 @@ char *start,*end; int has_nick = 0; char *passport_str,*passport; + char *msg_id; message = msn_message_new(MSN_MSG_UNKNOWN); @@ -225,24 +276,37 @@ gaim_debug_info("MaYuan","oim Date:{%s},passport{%s}\n",date,passport); msn_session_report_user(oim->session,passport,decode_msg,GAIM_MESSAGE_SYSTEM); + + /*Now get the oim message ID from the oim_list. + * and append to read list to prepare for deleting the Offline Message when sign out + */ + if(oim->oim_list != NULL){ + msg_id = oim->oim_list->data; + msn_oim_post_delete_msg(oim,msg_id); + oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); + } + g_free(passport); } +/* Parse the XML data, + * prepare to report the OIM to user + */ void -msn_oim_process(MsnOim *oim,char *oim_msg) +msn_oim_get_process(MsnOim *oim,char *oim_msg) { xmlnode *oimNode,*bodyNode,*responseNode,*msgNode; char *msg_data,*msg_str; oimNode = xmlnode_from_str(oim_msg, strlen(oim_msg)); bodyNode = xmlnode_get_child(oimNode,"Body"); -// gaim_debug_misc("xml","body{%p},name:%s\n",bodyNode,bodyNode->name); responseNode = xmlnode_get_child(bodyNode,"GetMessageResponse"); msgNode = xmlnode_get_child(responseNode,"GetMessageResult"); msg_data = xmlnode_get_data(msgNode); msg_str = g_strdup(msg_data); gaim_debug_info("OIM","msg:{%s}\n",msg_str); msn_oim_report_to_user(oim,msg_str); + g_free(msg_str); } @@ -256,10 +320,10 @@ gaim_debug_info("MaYuan","OIM get read buffer:{%s}\n",soapconn->body); /*we need to process the read message!*/ - msn_oim_process(oim,soapconn->body); + msn_oim_get_process(oim,soapconn->body); msn_soap_free_read_buf(soapconn); + /*get next single Offline Message*/ -// oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); msn_soap_post(soapconn,NULL,msn_oim_retrieve_connect_init); } @@ -272,7 +336,9 @@ // msn_soap_read_cb(data,source,cond); } -/*parse the oim XML data*/ +/* parse the oim XML data + * and post it to the soap server to get the Offline Message + * */ void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg) { @@ -291,13 +357,15 @@ nNode = xmlnode_get_child(mNode,"N"); nickname = xmlnode_get_data(nNode); gaim_debug_info("MaYuan","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); -// msn_session_report_user(oim->session,passport,"hello"); + oim->oim_list = g_list_append(oim->oim_list,msgid); msn_oim_post_single_get_msg(oim,msgid); } } -static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid) +/*Post to get the Offline Instant Message*/ +static void +msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid) { MsnSoapReq *soap_request; const char *soap_body,*t,*p; @@ -329,6 +397,7 @@ msn_oim_get_error_cb); } +/*Msn OIM Send Server Connect Init Function*/ void msn_oim_send_connect_init(MsnSoapConn *sendconn) { gaim_debug_info("MaYuan","msn oim send connect init...\n"); Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.h 2006-08-24 14:21:43 UTC (rev 17014) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.h 2006-08-24 16:38:30 UTC (rev 17015) @@ -25,10 +25,10 @@ #ifndef _MSN_OIM_H_ #define _MSN_OIM_H_ +/*OIM Retrieve SOAP Template*/ #define MSN_OIM_RETRIEVE_HOST "rsi.hotmail.com" #define MSN_OIM_RETRIEVE_URL "/rsi/rsi.asmx" #define MSN_OIM_GET_SOAP_ACTION "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/GetMessage" -#define MSN_OIM_DEL_SOAP_ACTION "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/DeleteMessages" #define MSN_OIM_GET_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ @@ -46,6 +46,9 @@ "</soap:Body>"\ "</soap:Envelope>" +/*OIM Delete SOAP Template*/ +#define MSN_OIM_DEL_SOAP_ACTION "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/DeleteMessages" + #define MSN_OIM_DEL_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ "<soap:Header>"\ @@ -63,6 +66,7 @@ "</soap:Body>"\ "</soap:Envelope>" +/*OIM Send SOAP Template*/ #define MSN_OIM_SEND_HOST "ows.messenger.msn.com" #define MSN_OIM_SEND_URL "/OimWS/oim.asmx" #define MSN_OIM_SEND_SOAP_ACTION "http://messenger.msn.com/ws/2004/09/oim/Store" Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-24 14:21:43 UTC (rev 17014) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-24 16:38:30 UTC (rev 17015) @@ -141,12 +141,23 @@ msn_soap_set_process_step(soapconn,MSN_SOAP_UNCONNECTED); } +/*clean the unhandled SOAP request*/ +void +msn_soap_clean_unhandled_request(MsnSoapConn *soapconn) +{ + MsnSoapReq *request; + + g_return_if_fail(soapconn != NULL); + + while ((request = g_queue_pop_head(soapconn->soap_queue)) != NULL){ + msn_soap_request_free(request); + } +} + /*destroy the soap connection*/ void msn_soap_destroy(MsnSoapConn *soapconn) { - MsnSoapReq *request; - if(soapconn->login_host) g_free(soapconn->login_host); @@ -168,9 +179,8 @@ msn_soap_close(soapconn); /*process the unhandled soap request*/ - while ((request = g_queue_pop_head(soapconn->soap_queue)) != NULL){ - msn_soap_request_free(request); - } + msn_soap_clean_unhandled_request(soapconn); + g_queue_free(soapconn->soap_queue); g_free(soapconn); } @@ -551,7 +561,7 @@ "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: text/*\r\n" + "Accept: */*\r\n" "Host: %s\r\n" "Content-Length: %d\r\n" "Connection: Keep-Alive\r\n" Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.h 2006-08-24 14:21:43 UTC (rev 17014) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.h 2006-08-24 16:38:30 UTC (rev 17015) @@ -133,6 +133,9 @@ void msn_soap_connect_cb(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond); void msn_soap_read_cb(gpointer data, gint source, GaimInputCondition cond); +/*clean the unhandled request*/ +void msn_soap_clean_unhandled_request(MsnSoapConn *soapconn); + /*check if the soap connection is connected*/ int msn_soap_connected(MsnSoapConn *soapconn); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-26 03:25:18
|
Revision: 17034 Author: mayuan2006 Date: 2006-08-25 20:25:00 -0700 (Fri, 25 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17034&view=rev Log Message: ----------- middle version for oim send not stable,don't use it! committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/oim.h branches/soc-2006-msnp13/src/protocols/msn/slpcall.c branches/soc-2006-msnp13/src/protocols/msn/soap.c branches/soc-2006-msnp13/src/protocols/msn/user.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 03:25:00 UTC (rev 17034) @@ -117,7 +117,7 @@ int list_op =0; char * passport; xmlnode * node,*body,*response,*result,*services,*service,*memberships; - xmlnode *membershipnode,*members,*member,*passportNode,*role; + xmlnode *membershipnode,*members,*member,*passportNode; session = contact->session; gaim_debug_misc("xml","parse contact list:{%s}\nsize:%d\n",contact->soapconn->body,contact->soapconn->body_len); @@ -143,9 +143,13 @@ gaim_debug_misc("xml","memberships{%p},name:%s\n",memberships,memberships->name); for(membershipnode = xmlnode_get_child(memberships, "Membership"); membershipnode; membershipnode = xmlnode_get_next_twin(membershipnode)){ - role = xmlnode_get_child(membershipnode,"MemberRole"); - list_op = msn_get_memberrole(xmlnode_get_data(role)); - gaim_debug_misc("memberrole","role:%s,list_op:%d\n",xmlnode_get_data(role),list_op); + xmlnode *roleNode; + char *role; + roleNode = xmlnode_get_child(membershipnode,"MemberRole"); + role=xmlnode_get_data(roleNode); + list_op = msn_get_memberrole(role); + gaim_debug_misc("memberrole","role:%s,list_op:%d\n",role,list_op); + g_free(role); members = xmlnode_get_child(membershipnode,"Members"); for(member = xmlnode_get_child(members, "Member"); member; member = xmlnode_get_next_twin(member)){ @@ -160,9 +164,11 @@ typeNode = xmlnode_get_child(member,"Type"); type = xmlnode_get_data(typeNode); gaim_debug_misc("Passport","name:%s,type:%s\n",passport,type); + g_free(type); user = msn_userlist_find_add_user(session->userlist,passport,NULL); msn_got_lst_user(session, user, list_op, NULL); + g_free(passport); } if(!g_strcasecmp(xmlnode_get_attrib(member,"type"),"PhoneMember")){ } @@ -174,6 +180,7 @@ gaim_debug_info("Email","name:%s,list_op:%d\n",passport,list_op); user = msn_userlist_find_add_user(session->userlist,passport,NULL); msn_got_lst_user(session,user,list_op,NULL); + g_free(passport); } } } @@ -268,18 +275,20 @@ continue; } - gaim_debug_misc("MsnContact","group_id:%s name:%s\n",group_id,group_name); + gaim_debug_misc("MsnAB","group_id:%s name:%s\n",group_id,group_name); if ((gaim_find_group(group_name)) == NULL){ GaimGroup *g = gaim_group_new(group_name); gaim_blist_add_group(g, NULL); } + g_free(group_id); + g_free(group_name); } /*add a default No group to set up the no group Membership*/ group_id = g_strdup(MSN_INDIVIDUALS_GROUP_ID); group_name = g_strdup(MSN_INDIVIDUALS_GROUP_NAME); msn_group_new(session->userlist,group_id , group_name); if (group_id != NULL){ - gaim_debug_misc("MsnContact","group_id:%s name:%s,value:%d\n",group_id,group_name,*group_name=='\0'); + gaim_debug_misc("MsnAB","group_id:%s name:%s,value:%d\n",group_id,group_name,*group_name=='\0'); if ((gaim_find_group(group_name)) == NULL){ GaimGroup *g = gaim_group_new(group_name); gaim_blist_add_group(g, NULL); @@ -293,7 +302,7 @@ group_name = g_strdup(MSN_NON_IM_GROUP_NAME); msn_group_new(session->userlist,group_id , group_name); if (group_id != NULL){ - gaim_debug_misc("MsnContact","group_id:%s name:%s,value:%d\n",group_id,group_name,*group_name=='\0'); + gaim_debug_misc("MsnAB","group_id:%s name:%s,value:%d\n",group_id,group_name,*group_name=='\0'); if ((gaim_find_group(group_name)) == NULL){ GaimGroup *g = gaim_group_new(group_name); gaim_blist_add_group(g, NULL); @@ -335,38 +344,44 @@ if(!strcmp(msnEnabled,"true")){ emailNode = xmlnode_get_child(contactEmailNode,"email"); passport = xmlnode_get_data(emailNode); - gaim_debug_info("Ma Yuan","Yahoo User %s\n",passport); + gaim_debug_info("MsnAB","Yahoo User %s\n",passport); break; } + g_free(msnEnabled); } }else{ passport = xmlnode_get_data(passportName); } displayName = xmlnode_get_child(contactInfo,"displayName"); - if(displayName == NULL) - Name = passport; - else + if(displayName == NULL){ + Name = g_strdup(passport); + }else{ Name =xmlnode_get_data(displayName); + } - gaim_debug_misc("contact","name:%s,Id:{%s},display:{%s}\n", + gaim_debug_misc("MsnAB","name:%s,Id:{%s},display:{%s}\n", passport, - xmlnode_get_data(contactId), + uid, Name); user = msn_userlist_find_add_user(session->userlist, passport,Name); msn_user_set_uid(user,uid); msn_user_set_type(user,msn_get_user_type(type)); user->list_op |= MSN_LIST_FL_OP; + g_free(Name); + g_free(passport); + g_free(uid); + g_free(type); - gaim_debug_misc("MsnContact","\n"); groupIds = xmlnode_get_child(contactInfo,"groupIds"); if(groupIds){ for(guid = xmlnode_get_child(groupIds, "guid");guid; guid = xmlnode_get_next_twin(guid)){ group_id = xmlnode_get_data(guid); msn_user_add_group_id(user,group_id); - gaim_debug_misc("contact","guid:%s\n",group_id); + gaim_debug_misc("MsnAB","guid:%s\n",group_id); + g_free(group_id); } }else{ group_id = g_strdup(MSN_INDIVIDUALS_GROUP_ID); Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 03:25:00 UTC (rev 17034) @@ -824,65 +824,81 @@ account = gaim_connection_get_account(gc); msn_import_html(message, &msgformat, &msgtext); + if(msn_user_is_online(account, who)){ + /*User online,then send Online Instant Message*/ - if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) - { + if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) + { + g_free(msgformat); + g_free(msgtext); + + return -E2BIG; + } + + msg = msn_message_new_plain(msgtext); + msg->remote_user = g_strdup(who); + msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat); + g_free(msgformat); g_free(msgtext); - return -E2BIG; - } + gaim_debug_info("MaYuan","prepare to send online Message\n"); + if (g_ascii_strcasecmp(who, gaim_account_get_username(account))) + { + MsnSession *session; + MsnSwitchBoard *swboard; - msg = msn_message_new_plain(msgtext); - msg->remote_user = g_strdup(who); - msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat); + session = gc->proto_data; + if(strstr(who,"yahoo") != NULL){ + gaim_debug_info("MaYuan","send to Yahoo!\n"); + uum_send_msg(session,msg); + }else{ + gaim_debug_info("MaYuan","send via switchboard\n"); + swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM); + msn_switchboard_send_msg(swboard, msg, TRUE); + } + } + else + { + char *body_str, *body_enc, *pre, *post; + const char *format; + /* + * In MSN, you can't send messages to yourself, so + * we'll fake like we received it ;) + */ + body_str = msn_message_to_string(msg); + body_enc = g_markup_escape_text(body_str, -1); + g_free(body_str); - g_free(msgformat); - g_free(msgtext); + format = msn_message_get_attr(msg, "X-MMS-IM-Format"); + msn_parse_format(format, &pre, &post); + body_str = g_strdup_printf("%s%s%s", pre ? pre : "", + body_enc ? body_enc : "", post ? post : ""); + g_free(body_enc); + g_free(pre); + g_free(post); - gaim_debug_info("MaYuan","prepare to send...\n"); - if (g_ascii_strcasecmp(who, gaim_account_get_username(account))) - { + serv_got_typing_stopped(gc, who); + serv_got_im(gc, who, body_str, flags, time(NULL)); + g_free(body_str); + } + + msn_message_destroy(msg); + }else { + /*send Offline Instant Message*/ MsnSession *session; - MsnSwitchBoard *swboard; - + MsnOim *oim; + char *friendname; + + gaim_debug_info("MaYuan","prepare to send offline Message\n"); session = gc->proto_data; - if(strstr(who,"yahoo") != NULL){ - gaim_debug_info("MaYuan","send to Yahoo!\n"); - uum_send_msg(session,msg); - }else{ - gaim_debug_info("MaYuan","send via switchboard\n"); - swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM); - msn_switchboard_send_msg(swboard, msg, TRUE); - } + oim = session->oim; + friendname = g_strdup_printf("=?utf-8?B?Y2xpZW50?="); + msn_oim_prep_send_msg_info(oim, + gaim_account_get_username(account),friendname,who, + msg); + msn_oim_send_msg(oim); } - else - { - char *body_str, *body_enc, *pre, *post; - const char *format; - /* - * In MSN, you can't send messages to yourself, so - * we'll fake like we received it ;) - */ - body_str = msn_message_to_string(msg); - body_enc = g_markup_escape_text(body_str, -1); - g_free(body_str); - - format = msn_message_get_attr(msg, "X-MMS-IM-Format"); - msn_parse_format(format, &pre, &post); - body_str = g_strdup_printf("%s%s%s", pre ? pre : "", - body_enc ? body_enc : "", post ? post : ""); - g_free(body_enc); - g_free(pre); - g_free(post); - - serv_got_typing_stopped(gc, who); - serv_got_im(gc, who, body_str, flags, time(NULL)); - g_free(body_str); - } - - msn_message_destroy(msg); - return 1; } Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 03:25:00 UTC (rev 17034) @@ -26,11 +26,13 @@ #include "msn.h" #include "soap.h" #include "oim.h" +#include "msn-utils.h" /*Local Function Prototype*/ static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid); void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn); void msn_oim_send_connect_init(MsnSoapConn *soapconn); +void msn_oim_free_send_req(MsnOimSendReq *req); /*new a OIM object*/ MsnOim * @@ -41,9 +43,13 @@ oim = g_new0(MsnOim, 1); oim->session = session; oim->retrieveconn = msn_soap_new(session,oim,1); + oim->oim_list = NULL; oim->sendconn = msn_soap_new(session,oim,1); - + oim->run_id = rand_guid(); + oim->challenge = NULL; + oim->send_queue = g_queue_new(); + oim->send_seq = 1; return oim; } @@ -51,14 +57,74 @@ void msn_oim_destroy(MsnOim *oim) { + MsnOimSendReq *request; + msn_soap_destroy(oim->retrieveconn); msn_soap_destroy(oim->sendconn); + g_free(oim->run_id); + g_free(oim->challenge); + + while((request = g_queue_pop_head(oim->send_queue)) != NULL){ + msn_oim_free_send_req(request); + } + g_queue_free(oim->send_queue); + g_free(oim); } +MsnOimSendReq * +msn_oim_new_send_req(char *from_member, + char*friendname,char* to_member, + gint send_seq, + char *msg) +{ + MsnOimSendReq *request; + + request = g_new0(MsnOimSendReq, 1); + request->from_member =g_strdup(from_member); + request->friendname = g_strdup(friendname); + request->to_member = g_strdup(to_member); + request->send_seq = send_seq; + request->oim_msg= g_strdup(msg); + return request; +} + +void +msn_oim_free_send_req(MsnOimSendReq *req) +{ + g_free(req->from_member); + g_free(req->friendname); + g_free(req->to_member); + g_free(req->oim_msg); + + g_free(req); +} + /**************************************** * OIM send SOAP request * **************************************/ +/*encode the message to OIM Message Format*/ +char * +msn_oim_msg_to_str(MsnOim *oim,char *body) +{ + char *oim_body; + char *oim_base64,*oim_base16; + + gaim_debug_info("MaYuan","encode OIM Message...\n"); + gaim_debug_info("MaYuan","runid:{%s}\n",oim->run_id); + gaim_debug_info("MaYuan","body:{%s}\n",body); + oim_base64 = gaim_base64_encode((const guchar *)body, strlen(body)); + gaim_debug_info("MaYuan","encode body:{%s}\n",oim_base64); + oim_base16 = gaim_base16_encode((const guchar *)body, strlen(body)); + gaim_debug_info("MaYuan","encode body:{%s}\n",oim_base16); + + oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, + oim->run_id,oim->send_seq,oim_base64); + gaim_debug_info("MaYuan","start base64 encode\n",body); + + return oim_body; +} + /*oim SOAP server login error*/ static void msn_oim_send_error_cb(GaimSslConnection *gsc, GaimSslErrorType error, void *data) @@ -88,14 +154,54 @@ g_return_if_fail(session != NULL); } +void +msn_oim_send_process(MsnOim *oim,char *body,int len) +{ + xmlnode *responseNode,*bodyNode,*faultNode; + xmlnode *detailNode,*challengeNode; + char *challenge; + + responseNode = xmlnode_from_str(body,len); + g_return_if_fail(responseNode != NULL); + bodyNode = xmlnode_get_child(responseNode,"Body"); + faultNode = xmlnode_get_child(bodyNode,"Fault"); + if(faultNode == NULL){ + /*Send OK! return*/ + MsnOimSendReq *request; + + xmlnode_free(responseNode); + request = g_queue_pop_head(oim->send_queue); + msn_oim_free_send_req(request); + /*send next buffered Offline Message*/ + msn_soap_post(oim->sendconn,NULL,msn_oim_send_connect_init); + return; + } + /*get the challenge,and repost it*/ + detailNode = xmlnode_get_child(faultNode, "detail"); + challengeNode = xmlnode_get_child(detailNode,"LockKeyChallenge"); +// gaim_debug_info("MaYuan","challenge:{%s}\n",challenge); + + gaim_debug_info("MaYuan","prepare to dup the challenge\n"); + g_free(oim->challenge); + oim->challenge = xmlnode_get_data(challengeNode); + gaim_debug_info("MaYuan","lockkey:{%s}\n",oim->challenge); + + xmlnode_free(responseNode); + + /*repost the send*/ + gaim_debug_info("MaYuan","prepare to repost the send...\n"); + msn_oim_send_msg(oim); +} + static void msn_oim_send_read_cb(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond) { MsnSoapConn * soapconn = data; - MsnOim * msnoim; + MsnOim * oim; gaim_debug_info("MaYuan","read buffer:{%s}\n",soapconn->body); + msn_oim_send_process(oim,soapconn->body,soapconn->body_len); } static void @@ -107,45 +213,70 @@ // msn_soap_read_cb(data,source,cond); } -/*pose single message to oim server*/ +void +msn_oim_prep_send_msg_info(MsnOim *oim, + char *membername,char*friendname,char *tomember, + char * msg) +{ + MsnOimSendReq *request; + + request = msn_oim_new_send_req(membername,friendname,tomember,oim->send_seq,msg); + g_queue_push_tail(oim->send_queue,request); +} + +/*post send single message request to oim server*/ void -msn_oim_send_single_msg(MsnOim *oim,char * msg) +msn_oim_send_msg(MsnOim *oim) { MsnSoapReq *soap_request; - const char *soap_body,*t,*p; + MsnOimSendReq *oim_request; + char *soap_body,*mspauth; + char *msg_body; + char buf[33]; + + oim_request = g_queue_pop_head(oim->send_queue); + if(oim_request == NULL){ + return; + } + gaim_debug_info("MaYuan","send single OIM Message\n"); + mspauth = g_strdup_printf("t=%s&p=%s", + oim->session->passport_info.t, + oim->session->passport_info.p + ); + gaim_debug_info("MaYuan","get mspauth...\n"); + if(oim->challenge != NULL){ + msn_handle_chl(oim->challenge, buf); + }else{ + g_queue_push_head(oim->send_queue,oim_request); + buf[0]='\0'; + } + gaim_debug_info("MaYuan","get challenge...\n"); - gaim_debug_info("MaYuan","send single OIM Message\n"); - oim->sendconn->login_path = g_strdup(MSN_OIM_SEND_URL); - oim->sendconn->soap_action = g_strdup(MSN_OIM_SEND_SOAP_ACTION); - t = oim->session->passport_info.t; - p = oim->session->passport_info.p; -#if 0 - oimsoapbody = g_strdup_printf(MSN_OIM_SEND_TEMPLATE, - membername, - friendname, - tomember, + msg_body = msn_oim_msg_to_str(oim, oim_request->oim_msg); + gaim_debug_info("MaYuan","get body...\n"); + soap_body = g_strdup_printf(MSN_OIM_SEND_TEMPLATE, + oim_request->from_member, + oim_request->friendname, + oim_request->to_member, mspauth, - prod_id, - lock_key, - msg_num, - msg + MSNP13_WLM_PRODUCT_ID, + buf, + oim_request->send_seq, + msg_body ); -#endif + gaim_debug_info("MaYuan","post body...\n"); soap_request = msn_soap_request_new(MSN_OIM_SEND_HOST, MSN_OIM_SEND_URL,MSN_OIM_SEND_SOAP_ACTION, soap_body, msn_oim_send_read_cb, msn_oim_send_written_cb); + g_free(mspauth); + g_free(msg_body); + g_free(soap_body); + msn_soap_post(oim->sendconn,soap_request,msn_oim_send_connect_init); } -void msn_oim_send_msg(MsnOim *oim,char *msg) -{ - if(msn_soap_connected(oim->sendconn) == -1){ - } - -} - /**************************************** * OIM delete SOAP request * **************************************/ @@ -304,6 +435,7 @@ msgNode = xmlnode_get_child(responseNode,"GetMessageResult"); msg_data = xmlnode_get_data(msgNode); msg_str = g_strdup(msg_data); + g_free(msg_data); gaim_debug_info("OIM","msg:{%s}\n",msg_str); msn_oim_report_to_user(oim,msg_str); @@ -342,14 +474,14 @@ void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg) { - xmlnode *mdNode,*mNode,*INode,*nNode,*ENode,*rtNode; + xmlnode *mdNode,*mNode,*ENode,*INode,*rtNode,*nNode; char *passport,*rTime,*msgid,*nickname; mdNode = xmlnode_from_str(xmlmsg, strlen(xmlmsg)); for(mNode = xmlnode_get_child(mdNode, "M"); mNode; mNode = xmlnode_get_next_twin(mNode)){ - INode = xmlnode_get_child(mNode,"E"); - passport = xmlnode_get_data(INode); + ENode = xmlnode_get_child(mNode,"E"); + passport = xmlnode_get_data(ENode); INode = xmlnode_get_child(mNode,"I"); msgid = xmlnode_get_data(INode); rtNode = xmlnode_get_child(mNode,"RT"); @@ -360,6 +492,10 @@ oim->oim_list = g_list_append(oim->oim_list,msgid); msn_oim_post_single_get_msg(oim,msgid); + g_free(passport); + g_free(msgid); + g_free(rTime); + g_free(nickname); } } Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.h 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.h 2006-08-26 03:25:00 UTC (rev 17034) @@ -67,18 +67,26 @@ "</soap:Envelope>" /*OIM Send SOAP Template*/ +#define MSN_OIM_MSG_TEMPLATE "MIME-Version: 1.0\n"\ + "Content-Type: text/plain; charset=UTF-8\n"\ + "Content-Transfer-Encoding: base64\n"\ + "X-OIM-Message-Type: OfflineMessage\n"\ + "X-OIM-Run-Id: {%s}\n"\ + "X-OIM-Sequence-Num: %d\n\n"\ + "%s" + #define MSN_OIM_SEND_HOST "ows.messenger.msn.com" #define MSN_OIM_SEND_URL "/OimWS/oim.asmx" #define MSN_OIM_SEND_SOAP_ACTION "http://messenger.msn.com/ws/2004/09/oim/Store" #define MSN_OIM_SEND_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ "<soap:Header>"\ - "<From memberName=\"%s\" friendlyName=\"%s\" xml:lang=\"en-US\" proxy=\"MSNMSGR\" xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\" msnpVer=\"MSNP13\" buildVer=\"8.0.0689\"/>"\ + "<From memberName=\"%s\" friendlyName=\"%s\" xml:lang=\"en-US\" proxy=\"MSNMSGR\" xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\" msnpVer=\"MSNP14\" buildVer=\"8.0.0792\"/>"\ "<To memberName=\"%s\" xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\"/>"\ "<Ticket passport=\"%s\" appid=\"%s\" lockkey=\"%s\" xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\"/>"\ "<Sequence xmlns=\"http://schemas.xmlsoap.org/ws/2003/03/rm\">"\ "<Identifier xmlns=\"http://schemas.xmlsoap.org/ws/2002/07/utility\">http://messenger.msn.com</Identifier>"\ - "<MessageNumber>%s</MessageNumber>"\ + "<MessageNumber>%d</MessageNumber>"\ "</Sequence>"\ "</soap:Header>"\ "<soap:Body>"\ @@ -87,6 +95,17 @@ "</soap:Body>"\ "</soap:Envelope>" +typedef struct _MsnOimSendReq MsnOimSendReq; + +struct _MsnOimSendReq +{ + char *from_member; + char *friendname; + char *to_member; + char *oim_msg; + gint send_seq; +}; + typedef struct _MsnOim MsnOim; struct _MsnOim @@ -97,7 +116,10 @@ GList * oim_list; MsnSoapConn *sendconn; - gint LockKeyChallenge; + char *challenge; + char *run_id; + gint send_seq; + GQueue *send_queue; }; /**************************************************** @@ -109,6 +131,13 @@ void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg); +/*Send OIM Message*/ +void msn_oim_prep_send_msg_info(MsnOim *oim, + char *membername,char*friendname,char *tomember, + char * msg); + +void msn_oim_send_msg(MsnOim *oim); + /*get the OIM message*/ void msn_oim_get_msg(MsnOim *oim); Modified: branches/soc-2006-msnp13/src/protocols/msn/slpcall.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/slpcall.c 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/slpcall.c 2006-08-26 03:25:00 UTC (rev 17034) @@ -33,7 +33,7 @@ * Util **************************************************************************/ -static char * +char * rand_guid() { return g_strdup_printf("%4X%4X-%4X-%4X-%4X-%4X%4X%4X", Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-26 03:25:00 UTC (rev 17034) @@ -324,7 +324,8 @@ msn_session_set_error(session, MSN_ERROR_SERV_UNAVAILABLE, error); } - else if (strstr(soapconn->read_buf, "HTTP/1.1 200 OK")) + else if ((strstr(soapconn->read_buf, "HTTP/1.1 200 OK")) + ||(strstr(soapconn->read_buf, "HTTP/1.1 500"))) { /*OK! process the SOAP body*/ body_start = (char *)g_strstr_len(soapconn->read_buf, soapconn->read_len,"\r\n\r\n"); Modified: branches/soc-2006-msnp13/src/protocols/msn/user.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-25 23:59:23 UTC (rev 17033) +++ branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-26 03:25:00 UTC (rev 17034) @@ -298,6 +298,16 @@ b->proto_data = user; } +/*check if the msn user is online*/ +gboolean +msn_user_is_online(GaimAccount *account, const char *name) +{ + GaimBuddy *buddy; + + buddy =gaim_find_buddy(account,name); + return GAIM_BUDDY_IS_ONLINE(buddy); +} + void msn_user_remove_group_id(MsnUser *user, const char * id) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-26 08:07:22
|
Revision: 17040 Author: mayuan2006 Date: 2006-08-26 01:07:08 -0700 (Sat, 26 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17040&view=rev Log Message: ----------- send OIM middle version. Now can send to server, but need to encode the friend name to MIME format committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/slpcall.c branches/soc-2006-msnp13/src/protocols/msn/user.h branches/soc-2006-msnp13/src/protocols/msn/userlist.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 08:07:08 UTC (rev 17040) @@ -384,11 +384,11 @@ g_free(group_id); } }else{ + /*not in any group,Then set default group*/ group_id = g_strdup(MSN_INDIVIDUALS_GROUP_ID); msn_user_add_group_id(user,group_id); g_free(group_id); #if 0 - /*not in any group,Then set default group*/ char *name,*group_id; name = g_strdup(MSN_INDIVIDUALS_GROUP_NAME); Modified: branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c 2006-08-26 08:07:08 UTC (rev 17040) @@ -26,6 +26,23 @@ #include "time.h" //#include <openssl/md5.h> +/************************************************************************** + * Util + **************************************************************************/ +char * +rand_guid() +{ + return g_strdup_printf("%4X%4X-%4X-%4X-%4X-%4X%4X%4X", + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111, + rand() % 0xAAFF + 0x1111); +} + void msn_parse_format(const char *mime, char **pre_ret, char **post_ret) { Modified: branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h 2006-08-26 08:07:08 UTC (rev 17040) @@ -25,6 +25,11 @@ #define _MSN_UTILS_H_ /** + * Generate the Random GUID + */ +char * rand_guid(); + +/** * Parses the MSN message formatting into a format compatible with Gaim. * * @param mime The mime header with the formatting. Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 08:07:08 UTC (rev 17040) @@ -896,7 +896,7 @@ friendname = g_strdup_printf("=?utf-8?B?Y2xpZW50?="); msn_oim_prep_send_msg_info(oim, gaim_account_get_username(account),friendname,who, - msg); + message); msn_oim_send_msg(oim); } return 1; Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 08:07:08 UTC (rev 17040) @@ -59,6 +59,7 @@ { MsnOimSendReq *request; + gaim_debug_info("OIM","destroy the OIM \n"); msn_soap_destroy(oim->retrieveconn); msn_soap_destroy(oim->sendconn); g_free(oim->run_id); @@ -81,17 +82,19 @@ MsnOimSendReq *request; request = g_new0(MsnOimSendReq, 1); - request->from_member =g_strdup(from_member); - request->friendname = g_strdup(friendname); - request->to_member = g_strdup(to_member); - request->send_seq = send_seq; - request->oim_msg= g_strdup(msg); + request->from_member =g_strdup(from_member); + request->friendname = g_strdup(friendname); + request->to_member = g_strdup(to_member); + request->send_seq = send_seq; + request->oim_msg = g_strdup(msg); return request; } void msn_oim_free_send_req(MsnOimSendReq *req) { + g_return_if_fail(req != NULL); + g_free(req->from_member); g_free(req->friendname); g_free(req->to_member); @@ -107,20 +110,14 @@ char * msn_oim_msg_to_str(MsnOim *oim,char *body) { - char *oim_body; - char *oim_base64,*oim_base16; + char *oim_body,*oim_base64; gaim_debug_info("MaYuan","encode OIM Message...\n"); - gaim_debug_info("MaYuan","runid:{%s}\n",oim->run_id); - gaim_debug_info("MaYuan","body:{%s}\n",body); oim_base64 = gaim_base64_encode((const guchar *)body, strlen(body)); - gaim_debug_info("MaYuan","encode body:{%s}\n",oim_base64); - oim_base16 = gaim_base16_encode((const guchar *)body, strlen(body)); - gaim_debug_info("MaYuan","encode body:{%s}\n",oim_base16); + gaim_debug_info("MaYuan","encoded base64 body:{%s}\n",oim_base64); oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, oim->run_id,oim->send_seq,oim_base64); - gaim_debug_info("MaYuan","start base64 encode\n",body); return oim_body; } @@ -154,6 +151,10 @@ g_return_if_fail(session != NULL); } +/* + * Process the send return SOAP string + * If got SOAP Fault,get the lock key,and resend it. + */ void msn_oim_send_process(MsnOim *oim,char *body,int len) { @@ -169,6 +170,7 @@ /*Send OK! return*/ MsnOimSendReq *request; + gaim_debug_info("MaYuan","send OIM OK!"); xmlnode_free(responseNode); request = g_queue_pop_head(oim->send_queue); msn_oim_free_send_req(request); @@ -179,9 +181,7 @@ /*get the challenge,and repost it*/ detailNode = xmlnode_get_child(faultNode, "detail"); challengeNode = xmlnode_get_child(detailNode,"LockKeyChallenge"); -// gaim_debug_info("MaYuan","challenge:{%s}\n",challenge); - gaim_debug_info("MaYuan","prepare to dup the challenge\n"); g_free(oim->challenge); oim->challenge = xmlnode_get_data(challengeNode); gaim_debug_info("MaYuan","lockkey:{%s}\n",oim->challenge); @@ -197,9 +197,14 @@ msn_oim_send_read_cb(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond) { - MsnSoapConn * soapconn = data; + MsnSoapConn * soapconn = data; + MsnSession *session = soapconn->session; MsnOim * oim; + g_return_if_fail(session != NULL); + oim = soapconn->session->oim; + g_return_if_fail(oim != NULL); + gaim_debug_info("MaYuan","read buffer:{%s}\n",soapconn->body); msn_oim_send_process(oim,soapconn->body,soapconn->body_len); } @@ -233,7 +238,9 @@ char *soap_body,*mspauth; char *msg_body; char buf[33]; - + + g_return_if_fail(oim != NULL); + gaim_debug_info("MaYuan","queue:{%p}\n",oim->send_queue); oim_request = g_queue_pop_head(oim->send_queue); if(oim_request == NULL){ return; @@ -243,17 +250,21 @@ oim->session->passport_info.t, oim->session->passport_info.p ); - gaim_debug_info("MaYuan","get mspauth...\n"); + g_queue_push_head(oim->send_queue,oim_request); + + /* if we got the challenge lock key, we compute it + * else we go for the SOAP fault and resend it. + */ if(oim->challenge != NULL){ msn_handle_chl(oim->challenge, buf); + oim_request->send_seq++; }else{ - g_queue_push_head(oim->send_queue,oim_request); + gaim_debug_info("MaYuan","no lock key challenge,wait for SOAP Fault and Resend\n"); buf[0]='\0'; } - gaim_debug_info("MaYuan","get challenge...\n"); + gaim_debug_info("MaYuan","get the lock key challenge {%s}\n",buf); msg_body = msn_oim_msg_to_str(oim, oim_request->oim_msg); - gaim_debug_info("MaYuan","get body...\n"); soap_body = g_strdup_printf(MSN_OIM_SEND_TEMPLATE, oim_request->from_member, oim_request->friendname, @@ -264,7 +275,6 @@ oim_request->send_seq, msg_body ); - gaim_debug_info("MaYuan","post body...\n"); soap_request = msn_soap_request_new(MSN_OIM_SEND_HOST, MSN_OIM_SEND_URL,MSN_OIM_SEND_SOAP_ACTION, soap_body, Modified: branches/soc-2006-msnp13/src/protocols/msn/slpcall.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/slpcall.c 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/slpcall.c 2006-08-26 08:07:08 UTC (rev 17040) @@ -22,6 +22,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "msn.h" +#include "msn-utils.h" #include "slpcall.h" #include "slpsession.h" @@ -30,24 +31,6 @@ /* #define MSN_DEBUG_SLPCALL */ /************************************************************************** - * Util - **************************************************************************/ - -char * -rand_guid() -{ - return g_strdup_printf("%4X%4X-%4X-%4X-%4X-%4X%4X%4X", - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111, - rand() % 0xAAFF + 0x1111); -} - -/************************************************************************** * Main **************************************************************************/ Modified: branches/soc-2006-msnp13/src/protocols/msn/user.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-08-26 08:07:08 UTC (rev 17040) @@ -295,6 +295,12 @@ */ GHashTable *msn_user_get_client_caps(const MsnUser *user); +/** + * check to see if user is online + */ +gboolean +msn_user_is_online(GaimAccount *account, const char *name); + /*@}*/ #endif /* _MSN_USER_H_ */ Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-26 07:11:55 UTC (rev 17039) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-26 08:07:08 UTC (rev 17040) @@ -279,7 +279,7 @@ * looked at this. Maybe we should use the store * name instead? --KingAnt */ - got_new_entry(gc, passport, friendly); +// got_new_entry(gc, passport, friendly); } } @@ -391,7 +391,7 @@ */ if (!(list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))){ - got_new_entry(gc, passport, store); +// got_new_entry(gc, passport, store); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-26 08:31:45
|
Revision: 17041 Author: mayuan2006 Date: 2006-08-26 01:31:37 -0700 (Sat, 26 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17041&view=rev Log Message: ----------- fix the Offline Instant Message sequence bug committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/oim.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 08:07:08 UTC (rev 17040) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 08:31:37 UTC (rev 17041) @@ -106,6 +106,13 @@ if(!strcmp(type,"Regular")){ return 1; } + if(!strcmp(type,"Live")){ + return 1; + } + if(!strcmp(type,"LivePending")){ + return 1; + } + return 0; } @@ -325,6 +332,13 @@ contactType = xmlnode_get_child(contactInfo,"contactType"); type = xmlnode_get_data(contactType); + /*setup the Display Name*/ + if (!strcmp(type, "Me")){ + char *friendly = xmlnode_get_data(xmlnode_get_child(contactInfo,"displayName")); + gaim_connection_set_display_name(session->account->gc, gaim_url_decode(friendly)); + g_free(friendly); + } + passportName = xmlnode_get_child(contactInfo,"passportName"); if(passportName == NULL){ xmlnode *emailsNode, *contactEmailNode, *emailNode; Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 08:07:08 UTC (rev 17040) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 08:31:37 UTC (rev 17041) @@ -115,7 +115,7 @@ gaim_debug_info("MaYuan","encode OIM Message...\n"); oim_base64 = gaim_base64_encode((const guchar *)body, strlen(body)); gaim_debug_info("MaYuan","encoded base64 body:{%s}\n",oim_base64); - + gaim_debug_info("MaYuan","url_encode:{%s}\n",gaim_url_encode(body)); oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, oim->run_id,oim->send_seq,oim_base64); @@ -257,7 +257,6 @@ */ if(oim->challenge != NULL){ msn_handle_chl(oim->challenge, buf); - oim_request->send_seq++; }else{ gaim_debug_info("MaYuan","no lock key challenge,wait for SOAP Fault and Resend\n"); buf[0]='\0'; @@ -284,6 +283,10 @@ g_free(msg_body); g_free(soap_body); + /*increase the offline Sequence control*/ + if(oim->challenge != NULL){ + oim->send_seq++; + } msn_soap_post(oim->sendconn,soap_request,msn_oim_send_connect_init); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-26 09:23:49
|
Revision: 17042 Author: mayuan2006 Date: 2006-08-26 02:23:40 -0700 (Sat, 26 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17042&view=rev Log Message: ----------- Send OIM in a sequence committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/soap.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 08:31:37 UTC (rev 17041) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 09:23:40 UTC (rev 17042) @@ -30,6 +30,9 @@ #include "xmlnode.h" #include "group.h" +/*define This to debug the Contact Server*/ +#undef MSN_CONTACT_SOAP_DEBUG + void msn_contact_connect_init(MsnSoapConn *soapconn); /*new a contact*/ @@ -207,7 +210,9 @@ session = soapconn->session; g_return_if_fail(session != NULL); -// gaim_debug_misc("msn", "soap contact server Reply: {%s}\n", soapconn->read_buf); +#ifdef MSN_CONTACT_SOAP_DEBUG + gaim_debug_misc("msn", "soap contact server Reply: {%s}\n", soapconn->read_buf); +#endif msn_parse_contact_list(contact); /*free the read buffer*/ msn_soap_free_read_buf(soapconn); @@ -463,7 +468,6 @@ gaim_debug_info("MaYuan","finish contact written\n"); soapconn->read_cb = msn_get_address_cb; -// msn_soap_read_cb(data,source,cond); } /*get the address book*/ Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 08:31:37 UTC (rev 17041) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-08-26 09:23:40 UTC (rev 17042) @@ -115,7 +115,6 @@ gaim_debug_info("MaYuan","encode OIM Message...\n"); oim_base64 = gaim_base64_encode((const guchar *)body, strlen(body)); gaim_debug_info("MaYuan","encoded base64 body:{%s}\n",oim_base64); - gaim_debug_info("MaYuan","url_encode:{%s}\n",gaim_url_encode(body)); oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, oim->run_id,oim->send_seq,oim_base64); @@ -240,11 +239,9 @@ char buf[33]; g_return_if_fail(oim != NULL); - gaim_debug_info("MaYuan","queue:{%p}\n",oim->send_queue); oim_request = g_queue_pop_head(oim->send_queue); - if(oim_request == NULL){ - return; - } + g_return_if_fail(oim_request != NULL); + gaim_debug_info("MaYuan","send single OIM Message\n"); mspauth = g_strdup_printf("t=%s&p=%s", oim->session->passport_info.t, Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-26 08:31:37 UTC (rev 17041) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-26 09:23:40 UTC (rev 17042) @@ -26,6 +26,9 @@ #include "msn.h" #include "soap.h" +/*define this Macro to debug soap server action*/ +#define MSN_SOAP_DEBUG + /*local function prototype*/ void msn_soap_set_process_step(MsnSoapConn *soapconn, MsnSoapStep step); @@ -111,7 +114,6 @@ soapconn->ssl_conn = ssl; soapconn->connect_cb = connect_cb; soapconn->error_cb = error_cb; - gaim_debug_info("MaYuan","msn_soap_init...done\n"); } /*connect the soap connection*/ @@ -214,13 +216,14 @@ if(len >0){ soapconn->read_buf = g_realloc(soapconn->read_buf, soapconn->read_len + len + 1); -// strncpy(soapconn->read_buf + soapconn->read_len, temp_buf, len); memcpy(soapconn->read_buf + soapconn->read_len, temp_buf, len); soapconn->read_len += len; soapconn->read_buf[soapconn->read_len] = '\0'; } +#ifdef MSN_SOAP_DEBUG gaim_debug_info("MaYuan","++soap ssl read:{%d}\n",len); -// gaim_debug_info("MaYuan","nexus ssl read:{%s}\n",soapconn->read_buf); + gaim_debug_info("MaYuan","nexus ssl read:{%s}\n",soapconn->read_buf); +#endif return len; } @@ -345,16 +348,15 @@ /*setup the conn body */ soapconn->body = body_start; soapconn->body_len = atoi(body_len); +#ifdef MSN_SOAP_DEBUG gaim_debug_misc("MaYuan","SOAP Read length :%d,body len:%d\n",soapconn->read_len,soapconn->body_len); - +#endif soapconn->need_to_read = (body_start - soapconn->read_buf +soapconn->body_len) - soapconn->read_len; - if(soapconn->read_len < body_start - soapconn->read_buf + soapconn->body_len){ -// if(soapconn->need_to_read >0){ + if(soapconn->need_to_read >0){ return; } g_free(body_len); -#if 1 /*remove the read handler*/ gaim_input_remove(soapconn->input_handler); soapconn->input_handler = -1; @@ -368,7 +370,6 @@ * Weird! * */ msn_soap_close(soapconn); -#endif /*call the read callback*/ if(soapconn->read_cb != NULL){ @@ -538,13 +539,17 @@ return; } gaim_debug_info("Ma Yuan","soap connected!\n"); + /*if connected, what we only needed to do is to queue the request, * when SOAP request in the queue processed done, will do this command. * we just waiting... + * If we send the request this time,error may occure */ +#if 0 if(soapconn->step == MSN_SOAP_CONNECTED_IDLE){ msn_soap_post_head_request(soapconn); } +#endif } /*Post the soap request action*/ @@ -576,9 +581,13 @@ request_str = g_strdup_printf("%s%s", soap_head,request->body); g_free(soap_head); +#ifdef MSN_SOAP_DEBUG + gaim_debug_info("MaYuan","send to server{%s}\n",request_str); +#endif + /*free read buffer*/ msn_soap_free_read_buf(soapconn); - gaim_debug_info("MaYuan","send to server{%s}\n",request_str); + /*post it to server*/ msn_soap_write(soapconn,request_str,request->written_cb); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-26 11:30:54
|
Revision: 17043 Author: mayuan2006 Date: 2006-08-26 04:30:40 -0700 (Sat, 26 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17043&view=rev Log Message: ----------- change the Group operation committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/contact.h branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/soap.c branches/soc-2006-msnp13/src/protocols/msn/userlist.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 09:23:40 UTC (rev 17042) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 11:30:40 UTC (rev 17043) @@ -330,6 +330,8 @@ MsnUser *user; char *passport,*Name,*uid,*type; + passport = NULL; + contactId= xmlnode_get_child(contactNode,"contactId"); uid = xmlnode_get_data(contactId); @@ -339,7 +341,8 @@ /*setup the Display Name*/ if (!strcmp(type, "Me")){ - char *friendly = xmlnode_get_data(xmlnode_get_child(contactInfo,"displayName")); + char *friendly; + friendly = xmlnode_get_data(xmlnode_get_child(contactInfo,"displayName")); gaim_connection_set_display_name(session->account->gc, gaim_url_decode(friendly)); g_free(friendly); } @@ -361,10 +364,16 @@ } msnEnabled = xmlnode_get_data(messengerEnabledNode); if(!strcmp(msnEnabled,"true")){ + /*Messenger enabled, Get the Passport*/ emailNode = xmlnode_get_child(contactEmailNode,"email"); passport = xmlnode_get_data(emailNode); gaim_debug_info("MsnAB","Yahoo User %s\n",passport); break; + }else{ + /*TODO maybe we can just ignore it in Gaim?*/ + emailNode = xmlnode_get_child(contactEmailNode,"email"); + passport = xmlnode_get_data(emailNode); + gaim_debug_info("MSNAB","Other type user\n"); } g_free(msnEnabled); } @@ -372,6 +381,10 @@ passport = xmlnode_get_data(passportName); } + if(passport == NULL){ + continue; + } + displayName = xmlnode_get_child(contactInfo,"displayName"); if(displayName == NULL){ Name = g_strdup(passport); @@ -379,20 +392,23 @@ Name =xmlnode_get_data(displayName); } - gaim_debug_misc("MsnAB","name:%s,Id:{%s},display:{%s}\n", - passport, - uid, - Name); + gaim_debug_misc("MsnAB","passport:{%s} uid:{%s} display:{%s}\n", + passport,uid,Name); user = msn_userlist_find_add_user(session->userlist, passport,Name); msn_user_set_uid(user,uid); msn_user_set_type(user,msn_get_user_type(type)); user->list_op |= MSN_LIST_FL_OP; + gaim_debug_info("MsnAB","prepare to free Name...\n"); g_free(Name); + gaim_debug_info("MsnAB","prepare to free passport...\n"); g_free(passport); + gaim_debug_info("MsnAB","prepare to free uid...\n"); g_free(uid); + gaim_debug_info("MsnAB","prepare to free type...\n"); g_free(type); + gaim_debug_misc("MsnAB","prepare for guid parse...\n"); groupIds = xmlnode_get_child(contactInfo,"groupIds"); if(groupIds){ for(guid = xmlnode_get_child(groupIds, "guid");guid; @@ -407,28 +423,6 @@ group_id = g_strdup(MSN_INDIVIDUALS_GROUP_ID); msn_user_add_group_id(user,group_id); g_free(group_id); -#if 0 - char *name,*group_id; - - name = g_strdup(MSN_INDIVIDUALS_GROUP_NAME); - group_id = g_strdup(MSN_INDIVIDUALS_GROUP_ID); - gaim_debug_misc("MsnContact","group_id:%s name:%s\n",group_id,name); - - msn_user_add_group_id(user,group_id); - msn_group_new(session->userlist, group_id, name); - - if (group_id != NULL){ - gaim_debug_misc("MsnContact","group_id:%s name:%s,value:%d\n",group_id,name,*name=='\0'); - if ((gaim_find_group(name)) == NULL){ - GaimGroup *g = gaim_group_new(name); - gaim_blist_add_group(g, NULL); - } - } - - gaim_debug_misc("contact","guid is NULL\n"); - g_free(name); - g_free(group_id); -#endif } } @@ -489,7 +483,7 @@ static void msn_add_contact_read_cb(gpointer data, gint source, GaimInputCondition cond) { - gaim_debug_info("MaYuan","block read done\n"); + gaim_debug_info("MaYuan","add contact read done\n"); } static void @@ -497,14 +491,14 @@ { MsnSoapConn * soapconn = data; - gaim_debug_info("MaYuan","finish unblock written\n"); + gaim_debug_info("MaYuan","finish add contact 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,char *groupId) +msn_add_contact(MsnContact *contact,const char *passport,const char *groupId) { MsnSoapReq *soap_request; char *body = NULL; @@ -559,6 +553,7 @@ char *contact_xml = NULL ; MsnSoapReq *soap_request; + g_return_if_fail(contactId == NULL); 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); @@ -587,7 +582,6 @@ 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*/ @@ -623,7 +617,6 @@ 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*/ @@ -727,6 +720,10 @@ char *body = NULL; g_return_if_fail(session != NULL); + /*if group uid we need to del is NULL, + * we need to delete nothing + */ + g_return_if_fail(guid != NULL); contact = session->contact; gaim_debug_info("MaYuan","msn del group...\n"); Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-08-26 09:23:40 UTC (rev 17042) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-08-26 11:30:40 UTC (rev 17043) @@ -173,12 +173,18 @@ void msn_get_address_book(MsnContact *contact); /*contact SOAP Operation*/ -void msn_add_contact(MsnContact *contact,const char *passport,char *groupId); +void msn_add_contact(MsnContact *contact,const char *passport,const 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); + +/*contact Block/unblock operation*/ +void msn_block_contact(MsnContact *contact,const char* membership_id); +void msn_unblock_contact(MsnContact *contact,const char* passport); + + #endif/* _MSN_CMDPROC_H_*/ Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 09:23:40 UTC (rev 17042) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 11:30:40 UTC (rev 17043) @@ -1401,9 +1401,14 @@ session = gc->proto_data; cmdproc = session->notification->cmdproc; + /*we can't delete the default group*/ + if(!strcmp(group->name,MSN_INDIVIDUALS_GROUP_NAME)|| + !strcmp(group->name,MSN_NON_IM_GROUP_NAME)){ + return ; + } group_id = msn_userlist_find_group_id(session->userlist, group->name); if (group_id != NULL){ - msn_cmdproc_send(cmdproc, "RMG", "%d", group_id); + msn_del_group(session,group_id); } } Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-26 09:23:40 UTC (rev 17042) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.c 2006-08-26 11:30:40 UTC (rev 17043) @@ -27,7 +27,7 @@ #include "soap.h" /*define this Macro to debug soap server action*/ -#define MSN_SOAP_DEBUG +#undef MSN_SOAP_DEBUG /*local function prototype*/ void msn_soap_set_process_step(MsnSoapConn *soapconn, MsnSoapStep step); Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-26 09:23:40 UTC (rev 17042) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-26 11:30:40 UTC (rev 17043) @@ -183,18 +183,24 @@ msn_request_add_group(MsnUserList *userlist, const char *who, const char *old_group_name, const char *new_group_name) { + MsnSession *session; MsnCmdProc *cmdproc; MsnMoveBuddy *data; - cmdproc = userlist->session->notification->cmdproc; + session = userlist->session; + cmdproc = session->notification->cmdproc; data = g_new0(MsnMoveBuddy, 1); data->who = g_strdup(who); - if (old_group_name) + if (old_group_name){ data->old_group_name = g_strdup(old_group_name); + /*delete the old group via SOAP action*/ + msn_del_group(session,old_group_name); + } - /*TODO:add new group via SOAP action*/ + /*add new group via SOAP action*/ + msn_add_group(session, new_group_name); } @@ -687,8 +693,10 @@ 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); +#if 0 msn_notification_add_buddy(userlist->session->notification, list, who, store_name, group_id); +#endif } void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-26 13:03:30
|
Revision: 17045 Author: mayuan2006 Date: 2006-08-26 06:03:11 -0700 (Sat, 26 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17045&view=rev Log Message: ----------- add a MIME encode function,processing utf-8 and base64 encode committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h branches/soc-2006-msnp13/src/protocols/msn/msn.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 12:54:39 UTC (rev 17044) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-26 13:03:11 UTC (rev 17045) @@ -430,10 +430,6 @@ xmlnode_free(node); msn_soap_free_read_buf(contact->soapconn); - - msn_notification_dump_contact(session); - msn_set_psm(session); - msn_session_finish_login(session); } static void @@ -450,6 +446,11 @@ // gaim_debug_misc("msn", "soap contact server Reply: {%s}\n", soapconn->read_buf); msn_parse_addressbook(contact); + + msn_notification_dump_contact(session); + msn_set_psm(session); + msn_session_finish_login(session); + /*free the read buffer*/ msn_soap_free_read_buf(soapconn); } Modified: branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c 2006-08-26 12:54:39 UTC (rev 17044) +++ branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c 2006-08-26 13:03:11 UTC (rev 17045) @@ -146,6 +146,18 @@ g_free(cur); } +/*encode the str to RFC2047 style + * Currently only support the UTF-8 and base64 encode + */ +char * +msn_encode_mime(char *str) +{ + char *base64; + + base64 = gaim_base64_encode(str,strlen(str)); + return g_strdup_printf("=?utf-8?B?%s?=",base64); +} + /* * We need this because we're only supposed to encode spaces in the font * names. gaim_url_encode() isn't acceptable. Modified: branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h 2006-08-26 12:54:39 UTC (rev 17044) +++ branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h 2006-08-26 13:03:11 UTC (rev 17045) @@ -24,6 +24,9 @@ #ifndef _MSN_UTILS_H_ #define _MSN_UTILS_H_ +/*encode the str to RFC2047 style*/ +char * msn_encode_mime(char *str); + /** * Generate the Random GUID */ Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 12:54:39 UTC (rev 17044) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-26 13:03:11 UTC (rev 17045) @@ -893,7 +893,7 @@ gaim_debug_info("MaYuan","prepare to send offline Message\n"); session = gc->proto_data; oim = session->oim; - friendname = g_strdup_printf("=?utf-8?B?Y2xpZW50?="); + friendname = msn_encode_mime(account->username); msn_oim_prep_send_msg_info(oim, gaim_account_get_username(account),friendname,who, message); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-27 08:03:44
|
Revision: 17055 Author: mayuan2006 Date: 2006-08-27 01:03:32 -0700 (Sun, 27 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17055&view=rev Log Message: ----------- fix bug on group management committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/dialog.c branches/soc-2006-msnp13/src/protocols/msn/session.c branches/soc-2006-msnp13/src/protocols/msn/user.c Modified: branches/soc-2006-msnp13/src/protocols/msn/dialog.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/dialog.c 2006-08-27 06:14:12 UTC (rev 17054) +++ branches/soc-2006-msnp13/src/protocols/msn/dialog.c 2006-08-27 08:03:32 UTC (rev 17055) @@ -114,10 +114,11 @@ if (group_name != NULL) group = gaim_find_group(group_name); - if (group != NULL) + if (group != NULL){ buddy = gaim_find_buddy_in_group(account, passport, group); - else + }else{ buddy = gaim_find_buddy(account, passport); + } if (buddy != NULL) gaim_blist_remove_buddy(buddy); Modified: branches/soc-2006-msnp13/src/protocols/msn/session.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/session.c 2006-08-27 06:14:12 UTC (rev 17054) +++ branches/soc-2006-msnp13/src/protocols/msn/session.c 2006-08-27 08:03:32 UTC (rev 17055) @@ -270,7 +270,8 @@ /* The core used to use msn_add_buddy to add all buddies before * being logged in. This no longer happens, so we manually iterate - * over the whole buddy list to identify sync issues. */ + * over the whole buddy list to identify sync issues. + */ for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next){ GaimGroup *group = (GaimGroup *)gnode; const char *group_name = group->name; @@ -299,13 +300,16 @@ const char *group_id; GList *l; + gaim_debug_info("MaYuan","remote user:{%s}\n",b->name); group_id = msn_userlist_find_group_id(remote_user->userlist, group_name); if(group_id == NULL){ continue; } + gaim_debug_info("MaYuan","group_id:{%s}\n",group_id); for (l = remote_user->group_ids; l != NULL; l = l->next){ + gaim_debug_info("MaYuan","l->data:{%s}\n",l->data); if (!g_strcasecmp(group_id ,l->data)){ found = TRUE; break; Modified: branches/soc-2006-msnp13/src/protocols/msn/user.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-27 06:14:12 UTC (rev 17054) +++ branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-27 08:03:32 UTC (rev 17055) @@ -60,8 +60,13 @@ if (user->clientcaps != NULL) g_hash_table_destroy(user->clientcaps); - if (user->group_ids != NULL) + if (user->group_ids != NULL){ + GList *l; + for (l = user->group_ids; l != NULL; l = l->next){ + g_free(l->data); + } g_list_free(user->group_ids); + } if (user->msnobj != NULL) msn_object_destroy(user->msnobj); @@ -265,20 +270,22 @@ GaimBuddy *b; GaimGroup *g; const char *passport; + const char *group_id; const char *group_name; g_return_if_fail(user != NULL); g_return_if_fail(id != NULL); - user->group_ids = g_list_append(user->group_ids,id); + group_id = g_strdup(id); + user->group_ids = g_list_append(user->group_ids,group_id); userlist = user->userlist; account = userlist->session->account; passport = msn_user_get_passport(user); - group_name = msn_userlist_find_group_name(userlist, id); + group_name = msn_userlist_find_group_name(userlist, group_id); - gaim_debug_info("User","group id:%s,name:%s,user:%s\n",id,group_name,passport); + gaim_debug_info("User","group id:%s,name:%s,user:%s\n",group_id,group_name,passport); g = gaim_find_group(group_name); @@ -315,6 +322,7 @@ g_return_if_fail(id != NULL); user->group_ids = g_list_remove(user->group_ids, id); + g_free(id); } void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-27 10:34:28
|
Revision: 17056 Author: mayuan2006 Date: 2006-08-27 03:34:17 -0700 (Sun, 27 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17056&view=rev Log Message: ----------- fix the bug to send Yahoo User offline Message committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/user.c branches/soc-2006-msnp13/src/protocols/msn/user.h Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-27 08:03:32 UTC (rev 17055) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-27 10:34:17 UTC (rev 17056) @@ -824,7 +824,8 @@ account = gaim_connection_get_account(gc); msn_import_html(message, &msgformat, &msgtext); - if(msn_user_is_online(account, who)){ + if(msn_user_is_online(account, who)|| + msn_user_is_yahoo(account, who)){ /*User online,then send Online Instant Message*/ if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) @@ -849,8 +850,9 @@ MsnSwitchBoard *swboard; session = gc->proto_data; - if(strstr(who,"yahoo") != NULL){ - gaim_debug_info("MaYuan","send to Yahoo!\n"); + if(msn_user_is_yahoo(account,who)){ + /*we send the online and offline Message to Yahoo User via UBM*/ + gaim_debug_info("MaYuan","send to Yahoo User\n"); uum_send_msg(session,msg); }else{ gaim_debug_info("MaYuan","send via switchboard\n"); @@ -885,7 +887,7 @@ msn_message_destroy(msg); }else { - /*send Offline Instant Message*/ + /*send Offline Instant Message,only to MSN Passport User*/ MsnSession *session; MsnOim *oim; char *friendname; Modified: branches/soc-2006-msnp13/src/protocols/msn/user.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-27 08:03:32 UTC (rev 17055) +++ branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-08-27 10:34:17 UTC (rev 17056) @@ -315,6 +315,15 @@ return GAIM_BUDDY_IS_ONLINE(buddy); } +/*check to see if user is yahoo user? + * TODO: we need to identify it via contact parse + */ +gboolean +msn_user_is_yahoo(GaimAccount *account ,const char *name) +{ + return (strstr(name,"yahoo") != NULL); +} + void msn_user_remove_group_id(MsnUser *user, const char * id) { Modified: branches/soc-2006-msnp13/src/protocols/msn/user.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-08-27 08:03:32 UTC (rev 17055) +++ branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-08-27 10:34:17 UTC (rev 17056) @@ -301,6 +301,11 @@ gboolean msn_user_is_online(GaimAccount *account, const char *name); +/** + * check to see if user is Yahoo User + */ +gboolean +msn_user_is_yahoo(GaimAccount *account ,const char *name); /*@}*/ #endif /* _MSN_USER_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-27 11:45:16
|
Revision: 17057 Author: mayuan2006 Date: 2006-08-27 04:45:02 -0700 (Sun, 27 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17057&view=rev Log Message: ----------- fix contact delete bug: when Send ADL,NS disconnect.<fix the add/delte XML format> committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/README branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/userlist.c Modified: branches/soc-2006-msnp13/src/protocols/msn/README =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/README 2006-08-27 10:34:17 UTC (rev 17056) +++ branches/soc-2006-msnp13/src/protocols/msn/README 2006-08-27 11:45:02 UTC (rev 17057) @@ -30,8 +30,12 @@ * Windows Live ID authentication. * Offline Instant Message -Now can send and receive the Offline Instant Message. +Now can send and receive the Offline Instant Message to MSN user and Yahoo User. +*contact management +Can add/delete Contact +Can add/delete Group + * Communicate with Yahoo User Can send/receive Message/Nudge to Yahoo User. Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-27 10:34:17 UTC (rev 17056) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-27 11:45:02 UTC (rev 17057) @@ -554,7 +554,7 @@ char *contact_xml = NULL ; MsnSoapReq *soap_request; - g_return_if_fail(contactId == NULL); + g_return_if_fail(contactId != NULL); 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); Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-27 10:34:17 UTC (rev 17056) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-27 11:45:02 UTC (rev 17057) @@ -1739,15 +1739,17 @@ adl_node = xmlnode_new("ml"); adl_node->child = NULL; - xmlnode_set_attrib(adl_node, "l", "1"); - msn_add_contact_xml(adl_node,who,3,1); + msn_add_contact_xml(adl_node,who,1,1); payload = xmlnode_to_str(adl_node,&payload_len); xmlnode_free(adl_node); - - msn_notification_post_adl(notification->servconn->cmdproc, + if(msn_user_is_yahoo(notification->session->account,who)){ + msn_notification_fqy_yahoo(notification->session, who); + }else{ + msn_notification_post_adl(notification->servconn->cmdproc, payload,payload_len); + } } void @@ -1764,9 +1766,8 @@ 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); + msn_add_contact_xml(rml_node,who,1,1); payload = xmlnode_to_str(rml_node,&payload_len); xmlnode_free(rml_node); Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-27 10:34:17 UTC (rev 17056) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-27 11:45:02 UTC (rev 17057) @@ -610,6 +610,8 @@ user = msn_userlist_find_user(userlist, who); + g_return_if_fail(user != NULL); + /*delete the contact from address book via soap action*/ msn_delete_contact(userlist->session->contact,user->uid); @@ -636,7 +638,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*/ @@ -693,7 +695,7 @@ 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); -#if 0 +#if 1 msn_notification_add_buddy(userlist->session->notification, list, who, store_name, group_id); #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-09-03 14:42:45
|
Revision: 17138 http://svn.sourceforge.net/gaim/?rev=17138&view=rev Author: mayuan2006 Date: 2006-09-03 07:42:38 -0700 (Sun, 03 Sep 2006) Log Message: ----------- fix the bug of oim delete committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/command.c branches/soc-2006-msnp13/src/protocols/msn/group.c branches/soc-2006-msnp13/src/protocols/msn/oim.c branches/soc-2006-msnp13/src/protocols/msn/soap.h Modified: branches/soc-2006-msnp13/src/protocols/msn/command.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/command.c 2006-09-03 08:01:12 UTC (rev 17137) +++ branches/soc-2006-msnp13/src/protocols/msn/command.c 2006-09-03 14:42:38 UTC (rev 17138) @@ -24,6 +24,10 @@ #include "msn.h" #include "command.h" +/*local Function prototype*/ +int msn_get_payload_position(char *str); +int msn_set_payload_len(MsnCommand *cmd); + static gboolean is_num(char *str) { Modified: branches/soc-2006-msnp13/src/protocols/msn/group.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/group.c 2006-09-03 08:01:12 UTC (rev 17137) +++ branches/soc-2006-msnp13/src/protocols/msn/group.c 2006-09-03 14:42:38 UTC (rev 17138) @@ -76,7 +76,7 @@ char* msn_group_get_id(const MsnGroup *group) { - g_return_val_if_fail(group != NULL, -1); + g_return_val_if_fail(group != NULL, NULL); return group->id; } Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-09-03 08:01:12 UTC (rev 17137) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-09-03 14:42:38 UTC (rev 17138) @@ -425,6 +425,7 @@ msg_id = oim->oim_list->data; msn_oim_post_delete_msg(oim,msg_id); oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); + g_free(msg_id); } g_free(passport); @@ -503,7 +504,7 @@ oim->oim_list = g_list_append(oim->oim_list,msgid); msn_oim_post_single_get_msg(oim,msgid); g_free(passport); - g_free(msgid); +// g_free(msgid); g_free(rTime); g_free(nickname); } Modified: branches/soc-2006-msnp13/src/protocols/msn/soap.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/soap.h 2006-09-03 08:01:12 UTC (rev 17137) +++ branches/soc-2006-msnp13/src/protocols/msn/soap.h 2006-09-03 14:42:38 UTC (rev 17138) @@ -123,6 +123,7 @@ /*init a soap conneciton */ void msn_soap_init(MsnSoapConn *soapconn,char * host,int ssl,GaimSslInputFunction connect_cb,GaimSslErrorFunction error_cb); void msn_soap_connect(MsnSoapConn *soapconn); +void msn_soap_close(MsnSoapConn *soapconn); /*write to soap*/ void msn_soap_write(MsnSoapConn * soapconn, char *write_buf, GaimInputFunction written_cb); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-09-06 16:14:28
|
Revision: 17181 http://svn.sourceforge.net/gaim/?rev=17181&view=rev Author: mayuan2006 Date: 2006-09-06 09:14:22 -0700 (Wed, 06 Sep 2006) Log Message: ----------- add PSM in tooltips fix oim bug in windows committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/oim.c Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-09-06 10:06:58 UTC (rev 17180) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-09-06 16:14:22 UTC (rev 17181) @@ -572,6 +572,12 @@ if (gaim_presence_is_online(presence)) { + char *psm; + psm = msn_status_text(buddy); + if (psm) + g_string_append_printf(str, _("\n<b>%s:</b> %s"), _("Psm"),psm); + g_free(psm); + g_string_append_printf(str, _("\n<b>%s:</b> %s"), _("Status"), gaim_presence_is_idle(presence) ? _("Idle") : gaim_status_get_name(status)); @@ -592,8 +598,6 @@ (user->list_op & (1 << MSN_LIST_BL)) ? _("Yes") : _("No")); } - - gaim_debug_info("MaYuan","tooltip string:{%s}\n",str); } static GList * Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-09-06 10:06:58 UTC (rev 17180) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-09-06 16:14:22 UTC (rev 17181) @@ -491,15 +491,20 @@ mdNode = xmlnode_from_str(xmlmsg, strlen(xmlmsg)); for(mNode = xmlnode_get_child(mdNode, "M"); mNode; mNode = xmlnode_get_next_twin(mNode)){ + /*email Node*/ ENode = xmlnode_get_child(mNode,"E"); passport = xmlnode_get_data(ENode); + /*Index */ INode = xmlnode_get_child(mNode,"I"); msgid = xmlnode_get_data(INode); - rtNode = xmlnode_get_child(mNode,"RT"); - rTime = xmlnode_get_data(rtNode); + /*Nickname*/ nNode = xmlnode_get_child(mNode,"N"); nickname = xmlnode_get_data(nNode); - gaim_debug_info("MaYuan","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); + /*receive time*/ + rtNode = xmlnode_get_child(mNode,"RT"); + if(rtNode != NULL) + rTime = xmlnode_get_data(rtNode); +/* gaim_debug_info("MaYuan","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime);*/ oim->oim_list = g_list_append(oim->oim_list,msgid); msn_oim_post_single_get_msg(oim,msgid); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-09-08 16:02:25
|
Revision: 17192 http://svn.sourceforge.net/gaim/?rev=17192&view=rev Author: mayuan2006 Date: 2006-09-08 09:02:00 -0700 (Fri, 08 Sep 2006) Log Message: ----------- trial of new Login.live.com passport login procedure Not stable. committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/nexus.c branches/soc-2006-msnp13/src/protocols/msn/nexus.h Modified: branches/soc-2006-msnp13/src/protocols/msn/nexus.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/nexus.c 2006-09-08 14:43:34 UTC (rev 17191) +++ branches/soc-2006-msnp13/src/protocols/msn/nexus.c 2006-09-08 16:02:00 UTC (rev 17192) @@ -26,6 +26,8 @@ #include "nexus.h" #include "notification.h" +#define NEXUS_LOGIN_TWN 1 + /*Local Function Prototype*/ static void nexus_login_connect_cb(gpointer data, GaimSslConnection *gsc,GaimInputCondition cond); @@ -95,15 +97,21 @@ session = nexus->session; g_return_if_fail(session != NULL); -// gaim_debug_misc("msn", "TWN Server Reply: {%s}\n", soapconn->read_buf); + gaim_debug_misc("msn", "TWN Server Reply: {%s}\n", soapconn->read_buf); /*reply OK, we should process the SOAP body*/ gaim_debug_info("MaYuan","Windows Live ID Reply OK!\n"); //TODO: we should parse it using XML +#ifdef NEXUS_LOGIN_TWN base = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_START_TOKEN); base += strlen(TWN_START_TOKEN); c = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_END_TOKEN); +#else + base = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_LIVE_START_TOKEN); + base += strlen(TWN_LIVE_START_TOKEN); + c = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_LIVE_END_TOKEN); +#endif login_params = g_strndup(base, c - base); // gaim_debug_info("msn", "TWN Cert: {%s}\n", login_params); @@ -166,7 +174,12 @@ char *ru,*lc,*id,*tw,*ct,*kpp,*kv,*ver,*rn,*tpf; char *fs0,*fs; char *username, *password; - char *request_str, *head, *tail,*challenge_str; + char *request_str, *head, *tail; +#ifdef NEXUS_LOGIN_TWN + char *challenge_str; +#else + char *rst1_str,*rst2_str,*rst3_str; +#endif gaim_debug_info("MaYuan","starting Windows Live ID authentication\n"); @@ -222,14 +235,32 @@ }else{ fs = g_strdup("1"); } + +#ifdef NEXUS_LOGIN_TWN challenge_str = g_strdup_printf( "lc=%s&id=%s&tw=%s&fs=%s&ru=%s&ct=%s&kpp=%s&kv=%s&ver=%s&rn=%s&tpf=%s\r\n", lc,id,tw,fs,ru,ct,kpp,kv,ver,rn,tpf ); - g_free(fs); /*build the SOAP windows Live ID XML body */ tail = g_strdup_printf(TWN_ENVELOP_TEMPLATE,username,password,challenge_str ); + g_free(challenge_str); +#else + rst1_str = g_strdup_printf( + "id=%s&tw=%s&fs=%s&kpp=%s&kv=%s&ver=%s&rn=%s", + id,tw,fs,kpp,kv,ver,rn + ); + rst2_str = g_strdup_printf( + "fs=%s&id=%s&kv=%s&rn=%s&tw=%s&ver=%s", + fs,id,kv,rn,tw,ver + ); + rst3_str = g_strdup_printf("id=%s",id); + tail = g_strdup_printf(TWN_LIVE_ENVELOP_TEMPLATE,username,password,rst1_str,rst2_str,rst3_str); + g_free(rst1_str); + g_free(rst2_str); + g_free(rst3_str); +#endif + g_free(fs); soapconn->login_path = g_strdup(TWN_POST_URL); head = g_strdup_printf( @@ -243,7 +274,7 @@ soapconn->login_path,soapconn->login_host,(int)strlen(tail)); request_str = g_strdup_printf("%s%s", head,tail); -// gaim_debug_misc("msn", "TWN Sending: {%s}\n", request_str); + gaim_debug_misc("msn", "TWN Sending: {%s}\n", request_str); g_free(head); g_free(tail); Modified: branches/soc-2006-msnp13/src/protocols/msn/nexus.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/nexus.h 2006-09-08 14:43:34 UTC (rev 17191) +++ branches/soc-2006-msnp13/src/protocols/msn/nexus.h 2006-09-08 16:02:00 UTC (rev 17192) @@ -26,7 +26,8 @@ #include "soap.h" -#define MSN_TWN_SERVER "loginnet.passport.com" +/*#define MSN_TWN_SERVER "loginnet.passport.com"*/ +#define MSN_TWN_SERVER "login.live.com" #define TWN_START_TOKEN "<wsse:BinarySecurityToken Id=\"PPToken1\">" #define TWN_END_TOKEN "</wsse:BinarySecurityToken>" @@ -48,7 +49,8 @@ "<wsse:Password>%s</wsse:Password>"\ "</wsse:UsernameToken>"\ "</wsse:Security>"\ - "</Header><Body>"\ + "</Header>"\ + "<Body>"\ "<ps:RequestMultipleSecurityTokens xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\" Id=\"RSTS\">"\ "<wst:RequestSecurityToken Id=\"RST0\">"\ "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ @@ -72,6 +74,66 @@ "</Body>"\ "</Envelope>" +#define TWN_LIVE_START_TOKEN "<wsse:BinarySecurityToken Id=\"PPToken1\">" +#define TWN_LIVE_END_TOKEN "</wsse:BinarySecurityToken>" +#define TWN_LIVE_ENVELOP_TEMPLATE "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"\ +"<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2003/06/secext\" xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\" xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2002/12/policy\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/03/addressing\" xmlns:wssc=\"http://schemas.xmlsoap.org/ws/2004/04/sc\" xmlns:wst=\"http://schemas.xmlsoap.org/ws/2004/04/trust\">"\ + "<Header>"\ + "<ps:AuthInfo xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\" Id=\"PPAuthInfo\">"\ + "<ps:HostingApp>{7108E71A-9926-4FCB-BCC9-9A9D3F32E423}</ps:HostingApp>"\ + "<ps:BinaryVersion>4</ps:BinaryVersion>"\ + "<ps:UIVersion>1</ps:UIVersion>"\ + "<ps:Cookies></ps:Cookies>"\ + "<ps:RequestParams>AQAAAAIAAABsYwQAAAAyMDUy</ps:RequestParams>"\ + "</ps:AuthInfo>"\ + "<wsse:Security>"\ + "<wsse:UsernameToken Id=\"user\">"\ + "<wsse:Username>%s</wsse:Username>"\ + "<wsse:Password>%s</wsse:Password>"\ + "</wsse:UsernameToken>"\ + "</wsse:Security>"\ + "</Header>"\ + "<Body>"\ + "<ps:RequestMultipleSecurityTokens xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\" Id=\"RSTS\">"\ + "<wst:RequestSecurityToken Id=\"RST0\">"\ + "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ + "<wsp:AppliesTo>"\ + "<wsa:EndpointReference>"\ + "<wsa:Address>http://Passport.NET/tb</wsa:Address>"\ + "</wsa:EndpointReference>"\ + "</wsp:AppliesTo>"\ + "</wst:RequestSecurityToken>"\ + "<wst:RequestSecurityToken Id=\"RST1\">"\ + "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ + "<wsp:AppliesTo>"\ + "<wsa:EndpointReference>"\ + "<wsa:Address>messenger.msn.com</wsa:Address>"\ + "</wsa:EndpointReference>"\ + "</wsp:AppliesTo>"\ + "<wsse:PolicyReference URI=\"%s\"></wsse:PolicyReference>"\ + "</wst:RequestSecurityToken>"\ + "<wst:RequestSecurityToken Id=\"RST2\">"\ + "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ + "<wsp:AppliesTo>"\ + "<wsa:EndpointReference>"\ + "<wsa:Address>contacts.msn.com</wsa:Address>"\ + "</wsa:EndpointReference>"\ + "</wsp:AppliesTo>"\ + "<wsse:PolicyReference URI=\"?%s\"></wsse:PolicyReference>"\ + " </wst:RequestSecurityToken>"\ + "<wst:RequestSecurityToken Id=\"RST3\">"\ + "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ + "<wsp:AppliesTo>"\ + "<wsa:EndpointReference>"\ + "<wsa:Address>voice.messenger.msn.com</wsa:Address>"\ + "</wsa:EndpointReference>"\ + " </wsp:AppliesTo>"\ + "<wsse:PolicyReference URI=\"?%s\"></wsse:PolicyReference>"\ + "</wst:RequestSecurityToken>"\ + "</ps:RequestMultipleSecurityTokens>"\ + "</Body>"\ +"</Envelope>" + typedef struct _MsnNexus MsnNexus; struct _MsnNexus This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-09-08 16:30:08
|
Revision: 17193 http://svn.sourceforge.net/gaim/?rev=17193&view=rev Author: mayuan2006 Date: 2006-09-08 09:29:52 -0700 (Fri, 08 Sep 2006) Log Message: ----------- fix the bug of nexus Now New way ok! committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/nexus.c branches/soc-2006-msnp13/src/protocols/msn/nexus.h Modified: branches/soc-2006-msnp13/src/protocols/msn/nexus.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/nexus.c 2006-09-08 16:02:00 UTC (rev 17192) +++ branches/soc-2006-msnp13/src/protocols/msn/nexus.c 2006-09-08 16:29:52 UTC (rev 17193) @@ -26,7 +26,7 @@ #include "nexus.h" #include "notification.h" -#define NEXUS_LOGIN_TWN 1 +#undef NEXUS_LOGIN_TWN /*Local Function Prototype*/ static void nexus_login_connect_cb(gpointer data, GaimSslConnection *gsc,GaimInputCondition cond); Modified: branches/soc-2006-msnp13/src/protocols/msn/nexus.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/nexus.h 2006-09-08 16:02:00 UTC (rev 17192) +++ branches/soc-2006-msnp13/src/protocols/msn/nexus.h 2006-09-08 16:29:52 UTC (rev 17193) @@ -110,7 +110,7 @@ "<wsa:Address>messenger.msn.com</wsa:Address>"\ "</wsa:EndpointReference>"\ "</wsp:AppliesTo>"\ - "<wsse:PolicyReference URI=\"%s\"></wsse:PolicyReference>"\ + "<wsse:PolicyReference URI=\"?%s\"></wsse:PolicyReference>"\ "</wst:RequestSecurityToken>"\ "<wst:RequestSecurityToken Id=\"RST2\">"\ "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-09-16 18:27:35
|
Revision: 17288 http://svn.sourceforge.net/gaim/?rev=17288&view=rev Author: mayuan2006 Date: 2006-09-16 11:27:25 -0700 (Sat, 16 Sep 2006) Log Message: ----------- Update the contact update soap request method, Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/contact.h Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-09-16 05:38:33 UTC (rev 17287) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-09-16 18:27:25 UTC (rev 17288) @@ -585,6 +585,43 @@ } static void +msn_update_contact_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","update contact read done\n"); +} + +static void +msn_update_contact_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","update contact written\n"); + soapconn->read_cb = msn_update_contact_read_cb; +// msn_soap_read_cb(data,source,cond); +} + +/*update a contact's Nickname*/ +void +msn_update_contact(MsnContact *contact,const char* nickname) +{ + MsnSoapReq *soap_request; + char *body = NULL; + + gaim_debug_info("MaYuan","msn unblock a contact...\n"); + + body = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE,nickname); + /*build SOAP and POST it*/ + soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, + MSN_ADDRESS_BOOK_POST_URL,MSN_CONTACT_UPDATE_SOAP_ACTION, + body, + msn_update_contact_read_cb, + msn_update_contact_written_cb); + msn_soap_post(contact->soapconn,soap_request,msn_contact_connect_init); + + g_free(body); +} + +static void msn_block_read_cb(gpointer data, gint source, GaimInputCondition cond) { gaim_debug_info("MaYuan","block read done\n"); Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-09-16 05:38:33 UTC (rev 17287) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-09-16 18:27:25 UTC (rev 17288) @@ -142,6 +142,36 @@ #define MSN_CONTACT_UNBLOCK_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/DeleteMember" #define MSN_UNBLOCK_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>BlockUnblock</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><DeleteMember xmlns=\"http://www.msn.com/webservices/AddressBook\"><serviceHandle><Id>0</Id><Type>Messenger</Type><ForeignId></ForeignId></serviceHandle><memberships><Membership><MemberRole>Block</MemberRole><Members>%s</Members></Membership></memberships></DeleteMember></soap:Body></soap:Envelope>" +/*Update Contact Nickname*/ +#define MSN_CONTACT_UPDATE_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactUpdate" +#define MSN_CONTACT_UPDATE_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>Timer</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "</ABAuthHeader>"\ + "</soap:Header>"\ + "<soap:Body>"\ + "<ABContactUpdate xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<contacts>"\ + "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<contactInfo>"\ + "<contactType>Me</contactType>"\ + "<displayName>%s</displayName>"\ + "</contactInfo>"\ + "<propertiesChanged>DisplayName</propertiesChanged>"\ + "</Contact>"\ + "</contacts>"\ + "</ABContactUpdate>"\ + "</soap:Body>"\ +"</soap:Envelope> " + /******************************************************* * Group SOAP Action *******************************************************/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-10-14 20:01:12
|
Revision: 17481 http://svn.sourceforge.net/gaim/?rev=17481&view=rev Author: mayuan2006 Date: 2006-10-14 13:00:56 -0700 (Sat, 14 Oct 2006) Log Message: ----------- gradually got SOAP contact list and address book from Server. Cache the info in blist.xml Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/contact.h branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/session.c branches/soc-2006-msnp13/src/protocols/msn/session.h branches/soc-2006-msnp13/src/protocols/msn/user.c branches/soc-2006-msnp13/src/protocols/msn/user.h branches/soc-2006-msnp13/src/protocols/msn/userlist.c branches/soc-2006-msnp13/src/protocols/msn/userlist.h Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-10-14 20:00:56 UTC (rev 17481) @@ -85,7 +85,7 @@ g_return_if_fail(session != NULL); /*login ok!We can retrieve the contact list*/ -// msn_get_contact_list(contact); +// msn_get_contact_list(contact,NULL); } /*get MSN member role utility*/ @@ -126,38 +126,45 @@ MsnSession * session; int list_op =0; char * passport; - xmlnode * node,*body,*response,*result,*services,*service,*memberships; + xmlnode * node,*body,*response,*result,*services; + xmlnode *service,*memberships; xmlnode *LastChangeNode; xmlnode *membershipnode,*members,*member,*passportNode; - char *lastchange; + char *LastChangeStr; session = contact->session; - gaim_debug_misc("xml","parse contact list:{%s}\nsize:%d\n",contact->soapconn->body,contact->soapconn->body_len); + gaim_debug_misc("MSNCL","parse contact list:{%s}\nsize:%d\n",contact->soapconn->body,contact->soapconn->body_len); node = xmlnode_from_str(contact->soapconn->body, contact->soapconn->body_len); if(node == NULL){ - gaim_debug_misc("xml","parse contact from str err!\n"); + gaim_debug_misc("MSNCL","parse contact from str err!\n"); return; } - gaim_debug_misc("xml","node{%p},name:%s,child:%s,last:%s\n",node,node->name,node->child->name,node->lastchild->name); + gaim_debug_misc("MSNCL","node{%p},name:%s,child:%s,last:%s\n",node,node->name,node->child->name,node->lastchild->name); body = xmlnode_get_child(node,"Body"); - gaim_debug_misc("xml","body{%p},name:%s\n",body,body->name); + gaim_debug_misc("MSNCL","body{%p},name:%s\n",body,body->name); response = xmlnode_get_child(body,"FindMembershipResponse"); - gaim_debug_misc("xml","response{%p},name:%s\n",response,response->name); + gaim_debug_misc("MSNCL","response{%p},name:%s\n",response,response->name); result =xmlnode_get_child(response,"FindMembershipResult"); - gaim_debug_misc("xml","result{%p},name:%s\n",result,result->name); + if(result == NULL){ + gaim_debug_misc("MSNCL","receive No Update!\n"); + return; + } + gaim_debug_misc("MSNCL","result{%p},name:%s\n",result,result->name); services =xmlnode_get_child(result,"Services"); - gaim_debug_misc("xml","services{%p},name:%s\n",services,services->name); + gaim_debug_misc("MSNCL","services{%p},name:%s\n",services,services->name); service =xmlnode_get_child(services,"Service"); - gaim_debug_misc("xml","service{%p},name:%s\n",service,service->name); + gaim_debug_misc("MSNCL","service{%p},name:%s\n",service,service->name); /*Last Change Node*/ LastChangeNode = xmlnode_get_child(service,"LastChange"); - lastchange = xmlnode_get_data(LastChangeNode); - gaim_debug_misc("MSNContact","LastChangeNode %s\n",lastchange); + LastChangeStr = xmlnode_get_data(LastChangeNode); + gaim_debug_misc("MSNCL","LastChangeNode0 %s\n",LastChangeStr); + gaim_blist_node_set_string(msn_session_get_bnode(contact->session),"CLLastChange",LastChangeStr); + gaim_debug_misc("MSNCL","LastChangeNode %s\n",LastChangeStr); memberships =xmlnode_get_child(service,"Memberships"); - gaim_debug_misc("xml","memberships{%p},name:%s\n",memberships,memberships->name); + gaim_debug_misc("MSNCL","memberships{%p},name:%s\n",memberships,memberships->name); for(membershipnode = xmlnode_get_child(memberships, "Membership"); membershipnode; membershipnode = xmlnode_get_next_twin(membershipnode)){ xmlnode *roleNode; @@ -165,7 +172,7 @@ roleNode = xmlnode_get_child(membershipnode,"MemberRole"); role=xmlnode_get_data(roleNode); list_op = msn_get_memberrole(role); - gaim_debug_misc("memberrole","role:%s,list_op:%d\n",role,list_op); + gaim_debug_misc("MSNCL","MemberRole role:%s,list_op:%d\n",role,list_op); g_free(role); members = xmlnode_get_child(membershipnode,"Members"); for(member = xmlnode_get_child(members, "Member"); member; @@ -174,13 +181,13 @@ xmlnode * typeNode; char * type; - gaim_debug_misc("MaYuan","type:%s\n",xmlnode_get_attrib(member,"type")); + gaim_debug_misc("MSNCL","type:%s\n",xmlnode_get_attrib(member,"type")); if(!g_strcasecmp(xmlnode_get_attrib(member,"type"),"PassportMember")){ passportNode = xmlnode_get_child(member,"PassportName"); passport = xmlnode_get_data(passportNode); typeNode = xmlnode_get_child(member,"Type"); type = xmlnode_get_data(typeNode); - gaim_debug_misc("Passport","name:%s,type:%s\n",passport,type); + gaim_debug_misc("MSNCL","Passport name:%s,type:%s\n",passport,type); g_free(type); user = msn_userlist_find_add_user(session->userlist,passport,NULL); @@ -194,7 +201,7 @@ emailNode = xmlnode_get_child(member,"Email"); passport = xmlnode_get_data(emailNode); - gaim_debug_info("Email","name:%s,list_op:%d\n",passport,list_op); + gaim_debug_info("MSNCL","Email Member :name:%s,list_op:%d\n",passport,list_op); user = msn_userlist_find_add_user(session->userlist,passport,NULL); msn_got_lst_user(session,user,list_op,NULL); g_free(passport); @@ -211,6 +218,8 @@ MsnSoapConn * soapconn = data; MsnContact *contact; MsnSession *session; + const char * abLastChange; + const char * dynamicItemLastChange; contact = soapconn->parent; g_return_if_fail(contact != NULL); @@ -224,7 +233,9 @@ /*free the read buffer*/ msn_soap_free_read_buf(soapconn); - msn_get_address_book(contact); + abLastChange = gaim_blist_node_get_string(msn_session_get_bnode(contact->session),"ablastChange"); + dynamicItemLastChange = gaim_blist_node_get_string(msn_session_get_bnode(contact->session),"dynamicItemLastChange"); + msn_get_address_book(contact,abLastChange,dynamicItemLastChange); } static void @@ -237,18 +248,30 @@ // msn_soap_read_cb(data,source,cond); } +/*SOAP get contact list*/ void -msn_get_contact_list(MsnContact * contact) +msn_get_contact_list(MsnContact * contact,char * update_time) { MsnSoapReq *soap_request; - + char *body = NULL; + char * update_str; + gaim_debug_info("MaYuan","Getting Contact List...\n"); + if(update_time != NULL){ + gaim_debug_info("MSNCL","last update time:{%s}\n",update_time); + update_str = g_strdup_printf(MSN_GET_CONTACT_UPDATE_XML,update_time); + }else{ + update_str = g_strdup(""); + } + body = g_strdup_printf(MSN_GET_CONTACT_TEMPLATE,update_str); soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, MSN_GET_CONTACT_POST_URL,MSN_GET_CONTACT_SOAP_ACTION, - MSN_GET_CONTACT_TEMPLATE, + body, msn_get_contact_list_cb, msn_get_contact_written_cb); msn_soap_post(contact->soapconn,soap_request,msn_contact_connect_init); + g_free(update_str); + g_free(body); } static void @@ -258,8 +281,7 @@ xmlnode * node,*body,*response,*result; xmlnode *groups,*group,*groupname,*groupId,*groupInfo; xmlnode *contacts,*contactNode,*contactId,*contactInfo,*contactType,*passportName,*displayName,*groupIds,*guid; - xmlnode *abNode,*LastChangeNode; - char *lastchange; + xmlnode *abNode; char *group_name,*group_id; session = contact->session; @@ -276,6 +298,10 @@ response = xmlnode_get_child(body,"ABFindAllResponse"); gaim_debug_misc("xml","response{%p},name:%s\n",response,response->name); result =xmlnode_get_child(response,"ABFindAllResult"); + if(result == NULL){ + gaim_debug_misc("MSNAB","receive no address book update\n"); + return; + } gaim_debug_misc("xml","result{%p},name:%s\n",result,result->name); /*Process Group List*/ @@ -298,6 +324,7 @@ gaim_debug_misc("MsnAB","group_id:%s name:%s\n",group_id,group_name); if ((gaim_find_group(group_name)) == NULL){ GaimGroup *g = gaim_group_new(group_name); + gaim_blist_node_set_string(&(g->node),"groupId",group_id); gaim_blist_add_group(g, NULL); } g_free(group_id); @@ -437,9 +464,18 @@ abNode =xmlnode_get_child(result,"ab"); if(abNode != NULL){ + xmlnode *LastChangeNode, *DynamicItemLastChangedNode; + char *lastchange, *dynamicChange; + LastChangeNode = xmlnode_get_child(abNode,"lastChange"); lastchange = xmlnode_get_data(LastChangeNode); gaim_debug_info("MsnAB"," lastchanged Time:{%s}\n",lastchange); + gaim_blist_node_set_string(msn_session_get_bnode(contact->session),"ablastChange",lastchange); + + DynamicItemLastChangedNode = xmlnode_get_child(abNode,"DynamicItemLastChanged"); + dynamicChange = xmlnode_get_data(DynamicItemLastChangedNode); + gaim_debug_info("MsnAB"," DynamicItemLastChanged :{%s}\n",dynamicChange); + gaim_blist_node_set_string(msn_session_get_bnode(contact->session),"DynamicItemLastChanged",lastchange); } xmlnode_free(node); @@ -481,18 +517,36 @@ /*get the address book*/ void -msn_get_address_book(MsnContact *contact) +msn_get_address_book(MsnContact *contact,char * LastChanged, char * dynamicItemLastChange) { MsnSoapReq *soap_request; + char *body = NULL; + char *ab_update_str,*update_str; gaim_debug_info("MaYuan","msn_get_address_book()...\n"); /*build SOAP and POST it*/ + if(LastChanged != NULL){ + ab_update_str = g_strdup_printf(MSN_GET_ADDRESS_UPDATE_XML,LastChanged); + }else{ + ab_update_str = g_strdup(""); + } + if(dynamicItemLastChange != NULL){ + update_str = g_strdup_printf(MSN_GET_ADDRESS_UPDATE_XML, + ab_update_str,dynamicItemLastChange); + }else{ + update_str = g_strdup(ab_update_str); + } + g_free(ab_update_str); + + body = g_strdup_printf(MSN_GET_ADDRESS_TEMPLATE,update_str); soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL,MSN_GET_ADDRESS_SOAP_ACTION, - MSN_GET_ADDRESS_TEMPLATE, + body, msn_get_address_cb, msn_address_written_cb); msn_soap_post(contact->soapconn,soap_request,msn_contact_connect_init); + g_free(update_str); + g_free(body); } static void Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-10-14 20:00:56 UTC (rev 17481) @@ -30,6 +30,9 @@ /*get contact list soap request template*/ #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 "<View>Full</View>"\ + "<deltasOnly>true</deltasOnly>"\ + "<lastChange>%s</lastChange>" #define MSN_GET_CONTACT_TEMPLATE "<?xml version='1.0' encoding='utf-8'?>"\ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ "<soap:Header xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ @@ -53,6 +56,7 @@ "<ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Profile</ServiceType>"\ "</Types>"\ "</serviceFilter>"\ + "%s"\ "</FindMembership>"\ "</soap:Body>"\ "</soap:Envelope>" @@ -63,6 +67,15 @@ #define MSN_ADDRESS_BOOK_POST_URL "/abservice/abservice.asmx" /*get addressbook soap request template*/ #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 "<deltasOnly>true</deltasOnly>"\ + "<lastChange>%s</lastChange>" + +#define MSN_GET_GLEAM_UPDATE_XML \ + "%s"\ + "<dynamicItemView>Gleam</dynamicItemView>"\ + "<dynamicItemLastChange>%s</dynamicItemLastChange>" + #define MSN_GET_ADDRESS_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>"\ @@ -79,6 +92,7 @@ "<ABFindAll xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ "<abId>00000000-0000-0000-0000-000000000000</abId>"\ "<abView>Full</abView>"\ + "%s"\ "</ABFindAll>"\ "</soap:Body>"\ "</soap:Envelope>" @@ -199,8 +213,8 @@ void msn_contact_destroy(MsnContact *contact); void msn_contact_connect(MsnContact *contact); -void msn_get_contact_list(MsnContact * contact); -void msn_get_address_book(MsnContact *contact); +void msn_get_contact_list(MsnContact * contact,char * update); +void msn_get_address_book(MsnContact *contact,char * update, char * gupdate); /*contact SOAP Operation*/ void msn_add_contact(MsnContact *contact,const char *passport,const char *groupId); Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-10-14 20:00:56 UTC (rev 17481) @@ -1450,6 +1450,7 @@ { MsnSession *session; const char *value; + const char *clLastChange; gaim_debug_info("MaYuan","profile_msg... \n"); session = cmdproc->session; @@ -1495,8 +1496,12 @@ session->passport_info.sl = atol(value); /*starting retrieve the contact list*/ + msn_userlist_load(session); + + msn_session_set_bnode(session); session->contact = msn_contact_new(session); - msn_get_contact_list(session->contact); + clLastChange = gaim_blist_node_get_string(msn_session_get_bnode(session),"CLLastChange"); + msn_get_contact_list(session->contact,clLastChange); // msn_contact_connect(session->contact); } Modified: branches/soc-2006-msnp13/src/protocols/msn/session.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/session.c 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/session.c 2006-10-14 20:00:56 UTC (rev 17481) @@ -42,7 +42,8 @@ session->user = msn_user_new(session->userlist, gaim_account_get_username(account), NULL); - + session->bnode = NULL; + /*if you want to chat with Yahoo Messenger*/ //session->protocol_ver = WLM_YAHOO_PROT_VER; session->protocol_ver = WLM_PROT_VER; @@ -260,6 +261,47 @@ return swboard; } +/*setup the bnode, for MSN SOAP contact/address book op*/ +void +msn_session_set_bnode(MsnSession *session) +{ + GaimBlistNode *gnode, *cnode, *bnode; + GaimConnection *gc = gaim_account_get_connection(session->account); + + g_return_if_fail(gc != NULL); + + for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next){ + if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) + continue; + for(cnode = gnode->child; cnode; cnode = cnode->next) { + if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) + continue; + for(bnode = cnode->child; bnode; bnode = bnode->next) { + GaimBuddy *b; + if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) + continue; + b = (GaimBuddy *)bnode; + if(b->account == gc->account){ + session->bnode = bnode; + return; + } + } + } + } + session->bnode = NULL; +} + +/*get bnode*/ +GaimBlistNode * +msn_session_get_bnode(MsnSession *session) +{ +#if 1 + return session->bnode; +#else + return gaim_get_blist()->root; +#endif +} + static void msn_session_sync_users(MsnSession *session) { Modified: branches/soc-2006-msnp13/src/protocols/msn/session.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/session.h 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/session.h 2006-10-14 20:00:56 UTC (rev 17481) @@ -111,7 +111,10 @@ /*psm info*/ char *psm; - + + /*first blist contact node*/ + GaimBlistNode *bnode; + struct { /*t and p, get via USR TWN*/ Modified: branches/soc-2006-msnp13/src/protocols/msn/user.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/user.c 2006-10-14 20:00:56 UTC (rev 17481) @@ -186,6 +186,13 @@ } void +msn_user_set_op(MsnUser *user,int list_op) +{ + g_return_if_fail(list_op != NULL); + user->list_op |= list_op; +} + +void msn_user_set_buddy_icon(MsnUser *user, const char *filename) { struct stat st; @@ -295,14 +302,13 @@ } b = gaim_find_buddy_in_group(account, passport, g); - if (b == NULL){ b = gaim_buddy_new(account, passport, NULL); - gaim_blist_add_buddy(b, NULL, g, NULL); } - b->proto_data = user; + /*Update the blist Node info*/ +// gaim_blist_node_set_string(&(b->node), "", ""); } /*check if the msn user is online*/ Modified: branches/soc-2006-msnp13/src/protocols/msn/user.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/user.h 2006-10-14 20:00:56 UTC (rev 17481) @@ -306,6 +306,10 @@ */ gboolean msn_user_is_yahoo(GaimAccount *account ,const char *name); + +void msn_user_set_op(MsnUser *user,int list_op); + /*@}*/ + #endif /* _MSN_USER_H_ */ Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-10-14 20:00:56 UTC (rev 17481) @@ -718,3 +718,46 @@ msn_userlist_rem_buddy(userlist, who, MSN_LIST_FL, old_group_name); } +/*load userlist from the Blist file cache*/ +void +msn_userlist_load(MsnSession *session) +{ + GaimBlistNode *gnode, *cnode, *bnode; + GaimConnection *gc = gaim_account_get_connection(session->account); + GSList *l; + MsnUser * user; + + g_return_if_fail(gc != NULL); + + for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next){ + if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) + continue; + for(cnode = gnode->child; cnode; cnode = cnode->next) { + if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) + continue; + for(bnode = cnode->child; bnode; bnode = bnode->next) { + GaimBuddy *b; + if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) + continue; + b = (GaimBuddy *)bnode; + if(b->account == gc->account){ + user = msn_userlist_find_add_user(session->userlist, + b->name,NULL); + msn_user_set_op(user,MSN_LIST_FL_OP); + } + } + } + } + for (l = session->account->permit; l != NULL; l = l->next) { + user = msn_userlist_find_add_user(session->userlist, + (char *)l->data,NULL); + msn_user_set_op(user,MSN_LIST_AL_OP); + } + for (l = session->account->deny; l != NULL; l = l->next) { + user = msn_userlist_find_add_user(session->userlist, + (char *)l->data,NULL); + msn_user_set_op(user,MSN_LIST_BL_OP); + } + +} + Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.h 2006-10-14 18:28:22 UTC (rev 17480) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.h 2006-10-14 20:00:56 UTC (rev 17481) @@ -103,5 +103,6 @@ void msn_userlist_move_buddy(MsnUserList *userlist, const char *who, const char *old_group_name, const char *new_group_name); +void msn_userlist_load(MsnSession *session); #endif /* _MSN_USERLIST_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-10-18 16:28:59
|
Revision: 17523 http://svn.sourceforge.net/gaim/?rev=17523&view=rev Author: mayuan2006 Date: 2006-10-18 09:28:51 -0700 (Wed, 18 Oct 2006) Log Message: ----------- accurate with the Offline Message send's Fault Code recognize and resend the OIM Get Message. committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/msg.c branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/oim.c Modified: branches/soc-2006-msnp13/src/protocols/msn/msg.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msg.c 2006-10-18 15:53:26 UTC (rev 17522) +++ branches/soc-2006-msnp13/src/protocols/msn/msg.c 2006-10-18 16:28:51 UTC (rev 17523) @@ -215,7 +215,7 @@ char **elems, **cur, **tokens; g_return_if_fail(payload != NULL); - gaim_debug_info("MaYuan","payload:{%s}\n",payload); +// gaim_debug_info("MaYuan","payload:{%s}\n",payload); tmp_base = tmp = g_malloc0(payload_len + 1); memcpy(tmp_base, payload, payload_len); Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-10-18 15:53:26 UTC (rev 17522) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-10-18 16:28:51 UTC (rev 17523) @@ -1409,7 +1409,7 @@ const char *passport, *psm_str; /*get the payload content*/ - gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); +// gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); session = cmdproc->session; account = session->account; Modified: branches/soc-2006-msnp13/src/protocols/msn/oim.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-10-18 15:53:26 UTC (rev 17522) +++ branches/soc-2006-msnp13/src/protocols/msn/oim.c 2006-10-18 16:28:51 UTC (rev 17523) @@ -157,8 +157,10 @@ void msn_oim_send_process(MsnOim *oim,char *body,int len) { - xmlnode *responseNode,*bodyNode,*faultNode; + xmlnode *responseNode,*bodyNode; + xmlnode *faultNode,*faultCodeNode,*faultstringNode; xmlnode *detailNode,*challengeNode; + char *faultCodeStr,*faultstring; char *challenge; responseNode = xmlnode_from_str(body,len); @@ -178,18 +180,43 @@ return; } /*get the challenge,and repost it*/ + faultCodeNode = xmlnode_get_child(faultNode,"faultcode"); + if(faultCodeNode == NULL){ + gaim_debug_info("MaYuan","faultcode Node is NULL\n"); + goto oim_send_process_fail; + } + faultCodeStr = xmlnode_get_data(faultCodeNode); + gaim_debug_info("MaYuan","fault code:{%s}\n",faultCodeStr); + + if(strcmp(faultCodeStr,"q0:AuthenticationFailed")){ + /*other Fault Reason?*/ + goto oim_send_process_fail; + } + + faultstringNode = xmlnode_get_child(faultNode,"faultstring"); + faultstring = xmlnode_get_data(faultstringNode); + gaim_debug_info("MaYuan","fault string :{%s}\n",faultstring); + + /* lock key fault reason, + * compute the challenge and resend it + */ detailNode = xmlnode_get_child(faultNode, "detail"); + if(detailNode == NULL){ + goto oim_send_process_fail; + } challengeNode = xmlnode_get_child(detailNode,"LockKeyChallenge"); g_free(oim->challenge); oim->challenge = xmlnode_get_data(challengeNode); gaim_debug_info("MaYuan","lockkey:{%s}\n",oim->challenge); - xmlnode_free(responseNode); - /*repost the send*/ gaim_debug_info("MaYuan","prepare to repost the send...\n"); msn_oim_send_msg(oim); + +oim_send_process_fail: + xmlnode_free(responseNode); + return ; } static void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |