# HG changeset patch # User Elliott Sales de Andrade # Date 1248157003 0 # Node ID f3809e302ec787744293acbdc4a36db5ebf96233 # Parent 8e31eec7b6213285e35f620ec59d948c5d50d038# Parent 7e473a437c7f253510e354c140f8bdb488e4c568 merge of '50e2f2c66f304a73c2a9ef4d912be5e3f2ed39a5' and '73a88ac85b97264c19b9a9966270eecd310b6bff' diff -r 7e473a437c7f -r f3809e302ec7 libpurple/buddyicon.c diff -r 7e473a437c7f -r f3809e302ec7 libpurple/plugin.c diff -r 7e473a437c7f -r f3809e302ec7 libpurple/plugins/signals-test.c diff -r 7e473a437c7f -r f3809e302ec7 libpurple/protocols/msn/httpconn.c --- a/libpurple/protocols/msn/httpconn.c Tue Jul 21 04:25:59 2009 +0000 +++ b/libpurple/protocols/msn/httpconn.c Tue Jul 21 06:16:43 2009 +0000 @@ -293,7 +293,7 @@ purple_debug_error("msn", "HTTP: servconn %03d read error, " "len: %" G_GSSIZE_FORMAT ", errno: %d, error: %s\n", servconn->num, len, error, g_strerror(errno)); - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ, NULL); return; } @@ -309,7 +309,7 @@ { /* Either we must wait for more input, or something went wrong */ if (error) - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ, NULL); return; } @@ -317,7 +317,7 @@ if (error) { purple_debug_error("msn", "HTTP: Special error\n"); - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ, NULL); return; } @@ -368,7 +368,7 @@ return; /* Error! */ - msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE); + msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE, NULL); return; } @@ -394,7 +394,7 @@ if ((res <= 0) && ((errno != EAGAIN) && (errno != EWOULDBLOCK))) { - msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE); + msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE, NULL); return FALSE; } @@ -672,7 +672,7 @@ { purple_debug_error("msn", "HTTP: Connection error: %s\n", error_message ? error_message : "(null)"); - msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_CONNECT); + msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_CONNECT, error_message); } } diff -r 7e473a437c7f -r f3809e302ec7 libpurple/protocols/msn/servconn.c --- a/libpurple/protocols/msn/servconn.c Tue Jul 21 04:25:59 2009 +0000 +++ b/libpurple/protocols/msn/servconn.c Tue Jul 21 06:16:43 2009 +0000 @@ -123,38 +123,35 @@ **************************************************************************/ void -msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error) +msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error, + const char *reason) { - char *tmp; - const char *reason; + MsnSession *session = servconn->session; + MsnServConnType type = servconn->type; const char *names[] = { "Notification", "Switchboard" }; const char *name; - name = names[servconn->type]; + name = names[type]; - switch (error) - { - case MSN_SERVCONN_ERROR_CONNECT: - reason = _("Unable to connect"); break; - case MSN_SERVCONN_ERROR_WRITE: - reason = _("Writing error"); break; - case MSN_SERVCONN_ERROR_READ: - reason = _("Reading error"); break; - default: - reason = _("Unknown error"); break; + if (reason == NULL) { + switch (error) + { + case MSN_SERVCONN_ERROR_CONNECT: + reason = _("Unable to connect"); break; + case MSN_SERVCONN_ERROR_WRITE: + reason = _("Writing error"); break; + case MSN_SERVCONN_ERROR_READ: + reason = _("Reading error"); break; + default: + reason = _("Unknown error"); break; + } } purple_debug_error("msn", "Connection error from %s server (%s): %s\n", name, servconn->host, reason); - tmp = g_strdup_printf(_("Connection error from %s server:\n%s"), - name, reason); - if (servconn->type == MSN_SERVCONN_NS) - { - msn_session_set_error(servconn->session, MSN_ERROR_SERVCONN, tmp); - } - else if (servconn->type == MSN_SERVCONN_SB) + if (type == MSN_SERVCONN_SB) { MsnSwitchBoard *swboard; swboard = servconn->cmdproc->data; @@ -162,9 +159,16 @@ swboard->error = MSN_SB_ERROR_CONNECTION; } + /* servconn->disconnect_cb may destroy servconn, so don't use it again */ msn_servconn_disconnect(servconn); - g_free(tmp); + if (type == MSN_SERVCONN_NS) + { + char *tmp = g_strdup_printf(_("Connection error from %s server:\n%s"), + name, reason); + msn_session_set_error(session, MSN_ERROR_SERVCONN, tmp); + g_free(tmp); + } } /************************************************************************** @@ -194,7 +198,7 @@ else { purple_debug_error("msn", "Connection error: %s\n", error_message); - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_CONNECT); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_CONNECT, error_message); } } @@ -310,7 +314,7 @@ if (servconn->connected && servconn->timeout_sec) { servconn->timeout_handle = purple_timeout_add_seconds( - servconn->timeout_sec, servconn_idle_timeout_cb, servconn); + servconn->timeout_sec, (GSourceFunc)servconn_idle_timeout_cb, servconn); } } @@ -342,7 +346,7 @@ if (ret < 0 && errno == EAGAIN) return; else if (ret <= 0) { - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_WRITE); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_WRITE, NULL); return; } @@ -399,7 +403,7 @@ if (ret == -1) { - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_WRITE); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_WRITE, NULL); } servconn_timeout_renew(servconn); @@ -425,7 +429,7 @@ purple_debug_error("msn", "servconn %03d read error, " "len: %" G_GSSIZE_FORMAT ", errno: %d, error: %s\n", servconn->num, len, errno, g_strerror(errno)); - msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); + msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ, NULL); return; } diff -r 7e473a437c7f -r f3809e302ec7 libpurple/protocols/msn/servconn.h --- a/libpurple/protocols/msn/servconn.h Tue Jul 21 04:25:59 2009 +0000 +++ b/libpurple/protocols/msn/servconn.h Tue Jul 21 06:16:43 2009 +0000 @@ -170,7 +170,8 @@ * @param servconn The servconn. * @param error The error that happened. */ -void msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error); +void msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error, + const char *reason); /** * Process the data in servconn->rx_buf. This is called after reading diff -r 7e473a437c7f -r f3809e302ec7 libpurple/protocols/msn/user.c diff -r 7e473a437c7f -r f3809e302ec7 libpurple/status.c