Add mbedtls_ssl_get_session_pointer()
Avoid useless copy with mbedtls_ssl_get_session() before serialising. Used in ssl_client2 for testing and demonstrating usage, but unfortunately that means mbedtls_ssl_get_session() is no longer tested, which will be fixed in the next commit.
This commit is contained in:
parent
21548638b7
commit
b5e4e0a395
3 changed files with 27 additions and 13 deletions
|
@ -2387,7 +2387,7 @@ int mbedtls_ssl_session_load( mbedtls_ssl_session *session,
|
||||||
* of session cache or session tickets.
|
* of session cache or session tickets.
|
||||||
*
|
*
|
||||||
* \see mbedtls_ssl_session_load()
|
* \see mbedtls_ssl_session_load()
|
||||||
* \see mbedtls_ssl_get_session()
|
* \see mbedtls_ssl_get_session_pointer()
|
||||||
*
|
*
|
||||||
* \param session The session structure to be saved.
|
* \param session The session structure to be saved.
|
||||||
* \param buf The buffer to write the serialized data to. It must be a
|
* \param buf The buffer to write the serialized data to. It must be a
|
||||||
|
@ -2404,6 +2404,23 @@ int mbedtls_ssl_session_save( const mbedtls_ssl_session *session,
|
||||||
size_t buf_len,
|
size_t buf_len,
|
||||||
size_t *olen );
|
size_t *olen );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get a pointer to the current session structure, for example
|
||||||
|
* to serialise it.
|
||||||
|
*
|
||||||
|
* \warning Ownership of the session remains with the SSL context - the
|
||||||
|
* returned pointer must not be kept after the connection has
|
||||||
|
* ended or been renegotiated.
|
||||||
|
*
|
||||||
|
* \see mbedtls_ssl_session_save()
|
||||||
|
*
|
||||||
|
* \param ssl SSL context
|
||||||
|
*
|
||||||
|
* \return A pointer to the current session if successful,
|
||||||
|
* NULL if no session is active.
|
||||||
|
*/
|
||||||
|
const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_context *ssl );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set the list of allowed ciphersuites and the preference
|
* \brief Set the list of allowed ciphersuites and the preference
|
||||||
* order. First in the list has the highest preference.
|
* order. First in the list has the highest preference.
|
||||||
|
|
|
@ -9834,6 +9834,14 @@ int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl,
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_SSL_CLI_C */
|
#endif /* MBEDTLS_SSL_CLI_C */
|
||||||
|
|
||||||
|
const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_context *ssl )
|
||||||
|
{
|
||||||
|
if( ssl == NULL )
|
||||||
|
return( NULL );
|
||||||
|
|
||||||
|
return( ssl->session );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Serialize a session in the following format:
|
* Serialize a session in the following format:
|
||||||
* (in the presentation language of TLS, RFC 8446 section 3)
|
* (in the presentation language of TLS, RFC 8446 section 3)
|
||||||
|
|
|
@ -2442,14 +2442,7 @@ int main( int argc, char *argv[] )
|
||||||
mbedtls_printf(" . Saving session for reuse..." );
|
mbedtls_printf(" . Saving session for reuse..." );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
|
||||||
if( ( ret = mbedtls_ssl_get_session( &ssl, &saved_session ) ) != 0 )
|
if( ( ret = mbedtls_ssl_session_save( mbedtls_ssl_get_session_pointer( &ssl ),
|
||||||
{
|
|
||||||
mbedtls_printf( " failed\n ! mbedtls_ssl_get_session returned -0x%x\n\n",
|
|
||||||
-ret );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ( ret = mbedtls_ssl_session_save( &saved_session,
|
|
||||||
session_data, sizeof( session_data ),
|
session_data, sizeof( session_data ),
|
||||||
&session_data_len ) ) != 0 )
|
&session_data_len ) ) != 0 )
|
||||||
{
|
{
|
||||||
|
@ -2458,10 +2451,6 @@ int main( int argc, char *argv[] )
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Simulate that serialised state can have a larger lifetime than a
|
|
||||||
* structure: keep the serialised data but not the structure. */
|
|
||||||
mbedtls_ssl_session_free( &saved_session );
|
|
||||||
|
|
||||||
mbedtls_printf( " ok\n" );
|
mbedtls_printf( " ok\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue