diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-02-26 12:25:16 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-02-26 12:25:16 +0100 |
commit | 2a1d17bd9f742005d92a7ae0277b29576b57ff07 (patch) | |
tree | f8c185712e048c9500714be8e70e614cc93082d4 | |
parent | 194abfaa5869b19d737df5e0c640056fad9384ec (diff) | |
download | gnutls-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.c | 19 |
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; } } |