From 23b7b703aa3cbbbcc87eda7aa7bc09892a00bc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Thu, 25 Sep 2014 13:50:12 +0200 Subject: [PATCH] Fix issue with renego & resend --- include/polarssl/ssl.h | 7 +++++++ library/ssl_tls.c | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/polarssl/ssl.h b/include/polarssl/ssl.h index f0b1ec1bb..de517d6a1 100644 --- a/include/polarssl/ssl.h +++ b/include/polarssl/ssl.h @@ -248,6 +248,13 @@ /* * DTLS retransmission states, see RFC 6347 4.2.4 + * + * Warning: the state is sometimes explicit sometimes implicit! + * - PREPARING is explicit (but could be implicit from ssl->state) + * - SENDING is merged in PREPARING for initial sends, explicit for resends + * - WAITING is usually implicit from ssl->state, except after resend + * - FINISHED is explicit (but could be implicit from state) + * TODO-DTLS: clean that up */ #define SSL_RETRANS_PREPARING 0 #define SSL_RETRANS_SENDING 1 diff --git a/library/ssl_tls.c b/library/ssl_tls.c index 04c199e67..333e58e2c 100644 --- a/library/ssl_tls.c +++ b/library/ssl_tls.c @@ -2206,7 +2206,10 @@ int ssl_resend( ssl_context *ssl ) } } - ssl->handshake->retransmit_state = SSL_RETRANS_WAITING; + if( ssl->state == SSL_HANDSHAKE_OVER ) + ssl->handshake->retransmit_state = SSL_RETRANS_FINISHED; + else + ssl->handshake->retransmit_state = SSL_RETRANS_WAITING; SSL_DEBUG_MSG( 2, ( "<= ssl_resend" ) );