comparison libpurple/protocols/msn/notification.c @ 20467:86da6ab1f612

Correctly process an additional <Service> with type Profile and name 'Messenger Roaming Identity' sent with the contact list using a recently registered WLM account, that was causing the initial ADL command to be sent malformed, and our presence status not being forwarded to our buddies
author Carlos Silva <typ0@pidgin.im>
date Sat, 14 Jul 2007 00:04:48 +0000
parents a8599711efb7
children b888c2f15c79
comparison
equal deleted inserted replaced
20466:a8599711efb7 20467:86da6ab1f612
590 xmlnode *d_node,*c_node; 590 xmlnode *d_node,*c_node;
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("MaYuan","passport:%s type: %d\n",passport, type); 595 purple_debug_info("::","msn_add_contact_xml()\n");
596 purple_debug_info("MaYuan","Passport: %s, type: %d\n",passport, type);
596 tokens = g_strsplit(passport, "@", 2); 597 tokens = g_strsplit(passport, "@", 2);
597 email = tokens[0]; 598 email = tokens[0];
598 domain = tokens[1]; 599 domain = tokens[1];
599 600
600 /*find a domain Node*/ 601 /*find a domain Node*/
601 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))
602 { 603 {
603 const char * attr = NULL; 604 const char * attr = NULL;
604 purple_debug_info("MaYuan","d_node:%s\n",d_node->name); 605 purple_debug_info("MaYuan","d_node: %s\n",d_node->name);
605 attr = xmlnode_get_attrib(d_node,"n"); 606 attr = xmlnode_get_attrib(d_node,"n");
606 if(attr == NULL){ 607 if(attr == NULL){
607 continue; 608 continue;
608 } 609 }
609 if(!strcmp(attr,domain)){ 610 if(!strcmp(attr,domain)){
622 /*create contact node*/ 623 /*create contact node*/
623 c_node = xmlnode_new("c"); 624 c_node = xmlnode_new("c");
624 xmlnode_set_attrib(c_node,"n",email); 625 xmlnode_set_attrib(c_node,"n",email);
625 626
626 list_op_str = g_strdup_printf("%d",list_op); 627 list_op_str = g_strdup_printf("%d",list_op);
627 purple_debug_info("MaYuan","list_op:%d\n",list_op); 628 purple_debug_info("MaYuan","list_op: %d\n",list_op);
628 xmlnode_set_attrib(c_node,"l",list_op_str); 629 xmlnode_set_attrib(c_node,"l",list_op_str);
629 g_free(list_op_str); 630 g_free(list_op_str);
630 631
631 if (type != MSN_USER_TYPE_UNKNOWN) { 632 if (type != MSN_USER_TYPE_UNKNOWN) {
632 type_str = g_strdup_printf("%d", type); 633 type_str = g_strdup_printf("%d", type);
648 649
649 static void 650 static void
650 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)
651 { 652 {
652 MsnTransaction *trans; 653 MsnTransaction *trans;
653 654 purple_debug_info("::","msn_notification_post_adl()\n");
654 purple_debug_info("MaYuan","Send ADL{%s}\n",payload); 655 purple_debug_info("MaYuan","Sending ADL with payload: %s\n",payload);
655 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); 656 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
656 msn_transaction_set_payload(trans, payload, strlen(payload)); 657 msn_transaction_set_payload(trans, payload, strlen(payload));
657 msn_cmdproc_send_trans(cmdproc, trans); 658 msn_cmdproc_send_trans(cmdproc, trans);
658 } 659 }
659 660
667 char *payload; 668 char *payload;
668 int payload_len; 669 int payload_len;
669 int adl_count = 0; 670 int adl_count = 0;
670 const char *display_name; 671 const char *display_name;
671 672
673 purple_debug_info("::","msn_notification_dump_contact()\n");
672 adl_node = xmlnode_new("ml"); 674 adl_node = xmlnode_new("ml");
673 adl_node->child = NULL; 675 adl_node->child = NULL;
674 xmlnode_set_attrib(adl_node, "l", "1"); 676 xmlnode_set_attrib(adl_node, "l", "1");
675 677
676 /*get the userlist*/ 678 /*get the userlist*/
748 750
749 purple_debug_info("MaYuan","Process ADL\n"); 751 purple_debug_info("MaYuan","Process ADL\n");
750 752
751 if (!initial) 753 if (!initial)
752 { 754 {
753 purple_debug_info("::","Initial ADL received\n"); 755 purple_debug_info("typ0","Initial ADL received\n");
754 msn_session_finish_login(cmdproc->session); 756 msn_session_finish_login(cmdproc->session);
755 } 757 }
756 } 758 }
757 759
758 static void 760 static void
890 { 892 {
891 MsnSession *session; 893 MsnSession *session;
892 gint group_id; 894 gint group_id;
893 const char *group_name; 895 const char *group_name;
894 896
897 purple_debug_info("::","adg_cmd()\n");
898
895 session = cmdproc->session; 899 session = cmdproc->session;
896 900
897 group_id = atoi(cmd->params[3]); 901 group_id = atoi(cmd->params[3]);
898 902
899 group_name = purple_url_decode(cmd->params[2]); 903 group_name = purple_url_decode(cmd->params[2]);
1549 } 1553 }
1550 1554
1551 static void 1555 static void
1552 ubx_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1556 ubx_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1553 { 1557 {
1554 purple_debug_info("MaYuan","UBX... \n"); 1558 purple_debug_info("typ0","UBX received.\n");
1555 if(cmd->payload_len == 0){ 1559 if(cmd->payload_len == 0){
1556 return; 1560 return;
1557 } 1561 }
1558 cmdproc->last_cmd->payload_cb = ubx_cmd_post; 1562 cmdproc->last_cmd->payload_cb = ubx_cmd_post;
1559 } 1563 }
1560 1564
1561 static void 1565 static void
1562 uux_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1566 uux_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1563 { 1567 {
1564 purple_debug_info("MaYuan","UUX... \n"); 1568 purple_debug_info("typ0","UUX received.\n");
1565 } 1569 }
1566 1570
1567 /************************************************************************** 1571 /**************************************************************************
1568 * Message Types 1572 * Message Types
1569 **************************************************************************/ 1573 **************************************************************************/
1573 { 1577 {
1574 MsnSession *session; 1578 MsnSession *session;
1575 const char *value; 1579 const char *value;
1576 const char *clLastChange; 1580 const char *clLastChange;
1577 1581
1578 purple_debug_info("MaYuan","profile_msg... \n"); 1582 purple_debug_info("::","profile_msg()\n");
1579 session = cmdproc->session; 1583 session = cmdproc->session;
1580 1584
1581 if (strcmp(msg->remote_user, "Hotmail")) 1585 if (strcmp(msg->remote_user, "Hotmail"))
1582 /* This isn't an official message. */ 1586 /* This isn't an official message. */
1583 return; 1587 return;
1758 1762
1759 /*offline Message Notification*/ 1763 /*offline Message Notification*/
1760 static void 1764 static void
1761 delete_oim_msg(MsnCmdProc *cmdproc, MsnMessage *msg) 1765 delete_oim_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
1762 { 1766 {
1767 purple_debug_info("::","delete_oim_msg()\n");
1763 } 1768 }
1764 1769
1765 static void 1770 static void
1766 email_msg(MsnCmdProc *cmdproc, MsnMessage *msg) 1771 email_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
1767 { 1772 {
1869 { 1874 {
1870 MsnCmdProc *cmdproc; 1875 MsnCmdProc *cmdproc;
1871 xmlnode *adl_node; 1876 xmlnode *adl_node;
1872 char *payload; 1877 char *payload;
1873 int payload_len; 1878 int payload_len;
1874 1879 purple_debug_info("::","msn_notification_add_buddy()\n");
1875 cmdproc = notification->servconn->cmdproc; 1880 cmdproc = notification->servconn->cmdproc;
1876 1881
1877 adl_node = xmlnode_new("ml"); 1882 adl_node = xmlnode_new("ml");
1878 adl_node->child = NULL; 1883 adl_node->child = NULL;
1879 1884
1900 MsnTransaction *trans; 1905 MsnTransaction *trans;
1901 xmlnode *rml_node; 1906 xmlnode *rml_node;
1902 char *payload; 1907 char *payload;
1903 int payload_len; 1908 int payload_len;
1904 1909
1910 purple_debug_info("::","msn_notification_rem_buddy()\n");
1905 cmdproc = notification->servconn->cmdproc; 1911 cmdproc = notification->servconn->cmdproc;
1906 1912
1907 rml_node = xmlnode_new("ml"); 1913 rml_node = xmlnode_new("ml");
1908 rml_node->child = NULL; 1914 rml_node->child = NULL;
1909 1915
1910 msn_add_contact_xml(notification->session,rml_node,who,1,MSN_USER_TYPE_PASSPORT); 1916 msn_add_contact_xml(notification->session,rml_node,who,1,MSN_USER_TYPE_PASSPORT);
1911 1917
1912 payload = xmlnode_to_str(rml_node,&payload_len); 1918 payload = xmlnode_to_str(rml_node,&payload_len);
1913 xmlnode_free(rml_node); 1919 xmlnode_free(rml_node);
1914 1920
1915 purple_debug_info("MaYuan","RML{%s}\n",payload); 1921 purple_debug_info("MaYuan","Send RML with payload {%s}\n",payload);
1916 trans = msn_transaction_new(cmdproc, "RML","%d",strlen(payload)); 1922 trans = msn_transaction_new(cmdproc, "RML","%d",strlen(payload));
1917 msn_transaction_set_payload(trans, payload, strlen(payload)); 1923 msn_transaction_set_payload(trans, payload, strlen(payload));
1918 msn_cmdproc_send_trans(cmdproc, trans); 1924 msn_cmdproc_send_trans(cmdproc, trans);
1919 } 1925 }
1920 1926