From: Nikos Mavrogiannopoulos Date: Wed, 8 Feb 2012 09:58:23 +0000 (+0100) Subject: Be conservative when sending GNUTLS_E_AGAIN and check for a DTLS timeout before. X-Git-Tag: gnutls_3_0_13~114 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=049548a86f0323083012aaabe7555ba10b67eaa4;p=thirdparty%2Fgnutls.git Be conservative when sending GNUTLS_E_AGAIN and check for a DTLS timeout before. --- diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index d95719719f..b896c1a2ba 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -960,16 +960,7 @@ handshake_buffer_st* recv_buf = session->internals.handshake_recv_buffer; } timeout: - if (gnutls_time(0) - session->internals.dtls.handshake_start_time > - session->internals.dtls.total_timeout_ms/1000) - return gnutls_assert_val(GNUTLS_E_TIMEDOUT); - else - { - if (session->internals.dtls.blocking != 0) - millisleep(50); - - return gnutls_assert_val(GNUTLS_E_AGAIN); - } + RETURN_DTLS_EAGAIN_OR_TIMEOUT(session); } /* This is a receive function for the gnutls handshake diff --git a/lib/gnutls_dtls.c b/lib/gnutls_dtls.c index 5b945fd312..316897e2db 100644 --- a/lib/gnutls_dtls.c +++ b/lib/gnutls_dtls.c @@ -294,7 +294,7 @@ cleanup: return ret; nb_timeout: - return GNUTLS_E_AGAIN; + RETURN_DTLS_EAGAIN_OR_TIMEOUT(session); } #define window_table session->internals.dtls.record_sw diff --git a/lib/gnutls_dtls.h b/lib/gnutls_dtls.h index 99a230d9d1..a18833654d 100644 --- a/lib/gnutls_dtls.h +++ b/lib/gnutls_dtls.h @@ -33,6 +33,17 @@ int _dtls_record_check(gnutls_session_t session, uint64 * _seq); #define MAX_DTLS_TIMEOUT 60000 +#define RETURN_DTLS_EAGAIN_OR_TIMEOUT(session) \ + if (gnutls_time(0) - session->internals.dtls.handshake_start_time > \ + session->internals.dtls.total_timeout_ms/1000) \ + return gnutls_assert_val(GNUTLS_E_TIMEDOUT); \ + else \ + { \ + if (session->internals.dtls.blocking != 0) \ + millisleep(50); \ + return gnutls_assert_val(GNUTLS_E_AGAIN); \ + } + /* returns true or false depending on whether we need to * handle asynchronously handshake data. */