aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ssl_gnutls.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2011-12-17 14:50:01 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2011-12-17 14:50:01 +0100
commit6e9ae727bcd95eb820fa28becaf9f79ac463de5f (patch)
tree2d1d2a0f511d1356caf4a3f7c29c1578f0583a95 /lib/ssl_gnutls.c
parent87dddee3a14d7755204d6fc4b321729bad02ce4e (diff)
parent17f057d70b1513710e3d765969205625f0fc7b76 (diff)
Mainline merge.
Diffstat (limited to 'lib/ssl_gnutls.c')
-rw-r--r--lib/ssl_gnutls.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/lib/ssl_gnutls.c b/lib/ssl_gnutls.c
index 72517e72..ccab8aca 100644
--- a/lib/ssl_gnutls.c
+++ b/lib/ssl_gnutls.c
@@ -44,6 +44,8 @@ static gboolean initialized = FALSE;
#define GNUTLS_STUPID_CAST (int)
#endif
+#define SSLDEBUG 0
+
struct scd
{
ssl_input_function func;
@@ -134,7 +136,9 @@ static gboolean ssl_connected( gpointer data, gint source, b_input_condition con
gnutls_certificate_allocate_credentials( &conn->xcred );
gnutls_init( &conn->session, GNUTLS_CLIENT );
- gnutls_transport_set_lowat( conn->session, 1 );
+#if GNUTLS_VERSION_NUMBER < 0x020c00
+ gnutls_transport_set_lowat( conn->session, 0 );
+#endif
gnutls_set_default_priority( conn->session );
gnutls_credentials_set( conn->session, GNUTLS_CRD_CERTIFICATE, conn->xcred );
@@ -186,7 +190,7 @@ int ssl_read( void *conn, char *buf, int len )
if( !((struct scd*)conn)->established )
{
ssl_errno = SSL_NOHANDSHAKE;
- return( -1 );
+ return -1;
}
st = gnutls_record_recv( ((struct scd*)conn)->session, buf, len );
@@ -195,7 +199,7 @@ int ssl_read( void *conn, char *buf, int len )
if( st == GNUTLS_E_AGAIN || st == GNUTLS_E_INTERRUPTED )
ssl_errno = SSL_AGAIN;
- if( 0 && getenv( "BITLBEE_DEBUG" ) && st > 0 ) len = write( 1, buf, st );
+ if( SSLDEBUG && getenv( "BITLBEE_DEBUG" ) && st > 0 ) len = write( 2, buf, st );
return st;
}
@@ -207,7 +211,7 @@ int ssl_write( void *conn, const char *buf, int len )
if( !((struct scd*)conn)->established )
{
ssl_errno = SSL_NOHANDSHAKE;
- return( -1 );
+ return -1;
}
st = gnutls_record_send( ((struct scd*)conn)->session, buf, len );
@@ -216,15 +220,23 @@ int ssl_write( void *conn, const char *buf, int len )
if( st == GNUTLS_E_AGAIN || st == GNUTLS_E_INTERRUPTED )
ssl_errno = SSL_AGAIN;
- if( 0 && getenv( "BITLBEE_DEBUG" ) && st > 0 ) len = write( 1, buf, st );
+ if( SSLDEBUG && getenv( "BITLBEE_DEBUG" ) && st > 0 ) len = write( 2, buf, st );
return st;
}
-/* See ssl_openssl.c for an explanation. */
int ssl_pending( void *conn )
{
- return 0;
+ if( conn == NULL )
+ return 0;
+
+ if( !((struct scd*)conn)->established )
+ {
+ ssl_errno = SSL_NOHANDSHAKE;
+ return 0;
+ }
+
+ return gnutls_record_check_pending( ((struct scd*)conn)->session ) != 0;
}
void ssl_disconnect( void *conn_ )