# HG changeset patch # User Elliott Sales de Andrade # Date 1224395116 0 # Node ID e473291375b4e89fae7e8f12ce7f81f6e9804f83 # Parent 7ec9a1ae93d7959d20305d8e4e999559196a34a3 Apply khc's patch for ADL error 205, with a few changes to get around string freeze. This should allow people to login for this release since I removed the previous workaround. References #6640. diff -r 7ec9a1ae93d7 -r e473291375b4 libpurple/protocols/msn/command.h --- a/libpurple/protocols/msn/command.h Thu Oct 02 05:37:38 2008 +0000 +++ b/libpurple/protocols/msn/command.h Sun Oct 19 05:45:16 2008 +0000 @@ -51,6 +51,7 @@ size_t payload_len; MsnPayloadCb payload_cb; + void *payload_cbdata; }; MsnCommand *msn_command_from_string(const char *string); diff -r 7ec9a1ae93d7 -r e473291375b4 libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Thu Oct 02 05:37:38 2008 +0000 +++ b/libpurple/protocols/msn/notification.c Sun Oct 19 05:45:16 2008 +0000 @@ -753,21 +753,46 @@ } static void +adl_error_parse(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len) +{ + MsnSession *session; + PurpleAccount *account; + PurpleConnection *gc; + /*char *adl = g_strndup(payload, len);*/ + char *reason = g_strdup_printf(_("Unknown error (%d)"), + GPOINTER_TO_INT(cmd->payload_cbdata)/*, adl*/); + /*g_free(adl);*/ + + session = cmdproc->session; + account = session->account; + gc = purple_account_get_connection(account); + + purple_notify_error(gc, NULL, _("Unable to add user"), reason); + g_free(reason); +} + +static void adl_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) { MsnSession *session; PurpleAccount *account; PurpleConnection *gc; - char *reason = NULL; + MsnCommand *cmd = cmdproc->last_cmd; session = cmdproc->session; account = session->account; gc = purple_account_get_connection(account); purple_debug_error("msn", "ADL error\n"); - reason = g_strdup_printf(_("Unknown error (%d)"), error); - purple_notify_error(gc, NULL, _("Unable to add user"), reason); - g_free(reason); + if (cmd->param_count > 1) { + cmd->payload_cb = adl_error_parse; + cmd->payload_len = atoi(cmd->params[1]); + cmd->payload_cbdata = GINT_TO_POINTER(error); + } else { + char *reason = g_strdup_printf(_("Unknown error (%d)"), error); + purple_notify_error(gc, NULL, _("Unable to add user"), reason); + g_free(reason); + } } static void