changeset 25260:302f13678ea3

propagate from branch 'im.pidgin.pidgin' (head f94ddf7fa975e3a39a53fccae31b7e73f892fd57) to branch 'im.pidgin.cpw.malu.xmpp.attention' (head a0f89b9cc3f1120c218f9b703ac18a8b8eec3557)
author Marcus Lundblad <ml@update.uu.se>
date Sun, 28 Dec 2008 09:51:19 +0000
parents d15b50a4db53 (current diff) 689cfb82242e (diff)
children b874034d4df2
files libpurple/protocols/jabber/message.c
diffstat 9 files changed, 118 insertions(+), 118 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Dec 23 20:14:13 2008 +0000
+++ b/ChangeLog	Sun Dec 28 09:51:19 2008 +0000
@@ -6,6 +6,8 @@
 	  Rosinski)
 	* Don't ignore namespace information when parsing XMPP data. (Michal
 	  Witkowski)
+	* Fix a crash that occurred when retrieving certain Offline Messages
+	  on MSN.
 
 	XMPP:
 	* Support for XEP-0191 blocking.  (Vijay Raghunathan)
@@ -130,7 +132,7 @@
 	  if no custom smilies have previously been added using the smiley
 	  manager.
 	* Improved support for some message formatting in conversations.
-	* Allow focusing the coversation history or userlist with F6.
+	* Allow focusing the conversation history or userlist with F6.
 	* Fixed the Send Button plugin to avoid duplicate buttons in a single
 	  conversation.
 	* Double-clicking a saved status will now activate it and close the
--- a/libpurple/protocols/jabber/message.c	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/jabber/message.c	Sun Dec 28 09:51:19 2008 +0000
@@ -291,27 +291,28 @@
 	PurpleAccount *account;
 	PurpleConversation *c;
 	char *username, *str;
-	
+
 	/* Delayed buzz MUST NOT be accepted */
 	if(jm->delayed)
 		return;
-	
+
 	/* Reject buzz when it's not enabled */
 	if(!jm->js->allowBuzz)
 		return;
-	
+
 	account = purple_connection_get_account(jm->js->gc);
-	
-	if ((buddy = purple_find_buddy(account, jm->from)) != NULL)
-		username = g_markup_escape_text(purple_buddy_get_alias(buddy), -1);
-	else
+
+	if ((buddy = purple_find_buddy(account, jm->from)) == NULL)
 		return; /* Do not accept buzzes from unknown people */
 
-	c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, jm->from);
+	c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, jm->from, account);
+	if (c == NULL)
+		c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, jm->from);
 
-	str = g_strdup_printf(_("%s has buzzed you!"), username);
-	
-	purple_conversation_write(c, NULL, str, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL));
+	username = g_markup_escape_text(purple_buddy_get_alias(buddy), -1);
+	/* xmpp only has 1 attention type, so index is 0 */
+	purple_prpl_got_attention(jm->js->gc, username, 0);
+
 	g_free(username);
 	g_free(str);
 }
