]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Be conservative when sending GNUTLS_E_AGAIN and check for a DTLS timeout before.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 8 Feb 2012 09:58:23 +0000 (10:58 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 8 Feb 2012 09:58:23 +0000 (10:58 +0100)
lib/gnutls_buffers.c
lib/gnutls_dtls.c
lib/gnutls_dtls.h

index d95719719fa6c01bba024e0bf3ce5662aca71bba..b896c1a2bae9e7918cede9dd40e8ee7d0e71b118 100644 (file)
@@ -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 
index 5b945fd3124cd08cd328dabd651f6189d16ad74b..316897e2dbda5ae4401c259911537f0c9af68ccc 100644 (file)
@@ -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
index 99a230d9d1ea35719f2b0455497a4b5eca2ae7a9..a18833654d98b584eb1c153bfd61200df2ccd03a 100644 (file)
@@ -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.
  */