Propagate connect errors from the MSN proxy callback to the servconn error

Tue, 21 Jul 2009 04:31:27 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Tue, 21 Jul 2009 04:31:27 +0000
changeset 27905
a50992124f03
parent 27904
c1e552435b02
child 27919
8602c97fd552

Propagate connect errors from the MSN proxy callback to the servconn error
handling function so that the real proxy error is displayed instead of a
generic "Connect Error".

Fixes #8280.

libpurple/protocols/msn/httpconn.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/servconn.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/servconn.h file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/msn/httpconn.c	Tue Jul 21 03:57:20 2009 +0000
+++ b/libpurple/protocols/msn/httpconn.c	Tue Jul 21 04:31:27 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);
 	}
 }
 
--- a/libpurple/protocols/msn/servconn.c	Tue Jul 21 03:57:20 2009 +0000
+++ b/libpurple/protocols/msn/servconn.c	Tue Jul 21 04:31:27 2009 +0000
@@ -123,27 +123,29 @@
  **************************************************************************/
 
 void
-msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error)
+msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error,
+                       const char *reason)
 {
 	MsnSession *session = servconn->session;
 	MsnServConnType type = servconn->type;
-	const char *reason;
 
 	const char *names[] = { "Notification", "Switchboard" };
 	const char *name;
 
 	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",
@@ -196,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);
 	}
 }
 
@@ -344,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;
 	}
 
@@ -401,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);
@@ -427,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;
 	}
--- a/libpurple/protocols/msn/servconn.h	Tue Jul 21 03:57:20 2009 +0000
+++ b/libpurple/protocols/msn/servconn.h	Tue Jul 21 04:31:27 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

mercurial