--- a/libpurple/protocols/msn/error.c	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/msn/error.c	Sun Dec 28 09:51:19 2008 +0000
@@ -27,191 +27,178 @@
 const char *
 msn_error_get_text(unsigned int type, gboolean *debug)
 {
-	static char msg[MSN_BUF_LEN];
+	static char msg[256];
+	const char *result;
 	*debug = FALSE;
 
 	switch (type) {
 		case 0:
-			g_snprintf(msg, sizeof(msg),
-			           _("Unable to parse message"));
+			result = _("Unable to parse message");
 			*debug = TRUE;
 			break;
 		case 200:
-			g_snprintf(msg, sizeof(msg),
-			           _("Syntax Error (probably a client bug)"));
+			result = _("Syntax Error (probably a client bug)");
 			*debug = TRUE;
 			break;
 		case 201:
-			g_snprintf(msg, sizeof(msg),
-			           _("Invalid email address"));
+			result = _("Invalid email address");
 			break;
 		case 205:
-			g_snprintf(msg, sizeof(msg), _("User does not exist"));
+			result = _("User does not exist");
 			break;
 		case 206:
-			g_snprintf(msg, sizeof(msg),
-			           _("Fully qualified domain name missing"));
+			result = _("Fully qualified domain name missing");
 			break;
 		case 207:
-			g_snprintf(msg, sizeof(msg), _("Already logged in"));
+			result = _("Already logged in");
 			break;
 		case 208:
-			g_snprintf(msg, sizeof(msg), _("Invalid username"));
+			result = _("Invalid username");
 			break;
 		case 209:
-			g_snprintf(msg, sizeof(msg), _("Invalid friendly name"));
+			result = _("Invalid friendly name");
 			break;
 		case 210:
-			g_snprintf(msg, sizeof(msg), _("List full"));
+			result = _("List full");
 			break;
 		case 215:
-			g_snprintf(msg, sizeof(msg), _("Already there"));
+			result = _("Already there");
 			*debug = TRUE;
 			break;
 		case 216:
-			g_snprintf(msg, sizeof(msg), _("Not on list"));
+			result = _("Not on list");
 			break;
 		case 217:
-			g_snprintf(msg, sizeof(msg), _("User is offline"));
+			result = _("User is offline");
 			break;
 		case 218:
-			g_snprintf(msg, sizeof(msg), _("Already in the mode"));
+			result = _("Already in the mode");
 			*debug = TRUE;
 			break;
 		case 219:
-			g_snprintf(msg, sizeof(msg), _("Already in opposite list"));
+			result = _("Already in opposite list");
 			*debug = TRUE;
 			break;
 		case 223:
-			g_snprintf(msg, sizeof(msg), _("Too many groups"));
+			result = _("Too many groups");
 			break;
 		case 224:
-			g_snprintf(msg, sizeof(msg), _("Invalid group"));
+			result = _("Invalid group");
 			break;
 		case 225:
-			g_snprintf(msg, sizeof(msg), _("User not in group"));
+			result = _("User not in group");
 			break;
 		case 229:
-			g_snprintf(msg, sizeof(msg), _("Group name too long"));
+			result = _("Group name too long");
 			break;
 		case 230:
-			g_snprintf(msg, sizeof(msg), _("Cannot remove group zero"));
+			result = _("Cannot remove group zero");
 			*debug = TRUE;
 			break;
 		case 231:
-			g_snprintf(msg, sizeof(msg),
-			           _("Tried to add a user to a group "
-			             "that doesn't exist"));
+			result = _("Tried to add a user to a group that doesn't exist");
 			break;
 		case 280:
-			g_snprintf(msg, sizeof(msg), _("Switchboard failed"));
+			result = _("Switchboard failed");
 			*debug = TRUE;
 			break;
 		case 281:
-			g_snprintf(msg, sizeof(msg), _("Notify transfer failed"));
+			result = _("Notify transfer failed");
 			*debug = TRUE;
 			break;
 
 		case 300:
-			g_snprintf(msg, sizeof(msg), _("Required fields missing"));
+			result = _("Required fields missing");
 			*debug = TRUE;
 			break;
 		case 301:
-			g_snprintf(msg, sizeof(msg), _("Too many hits to a FND"));
+			result = _("Too many hits to a FND");
 			*debug = TRUE;
 			break;
 		case 302:
-			g_snprintf(msg, sizeof(msg), _("Not logged in"));
+			result = _("Not logged in");
 			break;
 
 		case 500:
-			g_snprintf(msg, sizeof(msg),
-			           _("Service temporarily unavailable"));
+			result = _("Service temporarily unavailable");
 			break;
 		case 501:
-			g_snprintf(msg, sizeof(msg), _("Database server error"));
+			result = _("Database server error");
 			*debug = TRUE;
 			break;
 		case 502:
-			g_snprintf(msg, sizeof(msg), _("Command disabled"));
+			result = _("Command disabled");
 			*debug = TRUE;
 			break;
 		case 510:
-			g_snprintf(msg, sizeof(msg), _("File operation error"));
+			result = _("File operation error");
 			*debug = TRUE;
 			break;
 		case 520:
-			g_snprintf(msg, sizeof(msg), _("Memory allocation error"));
+			result = _("Memory allocation error");
 			*debug = TRUE;
 			break;
 		case 540:
-			g_snprintf(msg, sizeof(msg),
-			           _("Wrong CHL value sent to server"));
+			result = _("Wrong CHL value sent to server");
 			*debug = TRUE;
 			break;
 
 		case 600:
-			g_snprintf(msg, sizeof(msg), _("Server busy"));
+			result = _("Server busy");
 			break;
 		case 601:
-			g_snprintf(msg, sizeof(msg), _("Server unavailable"));
+			result = _("Server unavailable");
 			break;
 		case 602:
-			g_snprintf(msg, sizeof(msg),
-			           _("Peer notification server down"));
+			result = _("Peer notification server down");
 			*debug = TRUE;
 			break;
 		case 603:
-			g_snprintf(msg, sizeof(msg), _("Database connect error"));
+			result = _("Database connect error");
 			*debug = TRUE;
 			break;
 		case 604:
-			g_snprintf(msg, sizeof(msg),
-					   _("Server is going down (abandon ship)"));
+			result = _("Server is going down (abandon ship)");
 			break;
 		case 605:
-			g_snprintf(msg, sizeof(msg), _("Server unavailable"));
+			result = _("Server unavailable");
 			break;
 
 		case 707:
-			g_snprintf(msg, sizeof(msg),
-			           _("Error creating connection"));
+			result = _("Error creating connection");
 			*debug = TRUE;
 			break;
 		case 710:
-			g_snprintf(msg, sizeof(msg),
-			           _("CVR parameters are either unknown "
-			             "or not allowed"));
+			result = _("CVR parameters are either unknown or not allowed");
 			*debug = TRUE;
 			break;
 		case 711:
-			g_snprintf(msg, sizeof(msg), _("Unable to write"));
+			result = _("Unable to write");
 			break;
 		case 712:
-			g_snprintf(msg, sizeof(msg), _("Session overload"));
+			result = _("Session overload");
 			*debug = TRUE;
 			break;
 		case 713:
-			g_snprintf(msg, sizeof(msg), _("User is too active"));
+			result = _("User is too active");
 			break;
 		case 714:
-			g_snprintf(msg, sizeof(msg), _("Too many sessions"));
+			result = _("Too many sessions");
 			break;
 		case 715:
-			g_snprintf(msg, sizeof(msg), _("Passport not verified"));
+			result = _("Passport not verified");
 			break;
 		case 717:
-			g_snprintf(msg, sizeof(msg), _("Bad friend file"));
+			result = _("Bad friend file");
 			*debug = TRUE;
 			break;
 		case 731:
-			g_snprintf(msg, sizeof(msg), _("Not expected"));
+			result = _("Not expected");
 			*debug = TRUE;
 			break;
 
 		case 800:
-			g_snprintf(msg, sizeof(msg),
-			           _("Friendly name changes too rapidly"));
+			result = _("Friendly name changes too rapidly");
 			break;
 
 		case 910:
@@ -220,37 +207,34 @@
 		case 919:
 		case 921:
 		case 922:
-			g_snprintf(msg, sizeof(msg), _("Server too busy"));
+			result = _("Server too busy");
 			break;
 		case 911:
 		case 917:
-			g_snprintf(msg, sizeof(msg), _("Authentication failed"));
+			result = _("Authentication failed");
 			break;
 		case 913:
-			g_snprintf(msg, sizeof(msg), _("Not allowed when offline"));
+			result = _("Not allowed when offline");
 			break;
 		case 914:
 		case 915:
 		case 916:
-			g_snprintf(msg, sizeof(msg), _("Server unavailable"));
+			result = _("Server unavailable");
 			break;
 		case 920:
-			g_snprintf(msg, sizeof(msg), _("Not accepting new users"));
+			result = _("Not accepting new users");
 			break;
 		case 923:
-			g_snprintf(msg, sizeof(msg),
-			           _("Kids Passport without parental consent"));
+			result = _("Kids Passport without parental consent");
 			break;
 		case 924:
-			g_snprintf(msg, sizeof(msg),
-			           _("Passport account not yet verified"));
+			result = _("Passport account not yet verified");
 			break;
 		case 927:
-			g_snprintf(msg, sizeof(msg),
-			           _("Passport account suspended"));
+			result = _("Passport account suspended");
 			break;
 		case 928:
-			g_snprintf(msg, sizeof(msg), _("Bad ticket"));
+			result = _("Bad ticket");
 			*debug = TRUE;
 			break;
 
@@ -258,23 +242,25 @@
 			g_snprintf(msg, sizeof(msg),
 			           _("Unknown Error Code %d"), type);
 			*debug = TRUE;
+			result = msg;
 			break;
 	}
 
-	return msg;
+	return result;
 }
 
 void
 msn_error_handle(MsnSession *session, unsigned int type)
 {
-	char buf[MSN_BUF_LEN];
+	char *buf;
 	gboolean debug;
 
-	g_snprintf(buf, sizeof(buf), _("MSN Error: %s\n"),
-	           msn_error_get_text(type, &debug));
+	buf = g_strdup_printf(_("MSN Error: %s\n"),
+	                      msn_error_get_text(type, &debug));
 	if (debug)
 		purple_debug_warning("msn", "error %d: %s\n", type, buf);
 	else
 		purple_notify_error(session->account->gc, NULL, buf, NULL);
+	g_free(buf);
 }
 
