comparison libpurple/protocols/msn/notification.c @ 20447:18ecdee88ed0

Add Pending list to recognized lists during contact list parsing Don't try pushing Reverse or Pending lists to notification server Improvements to detecting Yahoo users so Passports with @yahoo.com addresses will work better. Fixes #1331
author Stu Tomlinson <stu@nosnilmot.com>
date Mon, 28 May 2007 16:12:25 +0000
parents 9e585c2dbf07
children 4403cecc7cd6
comparison
equal deleted inserted replaced
20446:9e585c2dbf07 20447:18ecdee88ed0
38 * Local Function Prototype 38 * Local Function Prototype
39 ****************************************************************************/ 39 ****************************************************************************/
40 40
41 static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport); 41 static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport);
42 static void msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_len); 42 static void msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_len);
43 static void msn_add_contact_xml(xmlnode *mlNode, const char *passport, int list_op, MsnUserType type); 43 static void msn_add_contact_xml(MsnSession *session, xmlnode *mlNode, const char *passport, int list_op, MsnUserType type);
44 44
45 /************************************************************************** 45 /**************************************************************************
46 * Main 46 * Main
47 **************************************************************************/ 47 **************************************************************************/
48 48
582 582
583 /************************************************************************** 583 /**************************************************************************
584 * Buddy Lists 584 * Buddy Lists
585 **************************************************************************/ 585 **************************************************************************/
586 /* add contact to xmlnode */ 586 /* add contact to xmlnode */
587 static void 587 static void
588 msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op, MsnUserType type) 588 msn_add_contact_xml(MsnSession *session, xmlnode *mlNode,const char *passport,int list_op, MsnUserType type)
589 { 589 {
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\n",passport); 595 purple_debug_info("MaYuan","passport:%s type: %d\n",passport, type);
596 tokens = g_strsplit(passport, "@", 2); 596 tokens = g_strsplit(passport, "@", 2);
597 email = tokens[0]; 597 email = tokens[0];
598 domain = tokens[1]; 598 domain = tokens[1];
599 599
600 /*find a domain Node*/ 600 /*find a domain Node*/
625 625
626 list_op_str = g_strdup_printf("%d",list_op); 626 list_op_str = g_strdup_printf("%d",list_op);
627 purple_debug_info("MaYuan","list_op:%d\n",list_op); 627 purple_debug_info("MaYuan","list_op:%d\n",list_op);
628 xmlnode_set_attrib(c_node,"l",list_op_str); 628 xmlnode_set_attrib(c_node,"l",list_op_str);
629 g_free(list_op_str); 629 g_free(list_op_str);
630 #if 0 630
631 type_str = g_strdup_printf("%d",type); 631 if (type != MSN_USER_TYPE_UNKNOWN) {
632 xmlnode_set_attrib(c_node,"t",type_str); 632 type_str = g_strdup_printf("%d", type);
633 #else 633 } else {
634 if(g_strrstr(domain,"yahoo") != NULL){ 634 if (msn_user_is_yahoo(session->account, passport))
635 type_str = g_strdup_printf("%d", MSN_USER_TYPE_YAHOO); 635 type_str = g_strdup_printf("%d", MSN_USER_TYPE_YAHOO);
636 }else{ 636 else
637 /*passport*/ 637 type_str = g_strdup_printf("%d", MSN_USER_TYPE_PASSPORT);
638 type_str = g_strdup_printf("%d", MSN_USER_TYPE_PASSPORT);
639 } 638 }
640 /*mobile*/ 639 /*mobile*/
641 //type_str = g_strdup_printf("4"); 640 //type_str = g_strdup_printf("4");
642 xmlnode_set_attrib(c_node,"t",type_str); 641 xmlnode_set_attrib(c_node,"t",type_str);
643 g_free(type_str); 642 g_free(type_str);
644 #endif 643
645 xmlnode_insert_child(d_node, c_node); 644 xmlnode_insert_child(d_node, c_node);
646 645
647 g_strfreev(tokens); 646 g_strfreev(tokens);
648 } 647 }
649 648
675 xmlnode_set_attrib(adl_node, "l", "1"); 674 xmlnode_set_attrib(adl_node, "l", "1");
676 675
677 /*get the userlist*/ 676 /*get the userlist*/
678 for (l = session->userlist->users; l != NULL; l = l->next){ 677 for (l = session->userlist->users; l != NULL; l = l->next){
679 user = l->data; 678 user = l->data;
680 msn_add_contact_xml(adl_node, user->passport, 679
680 /* skip RL & PL during initial dump */
681 if (!(user->list_op & MSN_LIST_OP_MASK))
682 continue;
683
684 msn_add_contact_xml(session, adl_node, user->passport,
681 user->list_op & MSN_LIST_OP_MASK, user->type); 685 user->list_op & MSN_LIST_OP_MASK, user->type);
682 686
683 /* each ADL command may contain up to 150 contacts */ 687 /* each ADL command may contain up to 150 contacts */
684 if (++adl_count % 150 == 0 || l->next == NULL) { 688 if (++adl_count % 150 == 0 || l->next == NULL) {
685 payload = xmlnode_to_str(adl_node,&payload_len); 689 payload = xmlnode_to_str(adl_node,&payload_len);
1861 cmdproc = notification->servconn->cmdproc; 1865 cmdproc = notification->servconn->cmdproc;
1862 1866
1863 adl_node = xmlnode_new("ml"); 1867 adl_node = xmlnode_new("ml");
1864 adl_node->child = NULL; 1868 adl_node->child = NULL;
1865 1869
1866 msn_add_contact_xml(adl_node,who,1,MSN_USER_TYPE_PASSPORT); 1870 msn_add_contact_xml(notification->session,adl_node,who,1,MSN_USER_TYPE_PASSPORT);
1867 1871
1868 payload = xmlnode_to_str(adl_node,&payload_len); 1872 payload = xmlnode_to_str(adl_node,&payload_len);
1869 xmlnode_free(adl_node); 1873 xmlnode_free(adl_node);
1870 if (msn_user_is_yahoo(notification->session->account,who)) 1874 if (msn_user_is_yahoo(notification->session->account,who))
1871 { 1875 {
1891 cmdproc = notification->servconn->cmdproc; 1895 cmdproc = notification->servconn->cmdproc;
1892 1896
1893 rml_node = xmlnode_new("ml"); 1897 rml_node = xmlnode_new("ml");
1894 rml_node->child = NULL; 1898 rml_node->child = NULL;
1895 1899
1896 msn_add_contact_xml(rml_node,who,1,MSN_USER_TYPE_PASSPORT); 1900 msn_add_contact_xml(notification->session,rml_node,who,1,MSN_USER_TYPE_PASSPORT);
1897 1901
1898 payload = xmlnode_to_str(rml_node,&payload_len); 1902 payload = xmlnode_to_str(rml_node,&payload_len);
1899 xmlnode_free(rml_node); 1903 xmlnode_free(rml_node);
1900 1904
1901 purple_debug_info("MaYuan","RML{%s}\n",payload); 1905 purple_debug_info("MaYuan","RML{%s}\n",payload);