From 5f4e91253ff5400be9c7d514cafc4392d7565f92 Mon Sep 17 00:00:00 2001 From: Ronald Cron Date: Mon, 21 Feb 2022 09:50:36 +0100 Subject: [PATCH] ssl_client.c: Add DTLS ClientHello message sending specifics Signed-off-by: Ronald Cron --- library/ssl_client.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/library/ssl_client.c b/library/ssl_client.c index 4c0e0ee571..9a65b57a6f 100644 --- a/library/ssl_client.c +++ b/library/ssl_client.c @@ -712,12 +712,34 @@ int mbedtls_ssl_write_client_hello( mbedtls_ssl_context *ssl ) buf + buf_len, &msg_len ) ); - mbedtls_ssl_add_hs_msg_to_checksum( ssl, MBEDTLS_SSL_HS_CLIENT_HELLO, - buf, msg_len ); +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_SSL_PROTO_DTLS) + if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + { + ssl->out_msglen = msg_len + 4; + mbedtls_ssl_send_flight_completed( ssl ); - MBEDTLS_SSL_PROC_CHK( mbedtls_ssl_finish_handshake_msg( ssl, - buf_len, - msg_len ) ); + if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); + return( ret ); + } + + if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ( ret = mbedtls_ssl_flight_transmit( ssl ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_flight_transmit", ret ); + return( ret ); + } + } + else +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 && MBEDTLS_SSL_PROTO_DTLS */ + { + mbedtls_ssl_add_hs_msg_to_checksum( ssl, MBEDTLS_SSL_HS_CLIENT_HELLO, + buf, msg_len ); + MBEDTLS_SSL_PROC_CHK( mbedtls_ssl_finish_handshake_msg( ssl, + buf_len, + msg_len ) ); + } mbedtls_ssl_handshake_set_state( ssl, MBEDTLS_SSL_SERVER_HELLO );