]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added gnutls_dtls_get_timeout()
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 17 Feb 2012 08:00:28 +0000 (09:00 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 17 Feb 2012 18:38:52 +0000 (19:38 +0100)
NEWS
doc/cha-gtls-app.texi
lib/gnutls_dtls.c
lib/includes/gnutls/dtls.h
lib/libgnutls.map

diff --git a/NEWS b/NEWS
index 72d12af7acf27cafbd11e55e6eb964a7574b4bac..51675e25af92f1f6affd3fea204d1cbd7292d21b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -49,6 +49,7 @@ a fork (if PKCS #11 functionality is desirable).
 ** libgnutls: Depend on p11-kit 0.11.
 
 ** API and ABI modifications:
+gnutls_dtls_get_timeout: Added
 gnutls_verify_stored_pubkey: Added
 gnutls_store_pubkey: Added
 gnutls_store_commitment: Added
index 9207c26a8b59846a40aba5697ddbbb98e74c2fe0..06802df1c3761cc620a39adb00b4e7658827c2bf 100644 (file)
@@ -579,9 +579,14 @@ In the case of DTLS it is also desirable to override the generic
 transport functions with functions that emulate the operation
 of @code{recvfrom} and @code{sendto}. In addition
 @acronym{DTLS} requires timers during the receive of a handshake
-message. This requires the @funcref{gnutls_transport_set_pull_timeout_function} function to be used.
+message, set using the @funcref{gnutls_transport_set_pull_timeout_function} 
+function. To check the retransmission timers the function
+@funcref{gnutls_dtls_get_timeout} is provided, which returns the time
+remaining until the next retransmission, or better the time until 
+@funcref{gnutls_handshake} should be called again.
 
 @showfuncdesc{gnutls_transport_set_pull_timeout_function}
+@showfuncdesc{gnutls_dtls_get_timeout}
 
 @menu
 * Asynchronous operation::
@@ -645,7 +650,7 @@ of DTLS messages and prevent messages from being silently discarded by the
 transport layer. The ``correct'' maximum transfer unit can be obtained through
 a path MTU discovery mechanism @xcite{RFC4821}.
 
-@showfuncC{gnutls_dtls_set_mtu,gnutls_dtls_get_mtu,gnutls_dtls_get_data_mtu}
+@showfuncD{gnutls_dtls_set_mtu,gnutls_dtls_get_mtu,gnutls_dtls_get_data_mtu}
 
 
 @node TLS handshake
index f91ea71b6a65d979b641d2fc2bcc73183b68fb63..a2c2261d9223e5e64ab5826c2399f68bd29c4f35 100644 (file)
@@ -596,6 +596,34 @@ unsigned int gnutls_dtls_get_mtu (gnutls_session_t session)
   return session->internals.dtls.mtu;
 }
 
+/**
+ * gnutls_dtls_get_timeout:
+ * @session: is a #gnutls_session_t structure.
+ *
+ * This function will return the milliseconds remaining
+ * for a retransmission of the previously sent handshake
+ * message. This function is useful when DTLS is used in
+ * non-blocking mode, to estimate when to call gnutls_handshake()
+ * if no packets have been received.
+ *
+ * Returns: the remaining time in milliseconds.
+ *
+ * Since: 3.0.0
+ **/
+unsigned int gnutls_dtls_get_timeout (gnutls_session_t session)
+{
+struct timespec now;
+unsigned int diff;
+
+  gettime(&now);
+  
+  diff = timespec_sub_ms(&now, &session->internals.dtls.last_retransmit);
+  if (diff >= session->internals.dtls.actual_retrans_timeout_ms)
+    return 0;
+  else
+    return session->internals.dtls.actual_retrans_timeout_ms - diff;
+}
+
 #define COOKIE_SIZE 16
 #define COOKIE_MAC_SIZE 16
 
index e25f6225bb0b5dc7075d144879aa00bfbcbf1980..f65c0092e700ed4910daeec76005f4c5da743b5b 100644 (file)
@@ -43,7 +43,9 @@ void gnutls_dtls_set_timeouts (gnutls_session_t session,
 unsigned int gnutls_dtls_get_mtu (gnutls_session_t session);
 unsigned int gnutls_dtls_get_data_mtu (gnutls_session_t session);
 
-  void gnutls_dtls_set_mtu (gnutls_session_t session, unsigned int mtu);
+void gnutls_dtls_set_mtu (gnutls_session_t session, unsigned int mtu);
+
+unsigned int gnutls_dtls_get_timeout (gnutls_session_t session);
 
 /**
  * gnutls_dtls_prestate_st:
index 82f39c469d20d901347372c92bda4cee8aaa00d7..ee8c480c1b27d4995c401370a496256b4ca1efee 100644 (file)
@@ -774,6 +774,7 @@ GNUTLS_3_0_0 {
        gnutls_verify_stored_pubkey;
        gnutls_store_commitment;
        gnutls_store_pubkey;
+       gnutls_dtls_get_timeout;
 } GNUTLS_2_12;
 
 GNUTLS_PRIVATE {