diff options
author | Ma Yuan <mayuan2006@gmail.com> | 2006-10-18 16:28:51 +0000 |
---|---|---|
committer | Ma Yuan <mayuan2006@gmail.com> | 2006-10-18 16:28:51 +0000 |
commit | fb6bba616ea5ca200c2b35f9e7bbaca62b0eabe7 (patch) | |
tree | 5275f0a04a4782a631722caa3e7dec941d0c83df | |
parent | ce7a2cf9c250d4e059380fb8310a8a96b2c23c1f (diff) | |
download | pidgin-fb6bba616ea5ca200c2b35f9e7bbaca62b0eabe7.tar.gz |
[gaim-migrate @ 17523]soc.2006.msnp13
accurate with the Offline Message send's Fault Code recognize and resend the OIM Get Message.
committed by MaYuan<mayuan2006@gmail.com>
committer: Ethan Blanton <elb@pidgin.im>
-rw-r--r-- | src/protocols/msn/msg.c | 2 | ||||
-rw-r--r-- | src/protocols/msn/notification.c | 2 | ||||
-rw-r--r-- | src/protocols/msn/oim.c | 33 |
3 files changed, 32 insertions, 5 deletions
diff --git a/src/protocols/msn/msg.c b/src/protocols/msn/msg.c index 911e62d429..2f8c2c5867 100644 --- a/src/protocols/msn/msg.c +++ b/src/protocols/msn/msg.c @@ -215,7 +215,7 @@ msn_message_parse_payload(MsnMessage *msg, 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); diff --git a/src/protocols/msn/notification.c b/src/protocols/msn/notification.c index aea7186205..095eb29120 100644 --- a/src/protocols/msn/notification.c +++ b/src/protocols/msn/notification.c @@ -1409,7 +1409,7 @@ ubx_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, 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; diff --git a/src/protocols/msn/oim.c b/src/protocols/msn/oim.c index bf3f389974..783d171095 100644 --- a/src/protocols/msn/oim.c +++ b/src/protocols/msn/oim.c @@ -157,8 +157,10 @@ msn_oim_send_connect_cb(gpointer data, GaimSslConnection *gsc, 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 @@ msn_oim_send_process(MsnOim *oim,char *body,int len) 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 |