@@ -227,10 +227,11 @@ avs_bio_recv(void *ctx, unsigned char *buf, size_t len, uint32_t timeout_ms) {
227227 avs_net_socket_opt_value_t new_timeout ;
228228 size_t read_bytes ;
229229 int result ;
230- if (avs_is_err ((socket -> bio_error = avs_net_socket_get_opt (
231- socket -> backend_socket ,
232- AVS_NET_SOCKET_OPT_RECV_TIMEOUT ,
233- & orig_timeout )))) {
230+ if (!socket -> backend_socket
231+ || avs_is_err ((socket -> bio_error = avs_net_socket_get_opt (
232+ socket -> backend_socket ,
233+ AVS_NET_SOCKET_OPT_RECV_TIMEOUT ,
234+ & orig_timeout )))) {
234235 return MBEDTLS_ERR_NET_RECV_FAILED ;
235236 }
236237 new_timeout = orig_timeout ;
@@ -258,8 +259,9 @@ avs_bio_recv(void *ctx, unsigned char *buf, size_t len, uint32_t timeout_ms) {
258259
259260static int avs_bio_send (void * ctx , const unsigned char * buf , size_t len ) {
260261 ssl_socket_t * socket = (ssl_socket_t * ) ctx ;
261- if (avs_is_err ((socket -> bio_error = avs_net_socket_send (
262- socket -> backend_socket , buf , len )))) {
262+ if (!socket -> backend_socket
263+ || avs_is_err ((socket -> bio_error = avs_net_socket_send (
264+ socket -> backend_socket , buf , len )))) {
263265 return MBEDTLS_ERR_NET_SEND_FAILED ;
264266 } else {
265267 return (int ) len ;
@@ -850,65 +852,24 @@ rng_function(void *ctx, unsigned char *out_buf, size_t out_buf_size) {
850852}
851853
852854# ifdef AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
853- # ifdef MBEDTLS_SSL_SRV_C
854855static int fake_session_cache_set (void * socket_ ,
855- # if MBEDTLS_VERSION_NUMBER >= 0x03000000
856+ # if MBEDTLS_VERSION_NUMBER >= 0x03000000
856857 unsigned char const * session_id ,
857858 size_t session_id_len ,
858- # endif // MBEDTLS_VERSION_NUMBER >= 0x03000000
859+ # endif // MBEDTLS_VERSION_NUMBER >= 0x03000000
859860 const mbedtls_ssl_session * session ) {
860861 ssl_socket_t * socket = (ssl_socket_t * ) socket_ ;
861- # if MBEDTLS_VERSION_NUMBER >= 0x03000000
862+ # if MBEDTLS_VERSION_NUMBER >= 0x03000000
862863 (void ) session_id ;
863864 (void ) session_id_len ;
864- # endif // MBEDTLS_VERSION_NUMBER >= 0x03000000
865+ # endif // MBEDTLS_VERSION_NUMBER >= 0x03000000
865866 (void ) session ;
866867 // This will be called only if a new session has been established;
867868 // not if one has been resumed.
868869 socket -> flags .session_fresh = true;
869870 return 0 ;
870871}
871- # else // MBEDTLS_SSL_SRV_C
872- # if MBEDTLS_VERSION_NUMBER >= 0x03000000
873- # error "TLS session persistence is only supported with Mbed TLS >=3.0 if MBEDTLS_SSL_SRV_C is enabled"
874- # endif // MBEDTLS_VERSION_NUMBER >= 0x03000000
875- typedef struct {
876- # ifdef MBEDTLS_HAVE_TIME
877- mbedtls_time_t start ;
878- # endif // MBEDTLS_HAVE_TIME
879- int ciphersuite ;
880- int compression ;
881- size_t id_len ;
882- unsigned char id [sizeof (((mbedtls_ssl_session * ) NULL )-> id )];
883- } resumed_session_data_t ;
884-
885- static void session_copy (resumed_session_data_t * dest ,
886- const mbedtls_ssl_session * src ) {
887- # ifdef MBEDTLS_HAVE_TIME
888- dest -> start = src -> start ;
889- # endif // MBEDTLS_HAVE_TIME
890- dest -> ciphersuite = src -> ciphersuite ;
891- dest -> compression = src -> compression ;
892- dest -> id_len = src -> id_len ;
893- assert (dest -> id_len <= sizeof (dest -> id ));
894- memcpy (dest -> id , src -> id , dest -> id_len );
895- }
896-
897- static bool sessions_equal (const mbedtls_ssl_session * left ,
898- const resumed_session_data_t * right ) {
899- if (!left && !right ) {
900- return true;
901- }
902- return left && right && left -> ciphersuite == right -> ciphersuite
903- && left -> compression == right -> compression
904- # ifdef MBEDTLS_HAVE_TIME
905- & & left -> start == right -> start
906- # endif // MBEDTLS_HAVE_TIME
907- & & left -> id_len == right -> id_len
908- && memcmp (left -> id , right -> id , left -> id_len ) == 0 ;
909- }
910- # endif // MBEDTLS_SSL_SRV_C
911- # endif // AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
872+ # endif // AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
912873
913874static int socket_set_dtls_handshake_timeouts (
914875 ssl_socket_t * socket ,
@@ -1017,16 +978,14 @@ configure_ssl(ssl_socket_t *socket,
1017978 }
1018979# endif // MBEDTLS_SSL_DTLS_CONNECTION_ID
1019980
1020- # if defined(AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE ) \
1021- && defined(MBEDTLS_SSL_SRV_C )
981+ # ifdef AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
1022982 // This is a hack. Session cache is normally used only for server-side TLS.
1023983 // We (ab)use this mechanism on the client side, taking advantage of the
1024984 // fact that Mbed TLS calls it if, and only if, a fresh session has been
1025985 // established, to determine session freshness if resuption is attempted.
1026986 mbedtls_ssl_conf_session_cache (& socket -> config , socket , NULL ,
1027987 fake_session_cache_set );
1028- # endif // defined(AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE) &&
1029- // defined(MBEDTLS_SSL_SRV_C)
988+ # endif // AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
1030989
1031990 avs_free (socket -> effective_ciphersuites );
1032991 if (!(socket -> effective_ciphersuites =
@@ -1194,14 +1153,7 @@ static avs_error_t start_ssl(ssl_socket_t *socket, const char *host) {
11941153 socket -> flags .session_fresh = false;
11951154 }
11961155 }
1197- # ifndef MBEDTLS_SSL_SRV_C
1198- resumed_session_data_t restored_session ;
1199- memset (& restored_session , 0 , sizeof (restored_session ));
1200- if (!socket -> flags .session_fresh && get_context (socket )-> session ) {
1201- session_copy (& restored_session , get_context (socket )-> session );
1202- }
1203- # endif // MBEDTLS_SSL_SRV_C
1204- # endif // AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
1156+ # endif // AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
12051157# if defined(MBEDTLS_SSL_PROTO_DTLS )
12061158 if (transport_for_socket_type (socket -> backend_type )
12071159 == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) {
@@ -1280,13 +1232,6 @@ static avs_error_t start_ssl(ssl_socket_t *socket, const char *host) {
12801232# endif // defined(AVS_COMMONS_WITH_INTERNAL_LOGS) &&
12811233 // defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
12821234# ifdef AVS_COMMONS_NET_WITH_TLS_SESSION_PERSISTENCE
1283- # ifndef MBEDTLS_SSL_SRV_C
1284- if (!socket -> flags .session_fresh
1285- && !sessions_equal (get_context (socket )-> session ,
1286- & restored_session )) {
1287- socket -> flags .session_fresh = true;
1288- }
1289- # endif // MBEDTLS_SSL_SRV_C
12901235 if (socket -> flags .session_fresh ) {
12911236 // We rely on session renegotation being disabled in
12921237 // configuration.
0 commit comments