# HG changeset patch # User Elliott Sales de Andrade # Date 1230370628 0 # Node ID 38fbc2e3c646969ada36ec318316852d570f4bce # Parent b74fa0d31c74350aac72657601391d71f7d8d548# Parent 955bfda5649208f219b70fc8f67f585314c27fdb merge of '5043805100d2fa5a371317e802d6a191c89ddaeb' and 'ad2c746d767233c843f194ae7d0063503ec50231' diff -r b74fa0d31c74 -r 38fbc2e3c646 libpurple/protocols/msn/error.c --- a/libpurple/protocols/msn/error.c Fri Dec 26 13:00:57 2008 +0000 +++ b/libpurple/protocols/msn/error.c Sat Dec 27 09:37:08 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); } diff -r b74fa0d31c74 -r 38fbc2e3c646 libpurple/protocols/msn/oim.c --- a/libpurple/protocols/msn/oim.c Fri Dec 26 13:00:57 2008 +0000 +++ b/libpurple/protocols/msn/oim.c Sat Dec 27 09:37:08 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,