summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/protocols/msn/msg.c2
-rw-r--r--src/protocols/msn/notification.c2
-rw-r--r--src/protocols/msn/oim.c33
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