Introduce function to indicate if record is fully processed
This commit introduces a function ssl_record_is_in_progress()
to indicate if there is there is more data within the current
record to be processed. Further, it moves the corresponding
call from ssl_read_record_layer() to the parent function
mbedtls_ssl_read_record(). With this change, ssl_read_record_layer()
has the sole purpose of fetching and decoding a new record,
and hence this commit also renames it to ssl_get_next_record().
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 54bb443..cfb95ea 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -4286,7 +4286,8 @@
/* Helper functions for mbedtls_ssl_read_record(). */
static int ssl_consume_current_message( mbedtls_ssl_context *ssl );
-static int ssl_read_record_layer( mbedtls_ssl_context *ssl );
+static int ssl_get_next_record( mbedtls_ssl_context *ssl );
+static int ssl_record_is_in_progress( mbedtls_ssl_context *ssl );
int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl,
unsigned update_digest )
@@ -4303,14 +4304,17 @@
if( ret != 0 )
return( ret );
- ret = ssl_read_record_layer( ssl );
- if( ret == MBEDTLS_ERR_SSL_CONTINUE_PROCESSING )
- continue;
-
- if( ret != 0 )
+ if( ssl_record_is_in_progress( ssl ) == 0 )
{
- MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret );
- return( ret );
+ ret = ssl_get_next_record( ssl );
+ if( ret == MBEDTLS_ERR_SSL_CONTINUE_PROCESSING )
+ continue;
+
+ if( ret != 0 )
+ {
+ MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret );
+ return( ret );
+ }
}
ret = mbedtls_ssl_handle_message_type( ssl );
@@ -4428,22 +4432,22 @@
return( 0 );
}
-static int ssl_read_record_layer( mbedtls_ssl_context *ssl )
+static int ssl_record_is_in_progress( mbedtls_ssl_context *ssl )
+{
+ if( ssl->in_msglen > 0 )
+ return( 1 );
+
+ return( 0 );
+}
+
+static int ssl_get_next_record( mbedtls_ssl_context *ssl )
{
int ret;
/*
- * Fetch and decode new record if current one is fully consumed.
+ * Fetch and decode new record
*/
- if( ssl->in_msglen > 0 )
- {
- /* There's something left to be processed in the current record. */
- return( 0 );
- }
-
- /* Current record either fully processed or to be discarded. */
-
if( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) ) ) != 0 )
{
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret );