diff options
Diffstat (limited to 'lib/ssl_gnutls.c')
| -rw-r--r-- | lib/ssl_gnutls.c | 20 | 
1 files changed, 15 insertions, 5 deletions
| diff --git a/lib/ssl_gnutls.c b/lib/ssl_gnutls.c index 72517e72..d72b17f5 100644 --- a/lib/ssl_gnutls.c +++ b/lib/ssl_gnutls.c @@ -134,7 +134,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 +188,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 ); @@ -207,7 +209,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 ); @@ -221,10 +223,18 @@ int ssl_write( void *conn, const char *buf, int len )  	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_ ) | 
