gnutls-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU gnutls branch, master, updated. gnutls-3_0_12-145-g14c8392


From: Nikos Mavrogiannopoulos
Subject: [SCM] GNU gnutls branch, master, updated. gnutls-3_0_12-145-g14c8392
Date: Mon, 06 Feb 2012 19:02:43 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU gnutls".

http://git.savannah.gnu.org/cgit/gnutls.git/commit/?id=14c83926d9152dab48a54fffd07435324b878b6e

The branch, master has been updated
       via  14c83926d9152dab48a54fffd07435324b878b6e (commit)
      from  58f6dd533c8506a780fc780a49e237300948fb59 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 14c83926d9152dab48a54fffd07435324b878b6e
Author: Nikos Mavrogiannopoulos <address@hidden>
Date:   Mon Feb 6 20:06:46 2012 +0100

    Corrected DTLS retransmission timeouts. Added the _ms suffix to the time 
variables in milliseconds. Report and patch by Sean Buckheister.

-----------------------------------------------------------------------

Summary of changes:
 NEWS                 |    3 +++
 lib/gnutls_buffers.c |    3 ++-
 lib/gnutls_dtls.c    |   17 +++++++++--------
 lib/gnutls_dtls.h    |    2 +-
 lib/gnutls_int.h     |   15 ++++++++++-----
 lib/gnutls_state.c   |    6 +++---
 6 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/NEWS b/NEWS
index a9a7989..e0a8a2d 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,9 @@ status from an ocsp server.
 ** command line apps: Use gnu autogen (libopts) to parse command
 line arguments and template files.
 
+** libgnutls: Corrected DTLS retransmission timeouts. 
+Report and patch by Sean Buckheister.
+
 ** libgnutls: Added new functions to easily allow the usage of
 an SSH-style authentication.
 
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c
index 630361f..7cbd635 100644
--- a/lib/gnutls_buffers.c
+++ b/lib/gnutls_buffers.c
@@ -960,7 +960,8 @@ handshake_buffer_st* recv_buf = 
session->internals.handshake_recv_buffer;
     }
 
 timeout:
-  if (time(0)-session->internals.dtls.handshake_start_time > 
session->internals.dtls.total_timeout/1000) 
+  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
     {
diff --git a/lib/gnutls_dtls.c b/lib/gnutls_dtls.c
index 3536a87..5c6c333 100644
--- a/lib/gnutls_dtls.c
+++ b/lib/gnutls_dtls.c
@@ -154,8 +154,8 @@ time_t now = gnutls_time (0);
 }
 
 #define UPDATE_TIMER \
-      session->internals.dtls.actual_retrans_timeout *= 2; \
-      session->internals.dtls.actual_retrans_timeout %= MAX_DTLS_TIMEOUT
+      session->internals.dtls.actual_retrans_timeout_ms *= 2; \
+      session->internals.dtls.actual_retrans_timeout_ms %= MAX_DTLS_TIMEOUT
 
 /* This function transmits the flight that has been previously
  * buffered.
@@ -192,7 +192,8 @@ int ret;
             {
               /* if no retransmission is required yet just return 
                */
