Mercurial > pidgin.yaz
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 |