Revision d5a57d6d0c36d6bde39482305370d946584c9832

markdoliner at pidgin.im markdoliner at pidgin.im
Tue Mar 13 03:33:40 EDT 2007


o   -----------------------------------------------------------------
|   Revision: d5a57d6d0c36d6bde39482305370d946584c9832
|   Ancestor: c15c01f5fe6de979e4327a88ac571475f7ea1296
|   Author: markdoliner at pidgin.im
|   Date: 2007-03-13T06:53:43
|   Branch: im.pidgin.pidgin
|   
|   Modified files:
|           libpurple/plugins/ssl/ssl-gnutls.c
|   
|   ChangeLog: 
|   
|   There were a few problems here
|   
|   1. Raw gnutls error codes were being printed in debug messages.  This
|      isn't necessarily bad, but it's much less useful than the text
|      returned from gnutls_strerror().  Never underestimate the value of
|      good error handling.
|   2. ssl_gnutls_read() and ssl_gnutls_write() were returning 0 when there
|      was an error reading from or writing to the ssl connection.  They
|      should return -1 to indicate failure (0 normally indicates that the
|      server closed the connection)
|   3. ssl_gnutls_read() and ssl_gnutls_write() weren't setting errno when
|      they failed.  errno would be set to something random, which seemed
|      to frequently be EAGAIN for me when reading, which causes Gaim to
|      keep trying to read from the connection even though it's closed.
|      Ideally ssl-gnutls.c would have a function equivalent to set_errno()
|      in ssl-nss.c, but the gnutls documentation does a poor job of
|      telling you what possible error codes could be returned from
|      gnutls_record_recv() and gnutls_record_send()
|   
|   Even better would be if we allowed the ssl plugins to keep track of
|   the error message themselves, then added a new ssl ops function
|   to fetch the message from the plugin.
|   
|   ============================================================
|   --- libpurple/plugins/ssl/ssl-gnutls.c	74208168c2a7bae9418241039fb37150b6e84e85
|   +++ libpurple/plugins/ssl/ssl-gnutls.c	a6fc5dc86095e58453cbf8588a18ebc5a4d6125a
|   @@ -83,7 +83,8 @@ static void ssl_gnutls_handshake_cb(gpoi
|    	gnutls_data->handshake_handler = 0;
|    
|    	if(ret != 0) {
|   -		gaim_debug_error("gnutls", "Handshake failed. Error %d\n", ret);
|   +		gaim_debug_error("gnutls", "Handshake failed. Error %s\n",
|   +			gnutls_strerror(ret));
|    
|    		if(gsc->error_cb != NULL)
|    			gsc->error_cb(gsc, GAIM_SSL_HANDSHAKE_FAILED,
|   @@ -156,8 +157,16 @@ ssl_gnutls_read(GaimSslConnection *gsc, 
|    		s = -1;
|    		errno = EAGAIN;
|    	} else if(s < 0) {
|   -		gaim_debug_error("gnutls", "receive failed: %d\n", s);
|   -		s = 0;
|   +		gaim_debug_error("gnutls", "receive failed: %s\n",
|   +				gnutls_strerror(s));
|   +		s = -1;
|   +		/*
|   +		 * TODO: Set errno to something more appropriate.  Or even
|   +		 *       better: allow ssl plugins to keep track of their
|   +		 *       own error message, then add a new ssl_ops function
|   +		 *       that returns the error message.
|   +		 */
|   +		errno = EIO;
|    	}
|    
|    	return s;
|   @@ -177,8 +186,16 @@ ssl_gnutls_write(GaimSslConnection *gsc,
|    		s = -1;
|    		errno = EAGAIN;
|    	} else if(s < 0) {
|   -		gaim_debug_error("gnutls", "send failed: %d\n", s);
|   -		s = 0;
|   +		gaim_debug_error("gnutls", "send failed: %s\n",
|   +				gnutls_strerror(s));
|   +		s = -1;
|   +		/*
|   +		 * TODO: Set errno to something more appropriate.  Or even
|   +		 *       better: allow ssl plugins to keep track of their
|   +		 *       own error message, then add a new ssl_ops function
|   +		 *       that returns the error message.
|   +		 */
|   +		errno = EIO;
|    	}
|    
|    	return s;

To get the patch for this revision, please do this:
mtn log --last 1 --diffs --from d5a57d6d0c36d6bde39482305370d946584c9832


More information about the Commits mailing list