in platform/posix/transport/src/openssl_posix.c [480:557]
static void setOptionalConfigurations( SSL * pSsl,
const OpensslCredentials_t * pOpensslCredentials )
{
int32_t sslStatus = -1;
int16_t readBufferLength = 0;
assert( pSsl != NULL );
assert( pOpensslCredentials != NULL );
/* Set TLS ALPN if requested. */
if( ( pOpensslCredentials->pAlpnProtos != NULL ) &&
( pOpensslCredentials->alpnProtosLen > 0U ) )
{
LogDebug( ( "Setting ALPN protos." ) );
sslStatus = SSL_set_alpn_protos(
pSsl, ( const uint8_t * ) pOpensslCredentials->pAlpnProtos,
( uint32_t ) pOpensslCredentials->alpnProtosLen );
if( sslStatus != 0 )
{
LogError( ( "SSL_set_alpn_protos failed to set ALPN protos. %s",
pOpensslCredentials->pAlpnProtos ) );
}
}
/* Set TLS MFLN if requested. */
if( pOpensslCredentials->maxFragmentLength > 0U )
{
LogDebug( ( "Setting max send fragment length %u.",
pOpensslCredentials->maxFragmentLength ) );
/* Set the maximum send fragment length. */
/* MISRA Directive 4.6 flags the following line for using basic
* numerical type long. This directive is suppressed because openssl
* function #SSL_set_max_send_fragment expects a length argument
* type of long. */
/* coverity[misra_c_2012_directive_4_6_violation] */
sslStatus = ( int32_t ) SSL_set_max_send_fragment(
pSsl, ( long ) pOpensslCredentials->maxFragmentLength );
if( sslStatus != 1 )
{
LogError( ( "Failed to set max send fragment length %u.",
pOpensslCredentials->maxFragmentLength ) );
}
else
{
readBufferLength = ( int16_t ) pOpensslCredentials->maxFragmentLength +
SSL3_RT_MAX_ENCRYPTED_OVERHEAD;
/* Change the size of the read buffer to match the
* maximum fragment length + some extra bytes for overhead. */
SSL_set_default_read_buffer_len( pSsl, ( size_t ) readBufferLength );
}
}
/* Enable SNI if requested. */
if( pOpensslCredentials->sniHostName != NULL )
{
LogDebug(
( "Setting server name %s for SNI.", pOpensslCredentials->sniHostName ) );
/* MISRA Rule 11.8 flags the following line for removing the const
* qualifier from the pointed to type. This rule is suppressed because
* openssl implementation of #SSL_set_tlsext_host_name internally casts
* the pointer to a string literal to a `void *` pointer. */
/* coverity[misra_c_2012_rule_11_8_violation] */
sslStatus = ( int32_t ) SSL_set_tlsext_host_name(
pSsl, pOpensslCredentials->sniHostName );
if( sslStatus != 1 )
{
LogError( ( "Failed to set server name %s for SNI.",
pOpensslCredentials->sniHostName ) );
}
}
}