vlc/vlc-2.0 | branch: master | Ludovic Fauvet <[email protected]> | Thu Feb 7 17:21:06 2013 +0100| [46e99f8a0d7b22d4fa8781e8465fdcb664dc9d79] | committer: Jean-Baptiste Kempf
gnutls: retry handshake if it returns a non-fatal error Based on the gnutls_handshake manual the function must be called again until it returns 0 (or a fatal error). Signed-off-by: Jean-Baptiste Kempf <[email protected]> (cherry picked from commit ca82afbfb7ee9a083d13c7861408e5759f2509cd) Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=46e99f8a0d7b22d4fa8781e8465fdcb664dc9d79 --- 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 f216709..b0129ad 100644 --- a/modules/misc/gnutls.c +++ b/modules/misc/gnutls.c @@ -242,9 +242,16 @@ static int gnutls_ContinueHandshake (vlc_tls_t *session) #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); + do + { + val = gnutls_handshake (sys->session); + msg_Dbg (session, "TLS handshake: %s", gnutls_strerror (val)); + + if ((val == GNUTLS_E_AGAIN) || (val == GNUTLS_E_INTERRUPTED)) + /* I/O event: return to caller's poll() loop */ + return 1 + gnutls_record_get_direction (sys->session); + } + while (val < 0 && !gnutls_error_is_fatal (val)); if (val < 0) { _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
