summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-26 12:25:16 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-26 12:25:16 +0100
commit2a1d17bd9f742005d92a7ae0277b29576b57ff07 (patch)
treef8c185712e048c9500714be8e70e614cc93082d4
parent194abfaa5869b19d737df5e0c640056fad9384ec (diff)
downloadgnutls-2a1d17bd9f742005d92a7ae0277b29576b57ff07.tar.gz
If a client hello is received immediately after a completed handshake delete the async_timer to rehandshake.
-rw-r--r--lib/gnutls_record.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/gnutls_record.c b/lib/gnutls_record.c
index 8bf608bbaf..216737c264 100644
--- a/lib/gnutls_record.c
+++ b/lib/gnutls_record.c
@@ -690,13 +690,22 @@ record_add_to_buffers (gnutls_session_t session,
if (_dtls_is_async(session) && _dtls_async_timer_active(session))
{
- ret = _dtls_retransmit(session);
- if (ret == 0)
+ if (session->security_parameters.entity == GNUTLS_SERVER &&
+ bufel->htype == GNUTLS_HANDSHAKE_CLIENT_HELLO)
{
- ret = gnutls_assert_val(GNUTLS_E_AGAIN);
- goto unexpected_packet;
+ /* client requested rehandshake. Delete the timer */
+ _dtls_async_timer_delete(session);
+ }
+ else
+ {
+ ret = _dtls_retransmit(session);
+ if (ret == 0)
+ {
+ ret = gnutls_assert_val(GNUTLS_E_AGAIN);
+ goto unexpected_packet;
+ }
+ goto cleanup;
}
- goto cleanup;
}
}