-              if (now-session->internals.dtls.handshake_start_time < 
session->internals.dtls.actual_retrans_timeout)
+              if (now-session->internals.dtls.handshake_start_time < 
+                  session->internals.dtls.actual_retrans_timeout_ms/1000)
                 {
                   session->internals.dtls.handshake_last_call = now;
                   goto nb_timeout;
@@ -211,7 +212,7 @@ int ret;
 
   do 
     {
-      if (now-session->internals.dtls.handshake_start_time >= 
session->internals.dtls.total_timeout/1000) 
+      if (now-session->internals.dtls.handshake_start_time >= 
session->internals.dtls.total_timeout_ms/1000) 
         {
           ret = gnutls_assert_val(GNUTLS_E_TIMEDOUT);
           goto cleanup;
@@ -230,7 +231,7 @@ int ret;
         {
           session->internals.dtls.flight_init = 1;
           session->internals.dtls.handshake_last_call = now;
-          session->internals.dtls.actual_retrans_timeout = 
session->internals.dtls.retrans_timeout;
+          session->internals.dtls.actual_retrans_timeout_ms = 
session->internals.dtls.retrans_timeout_ms;
 
           if (last_type == GNUTLS_HANDSHAKE_FINISHED && 
_dtls_is_async(session))
             {
@@ -262,7 +263,7 @@ int ret;
       else /* all other messages -> implicit ack (receive of next flight) */
         {
           if (session->internals.dtls.blocking != 0)
-            ret = _gnutls_io_check_recv(session, 
session->internals.dtls.actual_retrans_timeout);
+            ret = _gnutls_io_check_recv(session, 
session->internals.dtls.actual_retrans_timeout_ms);
           else
             {
               ret = _gnutls_io_check_recv(session, 0);
@@ -423,8 +424,8 @@ int i, offset = 0;
 void gnutls_dtls_set_timeouts (gnutls_session_t session, unsigned int 
retrans_timeout,
   unsigned int total_timeout)
 {
-  session->internals.dtls.retrans_timeout = retrans_timeout;
-  session->internals.dtls.total_timeout  = total_timeout;
+  session->internals.dtls.retrans_timeout_ms = retrans_timeout;
+  session->internals.dtls.total_timeout_ms  = total_timeout;
 }
 
 /**
diff --git a/lib/gnutls_dtls.h b/lib/gnutls_dtls.h
index 253432f..99a230d 100644
--- a/lib/gnutls_dtls.h
+++ b/lib/gnutls_dtls.h
@@ -50,7 +50,7 @@ inline static void _dtls_async_timer_init(gnutls_session_t 
session)
   if (_dtls_is_async(session))
     {
       _gnutls_dtls_log ("DTLS[%p]: Initializing timer for handshake state.\n", 
session);
-      session->internals.dtls.async_term = time(0) + MAX_DTLS_TIMEOUT/1000;
+      session->internals.dtls.async_term = gnutls_time(0) + 
MAX_DTLS_TIMEOUT/1000;
     }
   else
     session->internals.dtls.async_term = 0;
diff --git a/lib/gnutls_int.h b/lib/gnutls_int.h
index edbad05..a306dd5 100644
--- a/lib/gnutls_int.h
+++ b/lib/gnutls_int.h
@@ -612,8 +612,11 @@ typedef struct
   unsigned int flight_init:1;
   /* whether this is the last flight in the protocol  */
   unsigned int last_flight:1;
-  unsigned int retrans_timeout;
-  unsigned int total_timeout;
+  
+  /* the retransmission timeout in milliseconds */
+  unsigned int retrans_timeout_ms;
+  /* the connection timeout in milliseconds */
+  unsigned int total_timeout_ms;
 
   unsigned int hsk_hello_verify_requests;
   
@@ -622,12 +625,14 @@ typedef struct
 
   /* non blocking stuff variables */
   unsigned int blocking:1;
-  /* starting time of current handshake */
+  /* starting time of current handshake - seconds since epoch */
   time_t handshake_start_time;
   /* time in seconds of the last handshake call */
   time_t handshake_last_call;
-  /* The actual retrans_timeout for the next message (e.g. doubled or so) */
-  unsigned int actual_retrans_timeout;
+
+  /* The actual retrans_timeout for the next message (e.g. doubled or so) 
+   */
+  unsigned int actual_retrans_timeout_ms;
 
   /* timers to handle async handshake after gnutls_handshake()
    * has terminated. Required to handle retransmissions.
diff --git a/lib/gnutls_state.c b/lib/gnutls_state.c
index 3d7317f..e5790dd 100644
--- a/lib/gnutls_state.c
+++ b/lib/gnutls_state.c
@@ -263,7 +263,7 @@ _gnutls_handshake_internal_state_init (gnutls_session_t 
session)
   
   session->internals.dtls.hsk_read_seq = 0;
   session->internals.dtls.hsk_write_seq = 0;
-  session->internals.dtls.handshake_start_time = time(0);
+  session->internals.dtls.handshake_start_time = gnutls_time(0);
 }
 
 void
@@ -383,8 +383,8 @@ gnutls_init (gnutls_session_t * session, unsigned int flags)
       (*session)->internals.dtls.mtu = DTLS_DEFAULT_MTU;
       (*session)->internals.transport = GNUTLS_DGRAM;
 
-      (*session)->internals.dtls.retrans_timeout = 1000;
-      (*session)->internals.dtls.total_timeout = 60000;
+      (*session)->internals.dtls.retrans_timeout_ms = 1000;
+      (*session)->internals.dtls.total_timeout_ms = 60000;
 
       (*session)->internals.dtls.record_sw_size = 0;
     }


hooks/post-receive
-- 
GNU gnutls



reply via email to

[Prev in Thread] Current Thread [Next in Thread]