diff libpurple/protocols/msn/servconn.c @ 20482:1754155051a4

propagate from branch 'im.pidgin.pidgin' (head 4313008137cace2c9699584ec7308c1e888ae137) to branch 'im.pidgin.cpw.khc.msnp14' (head d42c2c6500b8f7eb1ad6340caf7f1b95d9b02c1b)
author Carlos Silva <typ0@pidgin.im>
date Tue, 28 Aug 2007 04:38:24 +0000
parents 39248f5b53ad 9a2a4a0c0003
children 723b5a2f91ce
line wrap: on
line diff
--- a/libpurple/protocols/msn/servconn.c	Tue Aug 28 03:46:31 2007 +0000
+++ b/libpurple/protocols/msn/servconn.c	Tue Aug 28 04:38:24 2007 +0000
@@ -166,7 +166,7 @@
  **************************************************************************/
 
 static void
-connect_cb(gpointer data, gint source, const gchar *error_message)
+connect_cb(gpointer data, gint source, const char *error_message)
 {
 	MsnServConn *servconn;
 
@@ -243,7 +243,9 @@
 		return TRUE;
 	}
 	else
+	{
 		return FALSE;
+	}
 }
 
 void
@@ -388,14 +390,21 @@
 
 	len = read(servconn->fd, buf, sizeof(buf) - 1);
 
-	if (len < 0 && errno == EAGAIN)
-		return;
-	else if (len <= 0)
-	{
-		purple_debug_error("msn", "servconn read error, len: %d error: %s\n", len, strerror(errno));
-		msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ);
+	if (len <= 0) {
+		switch (errno) {
+
+			case 0:	
 
-		return;
+			case EBADF:
+			case EAGAIN: return;
+	
+			default: purple_debug_error("msn", "servconn read error,"
+						"len: %d, errno: %d, error: %s\n",
+						len, errno, strerror(errno));
+				 msn_servconn_got_error(servconn, 
+						 MSN_SERVCONN_ERROR_READ);
+				 return;
+		}
 	}
 
 	buf[len] = '\0';
@@ -444,6 +453,7 @@
 		else
 		{
 			msn_cmdproc_process_cmd_text(servconn->cmdproc, cur);
+			servconn->payload_len = servconn->cmdproc->last_cmd->payload_len;
 		}
 	} while (servconn->connected && !servconn->wasted && servconn->rx_len > 0);