Changeset 8a2221a7 for lib


Ignore:
Timestamp:
2008-03-23T14:29:19Z (17 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
dd14ecc
Parents:
851a8c2
Message:

Fixed stalling issue with OpenSSL and Jabber (#368).

Location:
lib
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • lib/ssl_client.h

    r851a8c2 r8a2221a7  
    6060G_MODULE_EXPORT int ssl_write( void *conn, const char *buf, int len );
    6161
     62/* See ssl_openssl.c for an explanation. */
     63G_MODULE_EXPORT int ssl_pending( void *conn );
     64
    6265/* Abort the SSL connection and disconnect the socket. Do not use close()
    6366   directly, both the SSL library and the peer will be unhappy! */
  • lib/ssl_gnutls.c

    r851a8c2 r8a2221a7  
    211211}
    212212
     213/* See ssl_openssl.c for an explanation. */
     214int ssl_pending( void *conn )
     215{
     216        return 0;
     217}
     218
    213219void ssl_disconnect( void *conn_ )
    214220{
  • lib/ssl_nss.c

    r851a8c2 r8a2221a7  
    169169}
    170170
     171/* See ssl_openssl.c for an explanation. */
     172int ssl_pending( void *conn )
     173{
     174        return 0;
     175}
     176
    171177void ssl_disconnect( void *conn_ )
    172178{
  • lib/ssl_openssl.c

    r851a8c2 r8a2221a7  
    6262       
    6363        conn->fd = proxy_connect( host, port, ssl_connected, conn );
     64        if( conn->fd < 0 )
     65        {
     66                g_free( conn );
     67                return NULL;
     68        }
     69       
    6470        conn->func = func;
    6571        conn->data = data;
    6672        conn->inpa = -1;
    67        
    68         if( conn->fd < 0 )
    69         {
    70                 g_free( conn );
    71                 return NULL;
    72         }
    7373       
    7474        return conn;
     
    231231}
    232232
     233/* Only OpenSSL *really* needs this (and well, maybe NSS). See for more info:
     234   http://www.gnu.org/software/gnutls/manual/gnutls.html#index-gnutls_005frecord_005fcheck_005fpending-209
     235   http://www.openssl.org/docs/ssl/SSL_pending.html
     236   
     237   Required because OpenSSL empties the TCP buffer completely but doesn't
     238   necessarily give us all the unencrypted data.
     239   
     240   Returns 0 if there's nothing left or if we don't have to care (GnuTLS),
     241   1 if there's more data. */
     242int ssl_pending( void *conn )
     243{
     244        return ( ((struct scd*)conn) && ((struct scd*)conn)->established ) ?
     245               SSL_pending( ((struct scd*)conn)->ssl ) > 0 : 0;
     246}
     247
    233248void ssl_disconnect( void *conn_ )
    234249{
Note: See TracChangeset for help on using the changeset viewer.