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