#include <gnutls/dtls.h>
#include <timespec.h>
+/* returns a-b in ms */
+unsigned int
+_dtls_timespec_sub_ms (struct timespec *a, struct timespec *b)
+{
+ return (a->tv_sec * 1000 + a->tv_nsec / (1000 * 1000) -
+ (b->tv_sec * 1000 + b->tv_nsec / (1000 * 1000)));
+}
+
+void
+_dtls_async_timer_delete (gnutls_session_t session)
+{
+ if (session->internals.dtls.async_term != 0)
+ {
+ _gnutls_dtls_log ("DTLS[%p]: Deinitializing previous handshake state.\n", session);
+ session->internals.dtls.async_term = 0; /* turn off "timer" */
+
+ _dtls_reset_hsk_state(session);
+ _gnutls_handshake_io_buffer_clear (session);
+ _gnutls_epoch_gc(session);
+ }
+}
+
/* This function fragments and transmits a previously buffered
* outgoing message. It accepts mtu_data which is a buffer to
* be reused (should be set to NULL initially).
{
/* if no retransmission is required yet just return
*/
- if (timespec_sub_ms(&now, &session->internals.dtls.last_retransmit) < TIMER_WINDOW)
+ if (_dtls_timespec_sub_ms(&now, &session->internals.dtls.last_retransmit) < TIMER_WINDOW)
{
gnutls_assert();
goto nb_timeout;
{
timeout = TIMER_WINDOW;
- diff = timespec_sub_ms(&now, &session->internals.dtls.handshake_start_time);
+ diff = _dtls_timespec_sub_ms(&now, &session->internals.dtls.handshake_start_time);
if (diff >= session->internals.dtls.total_timeout_ms)
{
_gnutls_dtls_log("Session timeout: %u ms\n", diff);
goto end_flight;
}
- diff = timespec_sub_ms(&now, &session->internals.dtls.last_retransmit);
+ diff = _dtls_timespec_sub_ms(&now, &session->internals.dtls.last_retransmit);
if (session->internals.dtls.flight_init == 0 || diff >= TIMER_WINDOW)
{
_gnutls_dtls_log ("DTLS[%p]: %sStart of flight transmission.\n", session, (session->internals.dtls.flight_init == 0)?"":"re-");
gettime(&now);
- diff = timespec_sub_ms(&now, &session->internals.dtls.last_retransmit);
+ diff = _dtls_timespec_sub_ms(&now, &session->internals.dtls.last_retransmit);
if (diff >= TIMER_WINDOW)
return 0;
else
#define MAX_DTLS_TIMEOUT 60000
-/* returns a-b in ms */
-inline static unsigned int timespec_sub_ms(struct timespec *a, struct timespec *b)
-{
- return (a->tv_sec * 1000 + a->tv_nsec / (1000 * 1000) -
- (b->tv_sec * 1000 + b->tv_nsec / (1000 * 1000)));
-}
+unsigned int _dtls_timespec_sub_ms (struct timespec *a, struct timespec *b);
#define RETURN_DTLS_EAGAIN_OR_TIMEOUT(session, r) { \
struct timespec now; \
unsigned int diff; \
gettime(&now); \
\
- diff = timespec_sub_ms(&now, &session->internals.dtls.handshake_start_time); \
+ diff = _dtls_timespec_sub_ms(&now, &session->internals.dtls.handshake_start_time); \
if (diff > session->internals.dtls.total_timeout_ms) \
{ \
_gnutls_dtls_log("Session timeout: %u ms\n", diff); \
}
}
-inline static void _dtls_async_timer_delete(gnutls_session_t session)
-{
- if (session->internals.dtls.async_term != 0)
- {
- _gnutls_dtls_log ("DTLS[%p]: Deinitializing previous handshake state.\n", session);
- session->internals.dtls.async_term = 0; /* turn off "timer" */
-
- _dtls_reset_hsk_state(session);
- _gnutls_handshake_io_buffer_clear (session);
- _gnutls_epoch_gc(session);
- }
-}
+void _dtls_async_timer_delete(gnutls_session_t session);
/* Checks whether it is time to terminate the timer
*/