Mercurial > pidgin
comparison libpurple/protocols/msn/oim.c @ 20471:530a92d50c5e
Misc cleanups, better error handling, and print the Address Book received from the server in a human readable way.
author | Carlos Silva <typ0@pidgin.im> |
---|---|
date | Tue, 17 Jul 2007 00:35:50 +0000 |
parents | a0d104281002 |
children | eb93710aec4d |
comparison
equal
deleted
inserted
replaced
20470:7d6f247f08d9 | 20471:530a92d50c5e |
---|---|
118 static char * | 118 static char * |
119 msn_oim_msg_to_str(MsnOim *oim, const char *body) | 119 msn_oim_msg_to_str(MsnOim *oim, const char *body) |
120 { | 120 { |
121 char *oim_body,*oim_base64; | 121 char *oim_body,*oim_base64; |
122 | 122 |
123 purple_debug_info("MaYuan","encode OIM Message...\n"); | 123 purple_debug_info("MSNP14","encode OIM Message...\n"); |
124 oim_base64 = purple_base64_encode((const guchar *)body, strlen(body)); | 124 oim_base64 = purple_base64_encode((const guchar *)body, strlen(body)); |
125 purple_debug_info("MaYuan","encoded base64 body:{%s}\n",oim_base64); | 125 purple_debug_info("MSNP14","encoded base64 body:{%s}\n",oim_base64); |
126 oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, | 126 oim_body = g_strdup_printf(MSN_OIM_MSG_TEMPLATE, |
127 oim->run_id,oim->send_seq,oim_base64); | 127 oim->run_id,oim->send_seq,oim_base64); |
128 | 128 |
129 return oim_body; | 129 return oim_body; |
130 } | 130 } |
176 faultNode = xmlnode_get_child(bodyNode,"Fault"); | 176 faultNode = xmlnode_get_child(bodyNode,"Fault"); |
177 if(faultNode == NULL){ | 177 if(faultNode == NULL){ |
178 /*Send OK! return*/ | 178 /*Send OK! return*/ |
179 MsnOimSendReq *request; | 179 MsnOimSendReq *request; |
180 | 180 |
181 purple_debug_info("MaYuan","send OIM OK!"); | 181 purple_debug_info("MSNP14","send OIM OK!"); |
182 xmlnode_free(responseNode); | 182 xmlnode_free(responseNode); |
183 request = g_queue_pop_head(oim->send_queue); | 183 request = g_queue_pop_head(oim->send_queue); |
184 msn_oim_free_send_req(request); | 184 msn_oim_free_send_req(request); |
185 /*send next buffered Offline Message*/ | 185 /*send next buffered Offline Message*/ |
186 msn_soap_post(oim->sendconn,NULL,msn_oim_send_connect_init); | 186 msn_soap_post(oim->sendconn,NULL,msn_oim_send_connect_init); |
187 return; | 187 return; |
188 } | 188 } |
189 /*get the challenge,and repost it*/ | 189 /*get the challenge,and repost it*/ |
190 faultCodeNode = xmlnode_get_child(faultNode,"faultcode"); | 190 faultCodeNode = xmlnode_get_child(faultNode,"faultcode"); |
191 if(faultCodeNode == NULL){ | 191 if(faultCodeNode == NULL){ |
192 purple_debug_info("MaYuan","faultcode Node is NULL\n"); | 192 purple_debug_info("MSNP14","faultcode Node is NULL\n"); |
193 goto oim_send_process_fail; | 193 goto oim_send_process_fail; |
194 } | 194 } |
195 faultCodeStr = xmlnode_get_data(faultCodeNode); | 195 faultCodeStr = xmlnode_get_data(faultCodeNode); |
196 purple_debug_info("MaYuan","fault code:{%s}\n",faultCodeStr); | 196 purple_debug_info("MSNP14","fault code:{%s}\n",faultCodeStr); |
197 | 197 |
198 if(!strcmp(faultCodeStr,"q0:AuthenticationFailed")){ | 198 if(!strcmp(faultCodeStr,"q0:AuthenticationFailed")){ |
199 /*other Fault Reason?*/ | 199 /*other Fault Reason?*/ |
200 goto oim_send_process_fail; | 200 goto oim_send_process_fail; |
201 } | 201 } |
202 | 202 |
203 faultstringNode = xmlnode_get_child(faultNode,"faultstring"); | 203 faultstringNode = xmlnode_get_child(faultNode,"faultstring"); |
204 faultstring = xmlnode_get_data(faultstringNode); | 204 faultstring = xmlnode_get_data(faultstringNode); |
205 purple_debug_info("MaYuan","fault string :{%s}\n",faultstring); | 205 purple_debug_info("MSNP14","fault string :{%s}\n",faultstring); |
206 | 206 |
207 /* lock key fault reason, | 207 /* lock key fault reason, |
208 * compute the challenge and resend it | 208 * compute the challenge and resend it |
209 */ | 209 */ |
210 detailNode = xmlnode_get_child(faultNode, "detail"); | 210 detailNode = xmlnode_get_child(faultNode, "detail"); |
216 goto oim_send_process_fail; | 216 goto oim_send_process_fail; |
217 } | 217 } |
218 | 218 |
219 g_free(oim->challenge); | 219 g_free(oim->challenge); |
220 oim->challenge = xmlnode_get_data(challengeNode); | 220 oim->challenge = xmlnode_get_data(challengeNode); |
221 purple_debug_info("MaYuan","lockkey:{%s}\n",oim->challenge); | 221 purple_debug_info("MSNP14","lockkey:{%s}\n",oim->challenge); |
222 | 222 |
223 /*repost the send*/ | 223 /*repost the send*/ |
224 purple_debug_info("MaYuan","prepare to repost the send...\n"); | 224 purple_debug_info("MSNP14","prepare to repost the send...\n"); |
225 msn_oim_send_msg(oim); | 225 msn_oim_send_msg(oim); |
226 | 226 |
227 oim_send_process_fail: | 227 oim_send_process_fail: |
228 xmlnode_free(responseNode); | 228 xmlnode_free(responseNode); |
229 return ; | 229 return ; |
238 | 238 |
239 g_return_if_fail(session != NULL); | 239 g_return_if_fail(session != NULL); |
240 oim = soapconn->session->oim; | 240 oim = soapconn->session->oim; |
241 g_return_if_fail(oim != NULL); | 241 g_return_if_fail(oim != NULL); |
242 | 242 |
243 purple_debug_info("MaYuan","read buffer:{%s}\n",soapconn->body); | 243 purple_debug_info("MSNP14","read buffer:{%s}\n",soapconn->body); |
244 msn_oim_send_process(oim,soapconn->body,soapconn->body_len); | 244 msn_oim_send_process(oim,soapconn->body,soapconn->body_len); |
245 } | 245 } |
246 | 246 |
247 static void | 247 static void |
248 msn_oim_send_written_cb(gpointer data, gint source, PurpleInputCondition cond) | 248 msn_oim_send_written_cb(gpointer data, gint source, PurpleInputCondition cond) |
278 | 278 |
279 g_return_if_fail(oim != NULL); | 279 g_return_if_fail(oim != NULL); |
280 oim_request = g_queue_pop_head(oim->send_queue); | 280 oim_request = g_queue_pop_head(oim->send_queue); |
281 g_return_if_fail(oim_request != NULL); | 281 g_return_if_fail(oim_request != NULL); |
282 | 282 |
283 purple_debug_info("MaYuan","send single OIM Message\n"); | 283 purple_debug_info("MSNP14","send single OIM Message\n"); |
284 mspauth = g_strdup_printf("t=%s&p=%s", | 284 mspauth = g_strdup_printf("t=%s&p=%s", |
285 oim->session->passport_info.t, | 285 oim->session->passport_info.t, |
286 oim->session->passport_info.p | 286 oim->session->passport_info.p |
287 ); | 287 ); |
288 g_queue_push_head(oim->send_queue,oim_request); | 288 g_queue_push_head(oim->send_queue,oim_request); |
291 * else we go for the SOAP fault and resend it. | 291 * else we go for the SOAP fault and resend it. |
292 */ | 292 */ |
293 if(oim->challenge != NULL){ | 293 if(oim->challenge != NULL){ |
294 msn_handle_chl(oim->challenge, buf); | 294 msn_handle_chl(oim->challenge, buf); |
295 }else{ | 295 }else{ |
296 purple_debug_info("MaYuan","no lock key challenge,wait for SOAP Fault and Resend\n"); | 296 purple_debug_info("MSNP14","no lock key challenge,wait for SOAP Fault and Resend\n"); |
297 buf[0]='\0'; | 297 buf[0]='\0'; |
298 } | 298 } |
299 purple_debug_info("MaYuan","get the lock key challenge {%s}\n",buf); | 299 purple_debug_info("MSNP14","get the lock key challenge {%s}\n",buf); |
300 | 300 |
301 msg_body = msn_oim_msg_to_str(oim, oim_request->oim_msg); | 301 msg_body = msn_oim_msg_to_str(oim, oim_request->oim_msg); |
302 soap_body = g_strdup_printf(MSN_OIM_SEND_TEMPLATE, | 302 soap_body = g_strdup_printf(MSN_OIM_SEND_TEMPLATE, |
303 oim_request->from_member, | 303 oim_request->from_member, |
304 oim_request->friendname, | 304 oim_request->friendname, |
331 static void | 331 static void |
332 msn_oim_delete_read_cb(gpointer data, gint source, PurpleInputCondition cond) | 332 msn_oim_delete_read_cb(gpointer data, gint source, PurpleInputCondition cond) |
333 { | 333 { |
334 MsnSoapConn * soapconn = data; | 334 MsnSoapConn * soapconn = data; |
335 | 335 |
336 purple_debug_info("MaYuan","OIM delete read buffer:{%s}\n",soapconn->body); | 336 purple_debug_info("MSNP14","OIM delete read buffer:{%s}\n",soapconn->body); |
337 | 337 |
338 msn_soap_free_read_buf(soapconn); | 338 msn_soap_free_read_buf(soapconn); |
339 /*get next single Offline Message*/ | 339 /*get next single Offline Message*/ |
340 msn_soap_post(soapconn,NULL,msn_oim_retrieve_connect_init); | 340 msn_soap_post(soapconn,NULL,msn_oim_retrieve_connect_init); |
341 } | 341 } |
356 const char *soap_body,*t,*p; | 356 const char *soap_body,*t,*p; |
357 | 357 |
358 g_return_if_fail(oim != NULL); | 358 g_return_if_fail(oim != NULL); |
359 g_return_if_fail(msgid != NULL); | 359 g_return_if_fail(msgid != NULL); |
360 | 360 |
361 purple_debug_info("MaYuan","Delete single OIM Message {%s}\n",msgid); | 361 purple_debug_info("MSNP14","Delete single OIM Message {%s}\n",msgid); |
362 t = oim->session->passport_info.t; | 362 t = oim->session->passport_info.t; |
363 p = oim->session->passport_info.p; | 363 p = oim->session->passport_info.p; |
364 | 364 |
365 soap_body = g_strdup_printf(MSN_OIM_DEL_TEMPLATE, | 365 soap_body = g_strdup_printf(MSN_OIM_DEL_TEMPLATE, |
366 t, | 366 t, |
405 g_return_if_fail(oim != NULL); | 405 g_return_if_fail(oim != NULL); |
406 | 406 |
407 session = oim->session; | 407 session = oim->session; |
408 g_return_if_fail(session != NULL); | 408 g_return_if_fail(session != NULL); |
409 | 409 |
410 purple_debug_info("MaYuan","oim get SOAP Server connected!\n"); | 410 purple_debug_info("MSNP14","oim get SOAP Server connected!\n"); |
411 } | 411 } |
412 | 412 |
413 /*Post the Offline Instant Message to User Conversation*/ | 413 /*Post the Offline Instant Message to User Conversation*/ |
414 static void | 414 static void |
415 msn_oim_report_to_user(MsnOim *oim, char *msg_str) | 415 msn_oim_report_to_user(MsnOim *oim, char *msg_str) |
426 | 426 |
427 message = msn_message_new(MSN_MSG_UNKNOWN); | 427 message = msn_message_new(MSN_MSG_UNKNOWN); |
428 | 428 |
429 msn_message_parse_payload(message, msg_str, strlen(msg_str), | 429 msn_message_parse_payload(message, msg_str, strlen(msg_str), |
430 MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); | 430 MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); |
431 purple_debug_info("MaYuan","oim body:{%s}\n",message->body); | 431 purple_debug_info("MSNP14","oim body:{%s}\n",message->body); |
432 decode_msg = (char *)purple_base64_decode(message->body,&body_len); | 432 decode_msg = (char *)purple_base64_decode(message->body,&body_len); |
433 date = (char *)g_hash_table_lookup(message->attr_table, "Date"); | 433 date = (char *)g_hash_table_lookup(message->attr_table, "Date"); |
434 from = (char *)g_hash_table_lookup(message->attr_table, "From"); | 434 from = (char *)g_hash_table_lookup(message->attr_table, "From"); |
435 if(strstr(from," ")){ | 435 if(strstr(from," ")){ |
436 has_nick = 1; | 436 has_nick = 1; |
437 } | 437 } |
438 if(has_nick){ | 438 if(has_nick){ |
439 tokens = g_strsplit(from , " " , 2); | 439 tokens = g_strsplit(from , " " , 2); |
440 passport_str = g_strdup(tokens[1]); | 440 passport_str = g_strdup(tokens[1]); |
441 purple_debug_info("MaYuan","oim Date:{%s},nickname:{%s},tokens[1]:{%s} passport{%s}\n", | 441 purple_debug_info("MSNP14","oim Date:{%s},nickname:{%s},tokens[1]:{%s} passport{%s}\n", |
442 date,tokens[0],tokens[1],passport_str); | 442 date,tokens[0],tokens[1],passport_str); |
443 g_strfreev(tokens); | 443 g_strfreev(tokens); |
444 }else{ | 444 }else{ |
445 passport_str = g_strdup(from); | 445 passport_str = g_strdup(from); |
446 purple_debug_info("MaYuan","oim Date:{%s},passport{%s}\n", | 446 purple_debug_info("MSNP14","oim Date:{%s},passport{%s}\n", |
447 date,passport_str); | 447 date,passport_str); |
448 } | 448 } |
449 start = strstr(passport_str,"<"); | 449 start = strstr(passport_str,"<"); |
450 start += 1; | 450 start += 1; |
451 end = strstr(passport_str,">"); | 451 end = strstr(passport_str,">"); |
452 passport = g_strndup(start,end - start); | 452 passport = g_strndup(start,end - start); |
453 g_free(passport_str); | 453 g_free(passport_str); |
454 purple_debug_info("MaYuan","oim Date:{%s},passport{%s}\n",date,passport); | 454 purple_debug_info("MSNP14","oim Date:{%s},passport{%s}\n",date,passport); |
455 | 455 |
456 stamp = purple_str_to_time(date, TRUE, NULL, NULL, NULL); | 456 stamp = purple_str_to_time(date, TRUE, NULL, NULL, NULL); |
457 | 457 |
458 serv_got_im(oim->session->account->gc, passport, decode_msg, 0, stamp); | 458 serv_got_im(oim->session->account->gc, passport, decode_msg, 0, stamp); |
459 | 459 |
496 msn_oim_get_read_cb(gpointer data, gint source, PurpleInputCondition cond) | 496 msn_oim_get_read_cb(gpointer data, gint source, PurpleInputCondition cond) |
497 { | 497 { |
498 MsnSoapConn * soapconn = data; | 498 MsnSoapConn * soapconn = data; |
499 MsnOim * oim = soapconn->session->oim; | 499 MsnOim * oim = soapconn->session->oim; |
500 | 500 |
501 purple_debug_info("MaYuan","OIM get read buffer:{%s}\n",soapconn->body); | 501 purple_debug_info("MSNP14","OIM get read buffer:{%s}\n",soapconn->body); |
502 | 502 |
503 /*we need to process the read message!*/ | 503 /*we need to process the read message!*/ |
504 msn_oim_get_process(oim,soapconn->body); | 504 msn_oim_get_process(oim,soapconn->body); |
505 msn_soap_free_read_buf(soapconn); | 505 msn_soap_free_read_buf(soapconn); |
506 | 506 |
570 rtNode = xmlnode_get_child(mNode,"RT"); | 570 rtNode = xmlnode_get_child(mNode,"RT"); |
571 if(rtNode != NULL) { | 571 if(rtNode != NULL) { |
572 rTime = xmlnode_get_data(rtNode); | 572 rTime = xmlnode_get_data(rtNode); |
573 rtNode = NULL; | 573 rtNode = NULL; |
574 } | 574 } |
575 /* purple_debug_info("MaYuan","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); */ | 575 /* purple_debug_info("MSNP14","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); */ |
576 | 576 |
577 oim->oim_list = g_list_append(oim->oim_list,msgid); | 577 oim->oim_list = g_list_append(oim->oim_list,msgid); |
578 msn_oim_post_single_get_msg(oim,msgid); | 578 msn_oim_post_single_get_msg(oim,msgid); |
579 g_free(passport); | 579 g_free(passport); |
580 g_free(msgid); | 580 g_free(msgid); |
590 msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid) | 590 msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid) |
591 { | 591 { |
592 MsnSoapReq *soap_request; | 592 MsnSoapReq *soap_request; |
593 const char *soap_body,*t,*p; | 593 const char *soap_body,*t,*p; |
594 | 594 |
595 purple_debug_info("MaYuan","Get single OIM Message\n"); | 595 purple_debug_info("MSNP14","Get single OIM Message\n"); |
596 t = oim->session->passport_info.t; | 596 t = oim->session->passport_info.t; |
597 p = oim->session->passport_info.p; | 597 p = oim->session->passport_info.p; |
598 | 598 |
599 soap_body = g_strdup_printf(MSN_OIM_GET_TEMPLATE, | 599 soap_body = g_strdup_printf(MSN_OIM_GET_TEMPLATE, |
600 t, | 600 t, |
611 | 611 |
612 /*msn oim retrieve server connect init */ | 612 /*msn oim retrieve server connect init */ |
613 static void | 613 static void |
614 msn_oim_retrieve_connect_init(MsnSoapConn *soapconn) | 614 msn_oim_retrieve_connect_init(MsnSoapConn *soapconn) |
615 { | 615 { |
616 purple_debug_info("MaYuan","msn_oim_connect...\n"); | 616 purple_debug_info("MSNP14","msn_oim_connect...\n"); |
617 msn_soap_init(soapconn,MSN_OIM_RETRIEVE_HOST,1, | 617 msn_soap_init(soapconn,MSN_OIM_RETRIEVE_HOST,1, |
618 msn_oim_get_connect_cb, | 618 msn_oim_get_connect_cb, |
619 msn_oim_get_error_cb); | 619 msn_oim_get_error_cb); |
620 } | 620 } |
621 | 621 |
622 /*Msn OIM Send Server Connect Init Function*/ | 622 /*Msn OIM Send Server Connect Init Function*/ |
623 static void | 623 static void |
624 msn_oim_send_connect_init(MsnSoapConn *sendconn) | 624 msn_oim_send_connect_init(MsnSoapConn *sendconn) |
625 { | 625 { |
626 purple_debug_info("MaYuan","msn oim send connect init...\n"); | 626 purple_debug_info("MSNP14","msn oim send connect init...\n"); |
627 msn_soap_init(sendconn,MSN_OIM_SEND_HOST,1, | 627 msn_soap_init(sendconn,MSN_OIM_SEND_HOST,1, |
628 msn_oim_send_connect_cb, | 628 msn_oim_send_connect_cb, |
629 msn_oim_send_error_cb); | 629 msn_oim_send_error_cb); |
630 } | 630 } |
631 | 631 |