[vlc-devel] [PATCH] gnutls: retry handshake if it returns a non-fatal error
Ludovic Fauvet
etix at videolan.org
Thu Feb 7 16:08:38 CET 2013
Based on the gnutls_handshake manual the function must be called again
until it returns 0 (or a fatal error).
---
modules/misc/gnutls.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/modules/misc/gnutls.c b/modules/misc/gnutls.c
index 312c682..f964cde 100644
--- a/modules/misc/gnutls.c
+++ b/modules/misc/gnutls.c
@@ -229,9 +229,16 @@ static int gnutls_ContinueHandshake (vlc_tls_t *session, const char *host,
#ifdef WIN32
WSASetLastError (0);
#endif
- val = gnutls_handshake (sys->session);
- if ((val == GNUTLS_E_AGAIN) || (val == GNUTLS_E_INTERRUPTED))
- return 1 + gnutls_record_get_direction (sys->session);
+ while(1)
+ {
+ val = gnutls_handshake (sys->session);
+ if ((val == GNUTLS_E_AGAIN) || (val == GNUTLS_E_INTERRUPTED))
+ return 1 + gnutls_record_get_direction (sys->session);
+ if (val < 0 && gnutls_error_is_fatal(val) == 0)
+ msg_Warn (session, "TLS handshake: %s", gnutls_strerror (val));
+ else
+ break;
+ }
if (val < 0)
{
--
1.8.1.2
More information about the vlc-devel
mailing list