diff 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
line wrap: on
line diff
--- a/libgaim/protocols/msn/notification.c	Sun Apr 15 02:18:17 2007 +0000
+++ b/libgaim/protocols/msn/notification.c	Sun Apr 15 02:43:47 2007 +0000
@@ -37,9 +37,10 @@
 /****************************************************************************
  * 	Local Function Prototype
  ****************************************************************************/
-void msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload ,int payload_len);
 
-void msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type);
+static void msn_notification_fqy_yahoo(MsnSession *session, const char *passport);
+static void msn_notification_post_adl(MsnCmdProc *cmdproc, char *payload, int payload_len);
+static void msn_add_contact_xml(xmlnode *mlNode, const char *passport, int list_op, int type);
 
 /**************************************************************************
  * Main
@@ -233,15 +234,17 @@
 
 	if (!g_ascii_strcasecmp(cmd->params[1], "OK")){
 		/* authenticate OK */
+		/* friendly name part no longer true in msnp11 */
+#if 0
 		const char *friendly = gaim_url_decode(cmd->params[3]);
 
 		gaim_connection_set_display_name(gc, friendly);
-
+#endif
 		msn_session_set_login_step(session, MSN_LOGIN_STEP_SYN);
 
 //		msn_cmdproc_send(cmdproc, "SYN", "%s", "0");
 		//TODO we should use SOAP contact to fetch contact list
-	}else if (!g_ascii_strcasecmp(cmd->params[1], "TWN")){
+	} else if (!g_ascii_strcasecmp(cmd->params[1], "TWN")){
 		/* Passport authentication */
 		char **elems, **cur, **tokens;
 
@@ -561,7 +564,7 @@
  * Buddy Lists
  **************************************************************************/
 /* add contact to xmlnode */
-void 
+static void 
 msn_add_contact_xml(xmlnode *mlNode,const char *passport,int list_op,int type)
 {
 	xmlnode *d_node,*c_node;
@@ -622,10 +625,19 @@
 	g_free(tokens);
 }
 
-void
+static void
 msn_notification_post_adl(MsnCmdProc *cmdproc,char *payload, int payload_len)
 {
 	MsnTransaction *trans;
+	const char *display_name;
+	const char *friendly;
+
+	display_name = gaim_connection_get_display_name(cmdproc->session->account->gc);
+	if (display_name) {
+		friendly = gaim_url_encode(display_name);
+		msn_cmdproc_send(cmdproc, "PRP", "MFN %s", friendly);
+	}
+
 
 	gaim_debug_info("MaYuan","Send ADL{%s}\n",payload);
 	trans = msn_transaction_new(cmdproc, "ADL","%d",strlen(payload));
@@ -662,8 +674,8 @@
 }
 
 /*Post FQY to NS,Inform add a Yahoo User*/
-void
-msn_notification_fqy_yahoo(MsnSession *session,char *passport)
+static void
+msn_notification_fqy_yahoo(MsnSession *session, const char *passport)
 {
 	MsnTransaction *trans;
 	MsnCmdProc *cmdproc;
@@ -715,8 +727,10 @@
 static void
 rml_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
 {
+#if 0
 	MsnTransaction *trans;
 	char * payload;
+#endif
 
 	gaim_debug_info("MaYuan","Process ADL\n");
 #if 0
@@ -820,7 +834,7 @@
 
 	group_name = gaim_url_decode(cmd->params[2]);
 
-	msn_group_new(session->userlist, group_id, group_name);
+	msn_group_new(session->userlist, cmd->params[3], group_name);
 
 	/* There is a user that must me moved to this group */
 	if (cmd->trans->data)
@@ -1045,6 +1059,12 @@
 			msn_user_set_work_phone(session->user, NULL);
 		else if (!strcmp(type, "PHM"))
 			msn_user_set_mobile_phone(session->user, NULL);
+		else if (!strcmp(type, "MFM")) {
+			type = cmd->params[1];
+			gaim_connection_set_display_name(
+				gaim_account_get_connection(session->account),
+				gaim_url_decode(cmd->params[2]));
+		}
 	}
 }
 
@@ -1052,11 +1072,10 @@
 reg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
 {
 	MsnSession *session;
-	int group_id;
-	const char *group_name;
+	const char *group_id, *group_name;
 
 	session = cmdproc->session;
-	group_id = atoi(cmd->params[2]);
+	group_id = cmd->params[2];
 	group_name = gaim_url_decode(cmd->params[3]);
 
 	msn_userlist_rename_group_id(session->userlist, group_id, group_name);
@@ -1082,10 +1101,8 @@
 {
 	MsnSession *session;
 	MsnUser *user;
-	const char *list;
-	const char *passport;
+	const char *group_id, *list, *passport;
 	MsnListId list_id;
-	int group_id;
 
 	session = cmdproc->session;
 	list = cmd->params[1];
@@ -1097,9 +1114,9 @@
 	list_id = msn_get_list_id(list);
 
 	if (cmd->param_count == 5)
-		group_id = atoi(cmd->params[4]);
+		group_id = cmd->params[4];
 	else
-		group_id = -1;
+		group_id = NULL;
 
 	msn_got_rem_user(session, user, list_id, group_id);
 	msn_user_update(user);
@@ -1109,10 +1126,10 @@
 rmg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
 {
 	MsnSession *session;
-	int group_id;
+	const char *group_id;
 
 	session = cmdproc->session;
-	group_id = atoi(cmd->params[2]);
+	group_id = cmd->params[2];
 
 	msn_userlist_remove_group_id(session->userlist, group_id);
 }
@@ -1120,7 +1137,7 @@
 static void
 rmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error)
 {
-	int group_id;
+	const char *group_id;
 	char **params;
 
 	params = g_strsplit(trans->params, " ", 0);
@@ -1412,7 +1429,8 @@
 	GaimAccount *account;
 	GaimConnection *gc;
 	MsnUser *user;
-	const char *passport, *psm_str;
+	const char *passport;
+	char *psm_str;
 
 	/*get the payload content*/
 //	gaim_debug_info("MaYuan","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload);
@@ -1507,7 +1525,7 @@
 	msn_session_set_bnode(session);
 	session->contact = msn_contact_new(session);
 	clLastChange = gaim_blist_node_get_string(msn_session_get_bnode(session),"CLLastChange");
-	msn_get_contact_list(session->contact,clLastChange);
+	msn_get_contact_list(session->contact, clLastChange);
 //	msn_contact_connect(session->contact);
 }
 
@@ -1738,7 +1756,6 @@
 						   const char *group_id)
 {
 	MsnCmdProc *cmdproc;
-	MsnTransaction *trans;
 	xmlnode *adl_node;
 	char *payload;
 	int payload_len;