commit: r1620 - neon/trunk/src

joe at manyfish.co.uk joe at manyfish.co.uk
Wed Jan 21 09:01:22 EST 2009


Author: joe
Date: Wed Jan 21 06:01:22 2009
New Revision: 1620

Modified:
   neon/trunk/src/ne_socket.c

Log:
* src/ne_socket.c (read_gnutls): Perform a new handshake if required
  and indicated by a gnutls_record_recv() failure.


Modified: neon/trunk/src/ne_socket.c
==============================================================================
--- neon/trunk/src/ne_socket.c	(original)
+++ neon/trunk/src/ne_socket.c	Wed Jan 21 06:01:22 2009
@@ -750,13 +750,18 @@
 static ssize_t read_gnutls(ne_socket *sock, char *buffer, size_t len)
 {
     ssize_t ret;
+    unsigned reneg = 1; /* number of allowed rehandshakes */
 
     ret = readable_gnutls(sock, sock->rdtimeout);
     if (ret) return ret;
     
     do {
-        ret = gnutls_record_recv(sock->ssl, buffer, len);
-    } while (RETRY_GNUTLS(sock, ret));
+        do {
+            ret = gnutls_record_recv(sock->ssl, buffer, len);
+        } while (RETRY_GNUTLS(sock, ret));
+        
+    } while (ret == GNUTLS_E_REHANDSHAKE && reneg--
+             && (ret = gnutls_handshake(sock->ssl)) == GNUTLS_E_SUCCESS);
 
     if (ret <= 0)
 	ret = error_gnutls(sock, ret);




More information about the neon-commits mailing list