--- a/libpurple/protocols/msn/oim.c	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/msn/oim.c	Sun Dec 28 09:51:19 2008 +0000
@@ -596,6 +596,7 @@
 	MsnMessage *message;
 	const char *date;
 	const char *from;
+	const char *boundary;
 	char *decode_msg = NULL;
 	gsize body_len;
 	char **tokens;
@@ -608,27 +609,14 @@
 	                          MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM);
 	purple_debug_info("msn", "oim body:{%s}\n", message->body);
 
-	if (!strcmp(msn_message_get_attr(message, "X-OIMProxy"), "MOSMS")) {
-		char *boundary;
+	boundary = msn_message_get_attr(message, "boundary");
+
+	if (boundary != NULL) {
+		char *bounds;
 		char **part;
 
-		from = msn_message_get_attr(message, "X-OIM-originatingSource");
-
-		/* Match number to user's mobile number, FROM is a phone number
-		   if the other side pages you using your phone number */
-		if (!strncmp(from, "tel:+", 5)) {
-			MsnUser *user =	msn_userlist_find_user_with_mobile_phone(
-					rdata->oim->session->userlist, from + 4);
-
-			if (user && user->passport)
-				passport = g_strdup(user->passport);
-		}
-		if (passport == NULL)
-			passport = g_strdup(from);
-
-		boundary = g_strdup_printf("--%s" MSG_OIM_LINE_DEM,
-		                           msn_message_get_attr(message, "boundary"));
-		tokens = g_strsplit(message->body, boundary, 0);
+		bounds = g_strdup_printf("--%s" MSG_OIM_LINE_DEM, boundary);
+		tokens = g_strsplit(message->body, bounds, 0);
 
 		/* tokens+1 to skip the "This is a multipart message..." text */
 		for (part = tokens+1; *part != NULL; part++) {
@@ -648,18 +636,33 @@
 		}
 
 		g_strfreev(tokens);
-		g_free(boundary);
+		g_free(bounds);
 
 		if (decode_msg == NULL) {
 			purple_debug_error("msn", "Couldn't find text/plain OIM message.\n");
-			g_free(passport);
+			msn_message_destroy(message);
 			return;
 		}
 	} else {
+		decode_msg = (char *)purple_base64_decode(message->body, &body_len);
+	}
+
+	from = msn_message_get_attr(message, "X-OIM-originatingSource");
+
+	/* Match number to user's mobile number, FROM is a phone number
+	   if the other side pages you using your phone number */
+	if (!strncmp(from, "tel:+", 5)) {
+		MsnUser *user =	msn_userlist_find_user_with_mobile_phone(
+				rdata->oim->session->userlist, from + 4);
+
+		if (user && user->passport)
+			passport = g_strdup(user->passport);
+	}
+
+	if (passport == NULL) {
 		char *start, *end;
 
 		from = msn_message_get_attr(message, "From");
-		decode_msg = (char *)purple_base64_decode(message->body, &body_len);
 
 		tokens = g_strsplit(from, " ", 2);
 		if (tokens[1] != NULL)
@@ -687,6 +690,7 @@
 
 	g_free(passport);
 	g_free(decode_msg);
+	msn_message_destroy(message);
 }
 
 /* Parse the XML data,
--- a/libpurple/protocols/qq/AUTHORS	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/qq/AUTHORS	Sun Dec 28 09:51:19 2008 +0000
@@ -1,7 +1,7 @@
 Code Contributors
 =========
 puzzlebird	: original author
-gfhuang		: patches for libpurple 2.0.0beta2, maintainer
+gfhuang(poppyer): patches for libpurple 2.0.0beta2, maintainer
 Yuan Qingyun	: patches for libpurple 1.5.0, maintainer
 henryouly	: file transfer, udp sock5 proxy and qq_show, maintainer
 hzhr		: maintainer
--- a/libpurple/protocols/qq/ChangeLog	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/qq/ChangeLog	Sun Dec 28 09:51:19 2008 +0000
@@ -1,3 +1,10 @@
+2008.12.25 - flos <lonicerae(at)gmail.com>
+	* References #7821
+	* Updated authors
+
+2008.12.17 - flos <lonicerae(at)gmail.com>
+	* Minor fixed in buddy_info.c
+
 2008.12.06 - flos <lonicerae(at)gmail.com>
 	* Removed version checking script in Makefiles since our developers all migrated to monotone
 	* Use our development revision as OPENQ_VERSION in qq.c
--- a/libpurple/protocols/qq/buddy_info.c	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/qq/buddy_info.c	Sun Dec 28 09:51:19 2008 +0000
@@ -790,7 +790,7 @@
 		bytes += qq_get32(&onlineTime, data + bytes);
 		bytes += qq_get16(&level, data + bytes);
 		bytes += qq_get16(&timeRemainder, data + bytes);
-		purple_debug_info("QQ", "level: %d, uid %d, tmOnline: %d, tmRemainder: %d\n",
+		purple_debug_info("QQ", "level: %d, uid %u, tmOnline: %d, tmRemainder: %d\n",
 				level, uid, onlineTime, timeRemainder);
 
 		bd = qq_buddy_data_find(gc, uid);
@@ -825,12 +825,12 @@
 	bytes += qq_get32(&onlineTime, data + bytes);
 	bytes += qq_get16(&level, data + bytes);
 	bytes += qq_get16(&timeRemainder, data + bytes);
-	purple_debug_info("QQ", "level: %d, uid %d, tmOnline: %d, tmRemainder: %d\n",
+	purple_debug_info("QQ", "level: %d, uid %u, tmOnline: %d, tmRemainder: %d\n",
 			level, uid, onlineTime, timeRemainder);
 
 	bd = qq_buddy_data_find(gc, uid);
 	if (bd == NULL) {
-		purple_debug_error("QQ", "Got levels of %d not in my buddy list\n", uid);
+		purple_debug_error("QQ", "Got levels of %u not in my buddy list\n", uid);
 		return;
 	}
 
--- a/libpurple/protocols/qq/qq.c	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/qq/qq.c	Sun Dec 28 09:51:19 2008 +0000
@@ -626,7 +626,7 @@
 	g_string_append(info, "puzzlebird<br>\n");
 	g_string_append(info, "<br>\n");
 	g_string_append(info, _("<p><b>Code Contributors</b>:<br>\n"));
-	g_string_append(info, "gfhuang : patches for libpurple 2.0.0beta2, maintainer<br>\n");
+	g_string_append(info, "gfhuang(poppyer) : patches for libpurple 2.0.0beta2, maintainer<br>\n");
 	g_string_append(info, "Yuan Qingyun : patches for libpurple 1.5.0, maintainer<br>\n");
 	g_string_append(info, "henryouly : file transfer, udp sock5 proxy and qq_show, maintainer<br>\n");
 	g_string_append(info, "hzhr : maintainer<br>\n");
--- a/libpurple/protocols/qq/qq_network.c	Tue Dec 23 20:14:13 2008 +0000
+++ b/libpurple/protocols/qq/qq_network.c	Sun Dec 28 09:51:19 2008 +0000
@@ -468,7 +468,7 @@
 
 static void udp_pending(gpointer data, gint source, PurpleInputCondition cond)
 {
-	PurpleConnection *gc = (PurpleConnection *) data;
+	PurpleConnection *gc = NULL;
 	qq_data *qd;
 	guint8 *buf;
 	gint buf_len;