Fix client-initiated renegotiation with DTLS
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index a2539d7..977a5b2 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -2141,7 +2141,8 @@
* TLS handshake format to other functions.
*/
#if defined(POLARSSL_SSL_PROTO_DTLS)
- if( ssl->transport == SSL_TRANSPORT_DATAGRAM )
+ if( ssl->transport == SSL_TRANSPORT_DATAGRAM &&
+ ssl->state != SSL_HANDSHAKE_OVER )
{
// TODO: DTLS: check message_seq
@@ -2289,11 +2290,13 @@
return( ret );
}
-#if defined(POLARSSL_SSL_PROTO_DTLS)
/* Done reading this record, get ready for the next one */
+#if defined(POLARSSL_SSL_PROTO_DTLS)
if( ssl->transport == SSL_TRANSPORT_DATAGRAM )
ssl->next_record_offset = ssl->in_msglen + ssl_hdr_len( ssl );
+ else
#endif
+ ssl->in_left = 0;
SSL_DEBUG_BUF( 4, "input record from network",
ssl->in_hdr, ssl_hdr_len( ssl ) + ssl->in_msglen );
@@ -2402,12 +2405,6 @@
}
}
- /* With DTLS there might be other records in the same datagram */
-#if defined(POLARSSL_SSL_PROTO_DTLS)
- if( ssl->transport != SSL_TRANSPORT_DATAGRAM )
-#endif
- ssl->in_left = 0;
-
SSL_DEBUG_MSG( 2, ( "<= read record" ) );
return( 0 );