comparison libpurple/protocols/msn/notification.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 7d6f247f08d9
children 416ce8a7ac66
comparison
equal deleted inserted replaced
20470:7d6f247f08d9 20471:530a92d50c5e
269 for (cur = elems; *cur != NULL; cur++) 269 for (cur = elems; *cur != NULL; cur++)
270 { 270 {
271 tokens = g_strsplit(*cur, "=", 2); 271 tokens = g_strsplit(*cur, "=", 2);
272 if(tokens[0]&&tokens[1]) 272 if(tokens[0]&&tokens[1])
273 { 273 {
274 purple_debug_info("MaYuan","challenge %p,key:%s,value:%s\n", 274 purple_debug_info("MSNP14","challenge %p,key:%s,value:%s\n",
275 session->nexus->challenge_data,tokens[0],tokens[1]); 275 session->nexus->challenge_data,tokens[0],tokens[1]);
276 g_hash_table_insert(session->nexus->challenge_data, tokens[0], tokens[1]); 276 g_hash_table_insert(session->nexus->challenge_data, tokens[0], tokens[1]);
277 } 277 }
278 /* Don't free each of the tokens, only the array. */ 278 /* Don't free each of the tokens, only the array. */
279 g_free(tokens); 279 g_free(tokens);
403 } 403 }
404 404
405 static void 405 static void
406 msg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 406 msg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
407 { 407 {
408 purple_debug_info("MaYuan","Processing MSG... \n"); 408 purple_debug_info("MSNP14","Processing MSG... \n");
409 if(cmd->payload_len == 0){ 409 if(cmd->payload_len == 0){
410 return; 410 return;
411 } 411 }
412 /* NOTE: cmd is not always cmdproc->last_cmd, sometimes cmd is a queued 412 /* NOTE: cmd is not always cmdproc->last_cmd, sometimes cmd is a queued
413 * command and we are processing it */ 413 * command and we are processing it */
418 } 418 }
419 else 419 else
420 { 420 {
421 g_return_if_fail(cmd->payload_cb != NULL); 421 g_return_if_fail(cmd->payload_cb != NULL);
422 422
423 purple_debug_info("MaYuan","MSG payload:{%s}\n",cmd->payload); 423 purple_debug_info("MSNP14","MSG payload:{%s}\n",cmd->payload);
424 cmd->payload_cb(cmdproc, cmd, cmd->payload, cmd->payload_len); 424 cmd->payload_cb(cmdproc, cmd, cmd->payload, cmd->payload_len);
425 } 425 }
426 } 426 }
427 427
428 /*send Message to Yahoo Messenger*/ 428 /*send Message to Yahoo Messenger*/
436 int type; 436 int type;
437 437
438 cmdproc = session->notification->cmdproc; 438 cmdproc = session->notification->cmdproc;
439 g_return_if_fail(msg != NULL); 439 g_return_if_fail(msg != NULL);
440 payload = msn_message_gen_payload(msg, &payload_len); 440 payload = msn_message_gen_payload(msg, &payload_len);
441 purple_debug_info("MaYuan","send UUM,payload{%s},strlen:%d,len:%d\n", 441 purple_debug_info("MSNP14","send UUM,payload{%s},strlen:%d,len:%d\n",
442 payload,strlen(payload),payload_len); 442 payload,strlen(payload),payload_len);
443 type = msg->type; 443 type = msg->type;
444 trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,payload_len); 444 trans = msn_transaction_new(cmdproc, "UUM","%s 32 %d %d",msg->remote_user,type,payload_len);
445 msn_transaction_set_payload(trans, payload, strlen(payload)); 445 msn_transaction_set_payload(trans, payload, strlen(payload));
446 msn_cmdproc_send_trans(cmdproc, trans); 446 msn_cmdproc_send_trans(cmdproc, trans);
453 MsnMessage *msg; 453 MsnMessage *msg;
454 PurpleConnection *gc; 454 PurpleConnection *gc;
455 const char *passport; 455 const char *passport;
456 const char *content_type; 456 const char *content_type;
457 457
458 purple_debug_info("MaYuan","Process UBM payload:%s\n",payload); 458 purple_debug_info("MSNP14","Process UBM payload:%s\n",payload);
459 msg = msn_message_new_from_cmd(cmdproc->session, cmd); 459 msg = msn_message_new_from_cmd(cmdproc->session, cmd);
460 460
461 msn_message_parse_payload(msg, payload, len,MSG_LINE_DEM,MSG_BODY_DEM); 461 msn_message_parse_payload(msg, payload, len,MSG_LINE_DEM,MSG_BODY_DEM);
462 #ifdef MSN_DEBUG_NS 462 #ifdef MSN_DEBUG_NS
463 msn_message_show_readable(msg, "Notification", TRUE); 463 msn_message_show_readable(msg, "Notification", TRUE);
465 465
466 gc = cmdproc->session->account->gc; 466 gc = cmdproc->session->account->gc;
467 passport = msg->remote_user; 467 passport = msg->remote_user;
468 468
469 content_type = msn_message_get_content_type(msg); 469 content_type = msn_message_get_content_type(msg);
470 purple_debug_info("MaYuan","type:%d\n",content_type); 470 purple_debug_info("MSNP14","type:%d\n",content_type);
471 if(!strcmp(content_type,"text/plain")){ 471 if(!strcmp(content_type,"text/plain")){
472 const char *value; 472 const char *value;
473 const char *body; 473 const char *body;
474 char *body_str; 474 char *body_str;
475 char *body_enc; 475 char *body_enc;
524 524
525 /*Yahoo msg process*/ 525 /*Yahoo msg process*/
526 static void 526 static void
527 ubm_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 527 ubm_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
528 { 528 {
529 purple_debug_info("MaYuan","Processing UBM... \n"); 529 purple_debug_info("MSNP14","Processing UBM... \n");
530 if(cmd->payload_len == 0){ 530 if(cmd->payload_len == 0){
531 return; 531 return;
532 } 532 }
533 /* NOTE: cmd is not always cmdproc->last_cmd, sometimes cmd is a queued 533 /* NOTE: cmd is not always cmdproc->last_cmd, sometimes cmd is a queued
534 * command and we are processing it */ 534 * command and we are processing it */
536 cmdproc->last_cmd->payload_cb = ubm_cmd_post; 536 cmdproc->last_cmd->payload_cb = ubm_cmd_post;
537 cmdproc->servconn->payload_len = atoi(cmd->params[2]); 537 cmdproc->servconn->payload_len = atoi(cmd->params[2]);
538 }else{ 538 }else{
539 g_return_if_fail(cmd->payload_cb != NULL); 539 g_return_if_fail(cmd->payload_cb != NULL);
540 540
541 purple_debug_info("MaYuan","UBM payload:{%s}\n",cmd->payload); 541 purple_debug_info("MSNP14","UBM payload:{%s}\n",cmd->payload);
542 ubm_cmd_post(cmdproc, cmd, cmd->payload, cmd->payload_len); 542 ubm_cmd_post(cmdproc, cmd, cmd->payload, cmd->payload_len);
543 } 543 }
544 } 544 }
545 545
546 /************************************************************************** 546 /**************************************************************************
570 g_snprintf(buf + (i*2), 3, "%02x", digest[i]); 570 g_snprintf(buf + (i*2), 3, "%02x", digest[i]);
571 } 571 }
572 #else 572 #else
573 msn_handle_chl(cmd->params[1], buf); 573 msn_handle_chl(cmd->params[1], buf);
574 #endif 574 #endif
575 // purple_debug_info("MaYuan","<<challenge:{%s}:{%s}\n",cmd->params[1],buf); 575 // purple_debug_info("MSNP14","<<challenge:{%s}:{%s}\n",cmd->params[1],buf);
576 trans = msn_transaction_new(cmdproc, "QRY", "%s 32", MSNP13_WLM_PRODUCT_ID); 576 trans = msn_transaction_new(cmdproc, "QRY", "%s 32", MSNP13_WLM_PRODUCT_ID);
577 577
578 msn_transaction_set_payload(trans, buf, 32); 578 msn_transaction_set_payload(trans, buf, 32);
579 579
580 msn_cmdproc_send_trans(cmdproc, trans); 580 msn_cmdproc_send_trans(cmdproc, trans);
591 char **tokens; 591 char **tokens;
592 char *email,*domain; 592 char *email,*domain;
593 char *list_op_str,*type_str; 593 char *list_op_str,*type_str;
594 594
595 purple_debug_info("::","msn_add_contact_xml()\n"); 595 purple_debug_info("::","msn_add_contact_xml()\n");
596 purple_debug_info("MaYuan","Passport: %s, type: %d\n",passport, type); 596 purple_debug_info("MSNP14","Passport: %s, type: %d\n",passport, type);
597 tokens = g_strsplit(passport, "@", 2); 597 tokens = g_strsplit(passport, "@", 2);
598 email = tokens[0]; 598 email = tokens[0];
599 domain = tokens[1]; 599 domain = tokens[1];
600 600
601 /*find a domain Node*/ 601 /*find a domain Node*/
602 for(d_node = xmlnode_get_child(mlNode,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)) 602 for(d_node = xmlnode_get_child(mlNode,"d"); d_node; d_node = xmlnode_get_next_twin(d_node))
603 { 603 {
604 const char * attr = NULL; 604 const char * attr = NULL;
605 purple_debug_info("MaYuan","d_node: %s\n",d_node->name); 605 purple_debug_info("MSNP14","d_node: %s\n",d_node->name);
606 attr = xmlnode_get_attrib(d_node,"n"); 606 attr = xmlnode_get_attrib(d_node,"n");
607 if(attr == NULL){ 607 if(attr == NULL){
608 continue; 608 continue;
609 } 609 }
610 if(!strcmp(attr,domain)){ 610 if(!strcmp(attr,domain)){
612 } 612 }
613 } 613 }
614 if(d_node == NULL) 614 if(d_node == NULL)
615 { 615 {
616 /*domain not found, create a new domain Node*/ 616 /*domain not found, create a new domain Node*/
617 purple_debug_info("MaYuan","get No d_node\n"); 617 purple_debug_info("MSNP14","get No d_node\n");
618 d_node = xmlnode_new("d"); 618 d_node = xmlnode_new("d");
619 xmlnode_set_attrib(d_node,"n",domain); 619 xmlnode_set_attrib(d_node,"n",domain);
620 xmlnode_insert_child(mlNode,d_node); 620 xmlnode_insert_child(mlNode,d_node);
621 } 621 }
622 622
623 /*create contact node*/ 623 /*create contact node*/
624 c_node = xmlnode_new("c"); 624 c_node = xmlnode_new("c");
625 xmlnode_set_attrib(c_node,"n",email); 625 xmlnode_set_attrib(c_node,"n",email);
626 626
627 list_op_str = g_strdup_printf("%d",list_op); 627 list_op_str = g_strdup_printf("%d",list_op);
628 purple_debug_info("MaYuan","list_op: %d\n",list_op); 628 purple_debug_info("MSNP14","list_op: %d\n",list_op);
629 xmlnode_set_attrib(c_node,"l",list_op_str); 629 xmlnode_set_attrib(c_node,"l",list_op_str);
630 g_free(list_op_str); 630 g_free(list_op_str);
631 631
632 if (type != MSN_USER_TYPE_UNKNOWN) { 632 if (type != MSN_USER_TYPE_UNKNOWN) {
633 type_str = g_strdup_printf("%d", type); 633 type_str = g_strdup_printf("%d", type);
650 static void 650 static void
651 msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_len) 651 msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_len)
652 { 652 {
653 MsnTransaction *trans; 653 MsnTransaction *trans;
654 purple_debug_info("::","msn_notification_post_adl()\n"); 654 purple_debug_info("::","msn_notification_post_adl()\n");
655 purple_debug_info("MaYuan","Sending ADL with payload: %s\n",payload); 655 purple_debug_info("MSNP14","Sending ADL with payload: %s\n",payload);
656 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); 656 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
657 msn_transaction_set_payload(trans, payload, strlen(payload)); 657 msn_transaction_set_payload(trans, payload, strlen(payload));
658 msn_cmdproc_send_trans(cmdproc, trans); 658 msn_cmdproc_send_trans(cmdproc, trans);
659 } 659 }
660 660
738 } 738 }
739 739
740 static void 740 static void
741 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 741 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
742 { 742 {
743 purple_debug_info("MaYuan","Process BLP\n"); 743 purple_debug_info("MSNP14","Process BLP\n");
744 } 744 }
745 745
746 static void 746 static void
747 adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 747 adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
748 { 748 {
749 static int initial; 749 static int initial;
750 750
751 purple_debug_info("MaYuan","Process ADL\n"); 751 purple_debug_info("MSNP14","Process ADL\n");
752 752
753 if (!initial) 753 if (!initial)
754 { 754 {
755 purple_debug_info("typ0","Initial ADL received\n"); 755 purple_debug_misc("MSNP14","Initial ADL received\n");
756 msn_session_finish_login(cmdproc->session); 756 msn_session_finish_login(cmdproc->session);
757 } 757 }
758 } 758 }
759 759
760 static void 760 static void
777 777
778 static void 778 static void
779 fqy_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, 779 fqy_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload,
780 size_t len) 780 size_t len)
781 { 781 {
782 purple_debug_info("MaYuan","FQY payload{%s}\n",payload); 782 purple_debug_info("MSNP14","FQY payload{%s}\n",payload);
783 msn_notification_post_adl(cmdproc,payload,len); 783 msn_notification_post_adl(cmdproc,payload,len);
784 } 784 }
785 785
786 static void 786 static void
787 fqy_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 787 fqy_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
788 { 788 {
789 purple_debug_info("MaYuan","Process FQY\n"); 789 purple_debug_info("MSNP14","Process FQY\n");
790 cmdproc->last_cmd->payload_cb = fqy_cmd_post; 790 cmdproc->last_cmd->payload_cb = fqy_cmd_post;
791 } 791 }
792 792
793 static void 793 static void
794 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 794 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
796 #if 0 796 #if 0
797 MsnTransaction *trans; 797 MsnTransaction *trans;
798 char * payload; 798 char * payload;
799 #endif 799 #endif
800 800
801 purple_debug_info("MaYuan","Process RML\n"); 801 purple_debug_info("MSNP14","Process RML\n");
802 #if 0 802 #if 0
803 trans = msn_transaction_new(cmdproc, "RML",""); 803 trans = msn_transaction_new(cmdproc, "RML","");
804 804
805 msn_transaction_set_payload(trans, payload, strlen(payload)); 805 msn_transaction_set_payload(trans, payload, strlen(payload));
806 806
1504 } 1504 }
1505 1505
1506 buf = xmlnode_to_formatted_str(root, NULL); 1506 buf = xmlnode_to_formatted_str(root, NULL);
1507 1507
1508 /* get the payload content */ 1508 /* get the payload content */
1509 purple_debug_info("MaYuan","GCF command payload:\n\"%s\"\n",buf); 1509 purple_debug_info("MSNP14","GCF command payload:\n%s\n",buf);
1510 1510
1511 g_free(buf); 1511 g_free(buf);
1512 xmlnode_free(root); 1512 xmlnode_free(root);
1513 } 1513 }
1514 1514
1515 static void 1515 static void
1516 gcf_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1516 gcf_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1517 { 1517 {
1518 purple_debug_info("MaYuan","Processing GCF command\n"); 1518 purple_debug_info("MSNP14","Processing GCF command\n");
1519 cmdproc->last_cmd->payload_cb = gcf_cmd_post; 1519 cmdproc->last_cmd->payload_cb = gcf_cmd_post;
1520 return; 1520 return;
1521 } 1521 }
1522 1522
1523 static void 1523 static void
1524 sbs_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1524 sbs_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1525 { 1525 {
1526 purple_debug_info("MaYuan","Processing SBS... \n"); 1526 purple_debug_info("MSNP14","Processing SBS... \n");
1527 if(cmd->payload_len == 0){ 1527 if(cmd->payload_len == 0){
1528 return; 1528 return;
1529 } 1529 }
1530 /*get the payload content*/ 1530 /*get the payload content*/
1531 } 1531 }
1545 MsnUser *user; 1545 MsnUser *user;
1546 const char *passport; 1546 const char *passport;
1547 char *psm_str, *currentmedia_str; 1547 char *psm_str, *currentmedia_str;
1548 1548
1549 /*get the payload content*/ 1549 /*get the payload content*/
1550 // purple_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); 1550 // purple_debug_info("MSNP14","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload);
1551 1551
1552 session = cmdproc->session; 1552 session = cmdproc->session;
1553 account = session->account; 1553 account = session->account;
1554 gc = purple_account_get_connection(account); 1554 gc = purple_account_get_connection(account);
1555 1555
1569 } 1569 }
1570 1570
1571 static void 1571 static void
1572 ubx_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1572 ubx_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1573 { 1573 {
1574 purple_debug_info("typ0","UBX received.\n"); 1574 purple_debug_misc("MSNP14","UBX received.\n");
1575 if(cmd->payload_len == 0){ 1575 if(cmd->payload_len == 0){
1576 return; 1576 return;
1577 } 1577 }
1578 cmdproc->last_cmd->payload_cb = ubx_cmd_post; 1578 cmdproc->last_cmd->payload_cb = ubx_cmd_post;
1579 } 1579 }
1580 1580
1581 static void 1581 static void
1582 uux_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1582 uux_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1583 { 1583 {
1584 purple_debug_info("typ0","UUX received.\n"); 1584 purple_debug_misc("MSNP14","UUX received.\n");
1585 } 1585 }
1586 1586
1587 /************************************************************************** 1587 /**************************************************************************
1588 * Message Types 1588 * Message Types
1589 **************************************************************************/ 1589 **************************************************************************/
1932 msn_add_contact_xml(notification->session,rml_node,who,1,MSN_USER_TYPE_PASSPORT); 1932 msn_add_contact_xml(notification->session,rml_node,who,1,MSN_USER_TYPE_PASSPORT);
1933 1933
1934 payload = xmlnode_to_str(rml_node,&payload_len); 1934 payload = xmlnode_to_str(rml_node,&payload_len);
1935 xmlnode_free(rml_node); 1935 xmlnode_free(rml_node);
1936 1936
1937 purple_debug_info("MaYuan","Send RML with payload {%s}\n",payload); 1937 purple_debug_info("MSNP14","Send RML with payload {%s}\n",payload);
1938 trans = msn_transaction_new(cmdproc, "RML","%d",strlen(payload)); 1938 trans = msn_transaction_new(cmdproc, "RML","%d",strlen(payload));
1939 msn_transaction_set_payload(trans, payload, strlen(payload)); 1939 msn_transaction_set_payload(trans, payload, strlen(payload));
1940 msn_cmdproc_send_trans(cmdproc, trans); 1940 msn_cmdproc_send_trans(cmdproc, trans);
1941 } 1941 }
1942 1942