changeset 30658:ed838ad00173

Fix MSN protocol version detection to use the best version returned by the server.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Wed, 02 Dec 2009 02:46:59 +0000
parents e30865b62859
children 88c48bcb5455
files libpurple/protocols/msn/notification.c libpurple/protocols/msn/session.c
diffstat 2 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/msn/notification.c	Tue Dec 01 22:13:30 2009 +0000
+++ b/libpurple/protocols/msn/notification.c	Wed Dec 02 02:46:59 2009 +0000
@@ -236,20 +236,22 @@
 	MsnSession *session;
 	PurpleAccount *account;
 	gboolean protocol_supported = FALSE;
-	char proto_str[8];
+	int proto_ver;
 	size_t i;
 
 	session = cmdproc->session;
 	account = session->account;
 
-	g_snprintf(proto_str, sizeof(proto_str), "MSNP%d", session->protocol_ver);
-
+	session->protocol_ver = 0;
 	for (i = 1; i < cmd->param_count; i++)
 	{
-		if (!strcmp(cmd->params[i], proto_str))
-		{
-			protocol_supported = TRUE;
-			break;
+		if (sscanf(cmd->params[i], "MSNP%d", &proto_ver) == 1) {
+			if (proto_ver >= WLM_MIN_PROTOCOL
+			 && proto_ver <= WLM_MAX_PROTOCOL
+			 && proto_ver > session->protocol_ver) {
+				protocol_supported = TRUE;
+				session->protocol_ver = proto_ver;
+			}
 		}
 	}
 
@@ -260,6 +262,8 @@
 		return;
 	}
 
+	purple_debug_info("msn", "Negotiated protocol version %d with the server.\n", session->protocol_ver);
+
 	/*
 	 * Windows Live Messenger 8.5
 	 * Notice :CVR String discriminate!
--- a/libpurple/protocols/msn/session.c	Tue Dec 01 22:13:30 2009 +0000
+++ b/libpurple/protocols/msn/session.c	Wed Dec 02 02:46:59 2009 +0000
@@ -46,7 +46,7 @@
 								 purple_account_get_username(account), NULL);
 	session->oim = msn_oim_new(session);
 
-	session->protocol_ver = WLM_PROT_VER;
+	session->protocol_ver = 0;
 
 	session->guid = rand_guid();