comparison libgaim/protocols/msn/notification.c @ 20391:0b0ecee55091

The second msn.tgz from SF Patch #1621854 from Ka-Hing Cheung. "new version, fixes some crashes because group_id is char * but in some places it's set to an int (!). skadotnet, I don't understand why you need `if (!strcmp(type, "MFN")) {` in so many places, so I didn't include most of them. I also have different versions of some of your fixes because I already fixed them. Group manipulations may still not work, at least it's not crashing :-)" committer: Richard Laager <rlaager@wiktel.com>
author Ka-Hing Cheung <khc@hxbc.us>
date Sun, 15 Apr 2007 02:43:47 +0000
parents e354528c4163
children 9ba7dee775e1
comparison
equal deleted inserted replaced
20390:d634f88e25d8 20391:0b0ecee55091
35 static MsnTable *cbs_table; 35 static MsnTable *cbs_table;
36 36
37 /**************************************************************************** 37 /****************************************************************************
38 * Local Function Prototype 38 * Local Function Prototype
39 ****************************************************************************/ 39 ****************************************************************************/
40 void msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload ,int payload_len); 40
41 41 static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport);
42 void msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type); 42 static void msn_notification_post_adl(MsnCmdProc *cmdproc, char *payload, int payload_len);
43 static void msn_add_contact_xml(xmlnode *mlNode, const char *passport, int list_op, int type);
43 44
44 /************************************************************************** 45 /**************************************************************************
45 * Main 46 * Main
46 **************************************************************************/ 47 **************************************************************************/
47 48
231 account = session->account; 232 account = session->account;
232 gc = gaim_account_get_connection(account); 233 gc = gaim_account_get_connection(account);
233 234
234 if (!g_ascii_strcasecmp(cmd->params[1], "OK")){ 235 if (!g_ascii_strcasecmp(cmd->params[1], "OK")){
235 /* authenticate OK */ 236 /* authenticate OK */
237 /* friendly name part no longer true in msnp11 */
238 #if 0
236 const char *friendly = gaim_url_decode(cmd->params[3]); 239 const char *friendly = gaim_url_decode(cmd->params[3]);
237 240
238 gaim_connection_set_display_name(gc, friendly); 241 gaim_connection_set_display_name(gc, friendly);
239 242 #endif
240 msn_session_set_login_step(session, MSN_LOGIN_STEP_SYN); 243 msn_session_set_login_step(session, MSN_LOGIN_STEP_SYN);
241 244
242 // msn_cmdproc_send(cmdproc, "SYN", "%s", "0"); 245 // msn_cmdproc_send(cmdproc, "SYN", "%s", "0");
243 //TODO we should use SOAP contact to fetch contact list 246 //TODO we should use SOAP contact to fetch contact list
244 }else if (!g_ascii_strcasecmp(cmd->params[1], "TWN")){ 247 } else if (!g_ascii_strcasecmp(cmd->params[1], "TWN")){
245 /* Passport authentication */ 248 /* Passport authentication */
246 char **elems, **cur, **tokens; 249 char **elems, **cur, **tokens;
247 250
248 session->nexus = msn_nexus_new(session); 251 session->nexus = msn_nexus_new(session);
249 252
559 562
560 /************************************************************************** 563 /**************************************************************************
561 * Buddy Lists 564 * Buddy Lists
562 **************************************************************************/ 565 **************************************************************************/
563 /* add contact to xmlnode */ 566 /* add contact to xmlnode */
564 void 567 static void
565 msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type) 568 msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type)
566 { 569 {
567 xmlnode *d_node,*c_node; 570 xmlnode *d_node,*c_node;
568 char **tokens; 571 char **tokens;
569 char *email,*domain; 572 char *email,*domain;
620 xmlnode_insert_child(d_node, c_node); 623 xmlnode_insert_child(d_node, c_node);
621 624
622 g_free(tokens); 625 g_free(tokens);
623 } 626 }
624 627
625 void 628 static void
626 msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload, int payload_len) 629 msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload, int payload_len)
627 { 630 {
628 MsnTransaction *trans; 631 MsnTransaction *trans;
632 const char *display_name;
633 const char *friendly;
634
635 display_name = gaim_connection_get_display_name(cmdproc->session->account->gc);
636 if (display_name) {
637 friendly = gaim_url_encode(display_name);
638 msn_cmdproc_send(cmdproc, "PRP", "MFN %s", friendly);
639 }
640
629 641
630 gaim_debug_info("MaYuan","Send ADL{%s}\n",payload); 642 gaim_debug_info("MaYuan","Send ADL{%s}\n",payload);
631 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload)); 643 trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
632 msn_transaction_set_payload(trans, payload, strlen(payload)); 644 msn_transaction_set_payload(trans, payload, strlen(payload));
633 msn_cmdproc_send_trans(cmdproc, trans); 645 msn_cmdproc_send_trans(cmdproc, trans);
660 672
661 msn_notification_post_adl(session->notification->cmdproc,payload,payload_len); 673 msn_notification_post_adl(session->notification->cmdproc,payload,payload_len);
662 } 674 }
663 675
664 /*Post FQY to NS,Inform add a Yahoo User*/ 676 /*Post FQY to NS,Inform add a Yahoo User*/
665 void 677 static void
666 msn_notification_fqy_yahoo(MsnSession *session,char *passport) 678 msn_notification_fqy_yahoo(MsnSession *session, const char *passport)
667 { 679 {
668 MsnTransaction *trans; 680 MsnTransaction *trans;
669 MsnCmdProc *cmdproc; 681 MsnCmdProc *cmdproc;
670 char* email,*domain,*payload; 682 char* email,*domain,*payload;
671 char **tokens; 683 char **tokens;
713 } 725 }
714 726
715 static void 727 static void
716 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 728 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
717 { 729 {
730 #if 0
718 MsnTransaction *trans; 731 MsnTransaction *trans;
719 char * payload; 732 char * payload;
733 #endif
720 734
721 gaim_debug_info("MaYuan","Process ADL\n"); 735 gaim_debug_info("MaYuan","Process ADL\n");
722 #if 0 736 #if 0
723 trans = msn_transaction_new(cmdproc, "RML",""); 737 trans = msn_transaction_new(cmdproc, "RML","");
724 738
818 832
819 group_id = atoi(cmd->params[3]); 833 group_id = atoi(cmd->params[3]);
820 834
821 group_name = gaim_url_decode(cmd->params[2]); 835 group_name = gaim_url_decode(cmd->params[2]);
822 836
823 msn_group_new(session->userlist, group_id, group_name); 837 msn_group_new(session->userlist, cmd->params[3], group_name);
824 838
825 /* There is a user that must me moved to this group */ 839 /* There is a user that must me moved to this group */
826 if (cmd->trans->data) 840 if (cmd->trans->data)
827 { 841 {
828 /* msn_userlist_move_buddy(); */ 842 /* msn_userlist_move_buddy(); */
1043 msn_user_set_home_phone(session->user, NULL); 1057 msn_user_set_home_phone(session->user, NULL);
1044 else if (!strcmp(type, "PHW")) 1058 else if (!strcmp(type, "PHW"))
1045 msn_user_set_work_phone(session->user, NULL); 1059 msn_user_set_work_phone(session->user, NULL);
1046 else if (!strcmp(type, "PHM")) 1060 else if (!strcmp(type, "PHM"))
1047 msn_user_set_mobile_phone(session->user, NULL); 1061 msn_user_set_mobile_phone(session->user, NULL);
1062 else if (!strcmp(type, "MFM")) {
1063 type = cmd->params[1];
1064 gaim_connection_set_display_name(
1065 gaim_account_get_connection(session->account),
1066 gaim_url_decode(cmd->params[2]));
1067 }
1048 } 1068 }
1049 } 1069 }
1050 1070
1051 static void 1071 static void
1052 reg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1072 reg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1053 { 1073 {
1054 MsnSession *session; 1074 MsnSession *session;
1055 int group_id; 1075 const char *group_id, *group_name;
1056 const char *group_name;
1057 1076
1058 session = cmdproc->session; 1077 session = cmdproc->session;
1059 group_id = atoi(cmd->params[2]); 1078 group_id = cmd->params[2];
1060 group_name = gaim_url_decode(cmd->params[3]); 1079 group_name = gaim_url_decode(cmd->params[3]);
1061 1080
1062 msn_userlist_rename_group_id(session->userlist, group_id, group_name); 1081 msn_userlist_rename_group_id(session->userlist, group_id, group_name);
1063 } 1082 }
1064 1083
1080 static void 1099 static void
1081 rem_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1100 rem_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1082 { 1101 {
1083 MsnSession *session; 1102 MsnSession *session;
1084 MsnUser *user; 1103 MsnUser *user;
1085 const char *list; 1104 const char *group_id, *list, *passport;
1086 const char *passport;
1087 MsnListId list_id; 1105 MsnListId list_id;
1088 int group_id;
1089 1106
1090 session = cmdproc->session; 1107 session = cmdproc->session;
1091 list = cmd->params[1]; 1108 list = cmd->params[1];
1092 passport = cmd->params[3]; 1109 passport = cmd->params[3];
1093 user = msn_userlist_find_user(session->userlist, passport); 1110 user = msn_userlist_find_user(session->userlist, passport);
1095 g_return_if_fail(user != NULL); 1112 g_return_if_fail(user != NULL);
1096 1113
1097 list_id = msn_get_list_id(list); 1114 list_id = msn_get_list_id(list);
1098 1115
1099 if (cmd->param_count == 5) 1116 if (cmd->param_count == 5)
1100 group_id = atoi(cmd->params[4]); 1117 group_id = cmd->params[4];
1101 else 1118 else
1102 group_id = -1; 1119 group_id = NULL;
1103 1120
1104 msn_got_rem_user(session, user, list_id, group_id); 1121 msn_got_rem_user(session, user, list_id, group_id);
1105 msn_user_update(user); 1122 msn_user_update(user);
1106 } 1123 }
1107 1124
1108 static void 1125 static void
1109 rmg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 1126 rmg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
1110 { 1127 {
1111 MsnSession *session; 1128 MsnSession *session;
1112 int group_id; 1129 const char *group_id;
1113 1130
1114 session = cmdproc->session; 1131 session = cmdproc->session;
1115 group_id = atoi(cmd->params[2]); 1132 group_id = cmd->params[2];
1116 1133
1117 msn_userlist_remove_group_id(session->userlist, group_id); 1134 msn_userlist_remove_group_id(session->userlist, group_id);
1118 } 1135 }
1119 1136
1120 static void 1137 static void
1121 rmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) 1138 rmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error)
1122 { 1139 {
1123 int group_id; 1140 const char *group_id;
1124 char **params; 1141 char **params;
1125 1142
1126 params = g_strsplit(trans->params, " ", 0); 1143 params = g_strsplit(trans->params, " ", 0);
1127 1144
1128 group_id = atoi(params[0]); 1145 group_id = atoi(params[0]);
1410 { 1427 {
1411 MsnSession *session; 1428 MsnSession *session;
1412 GaimAccount *account; 1429 GaimAccount *account;
1413 GaimConnection *gc; 1430 GaimConnection *gc;
1414 MsnUser *user; 1431 MsnUser *user;
1415 const char *passport, *psm_str; 1432 const char *passport;
1433 char *psm_str;
1416 1434
1417 /*get the payload content*/ 1435 /*get the payload content*/
1418 // gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); 1436 // gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload);
1419 1437
1420 session = cmdproc->session; 1438 session = cmdproc->session;
1505 msn_userlist_load(session); 1523 msn_userlist_load(session);
1506 1524
1507 msn_session_set_bnode(session); 1525 msn_session_set_bnode(session);
1508 session->contact = msn_contact_new(session); 1526 session->contact = msn_contact_new(session);
1509 clLastChange = gaim_blist_node_get_string(msn_session_get_bnode(session),"CLLastChange"); 1527 clLastChange = gaim_blist_node_get_string(msn_session_get_bnode(session),"CLLastChange");
1510 msn_get_contact_list(session->contact,clLastChange); 1528 msn_get_contact_list(session->contact, clLastChange);
1511 // msn_contact_connect(session->contact); 1529 // msn_contact_connect(session->contact);
1512 } 1530 }
1513 1531
1514 static void 1532 static void
1515 initial_email_msg(MsnCmdProc *cmdproc, MsnMessage *msg) 1533 initial_email_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
1736 msn_notification_add_buddy(MsnNotification *notification, const char *list, 1754 msn_notification_add_buddy(MsnNotification *notification, const char *list,
1737 const char *who, const char *store_name, 1755 const char *who, const char *store_name,
1738 const char *group_id) 1756 const char *group_id)
1739 { 1757 {
1740 MsnCmdProc *cmdproc; 1758 MsnCmdProc *cmdproc;
1741 MsnTransaction *trans;
1742 xmlnode *adl_node; 1759 xmlnode *adl_node;
1743 char *payload; 1760 char *payload;
1744 int payload_len; 1761 int payload_len;
1745 1762
1746 cmdproc = notification->servconn->cmdproc; 1763 cmdproc = notification->servconn->cmdproc;