@@ -923,9 +923,26 @@ esp_err_t set_client_config(const char *hostname, size_t hostlen, esp_tls_cfg_t
923
923
* @brief Create TLS/SSL server session
924
924
*/
925
925
int esp_mbedtls_server_session_create (esp_tls_cfg_server_t * cfg , int sockfd , esp_tls_t * tls )
926
+ {
927
+ int ret = 0 ;
928
+ if ((ret = esp_mbedtls_server_session_init (cfg , sockfd , tls )) != 0 ) {
929
+ return ret ;
930
+ }
931
+ while ((ret = esp_mbedtls_server_session_continue_async (tls )) != 0 ) {
932
+ if (ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE ) {
933
+ return ret ;
934
+ }
935
+ }
936
+ return ret ;
937
+ }
938
+
939
+ /**
940
+ * @brief ESP-TLS server session initialization (initialization part of esp_mbedtls_server_session_create)
941
+ */
942
+ esp_err_t esp_mbedtls_server_session_init (esp_tls_cfg_server_t * cfg , int sockfd , esp_tls_t * tls )
926
943
{
927
944
if (tls == NULL || cfg == NULL ) {
928
- return -1 ;
945
+ return ESP_ERR_INVALID_ARG ;
929
946
}
930
947
tls -> role = ESP_TLS_SERVER ;
931
948
tls -> sockfd = sockfd ;
@@ -936,24 +953,33 @@ int esp_mbedtls_server_session_create(esp_tls_cfg_server_t *cfg, int sockfd, esp
936
953
ESP_LOGE (TAG , "create_ssl_handle failed, returned [0x%04X] (%s)" , esp_ret , esp_err_to_name (esp_ret ));
937
954
ESP_INT_EVENT_TRACKER_CAPTURE (tls -> error_handle , ESP_TLS_ERR_TYPE_ESP , esp_ret );
938
955
tls -> conn_state = ESP_TLS_FAIL ;
939
- return -1 ;
956
+ return ESP_FAIL ;
940
957
}
941
958
942
959
tls -> read = esp_mbedtls_read ;
943
960
tls -> write = esp_mbedtls_write ;
944
- int ret ;
945
- while ((ret = mbedtls_ssl_handshake (& tls -> ssl )) != 0 ) {
946
- if (ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE ) {
947
- ESP_LOGE (TAG , "mbedtls_ssl_handshake returned -0x%04X" , - ret );
948
- mbedtls_print_error_msg (ret );
949
- ESP_INT_EVENT_TRACKER_CAPTURE (tls -> error_handle , ESP_TLS_ERR_TYPE_MBEDTLS , - ret );
950
- ESP_INT_EVENT_TRACKER_CAPTURE (tls -> error_handle , ESP_TLS_ERR_TYPE_ESP , ESP_ERR_MBEDTLS_SSL_HANDSHAKE_FAILED );
951
- tls -> conn_state = ESP_TLS_FAIL ;
952
- return ret ;
953
- }
961
+ return ESP_OK ;
962
+ }
963
+
964
+ /**
965
+ * @brief Asynchronous continue of server session initialized with esp_mbedtls_server_session_init, to be
966
+ * called in a loop by the user until it returns 0, ESP_TLS_ERR_SSL_WANT_READ
967
+ * or ESP_TLS_ERR_SSL_WANT_WRITE.
968
+ */
969
+ int esp_mbedtls_server_session_continue_async (esp_tls_t * tls )
970
+ {
971
+ int ret = mbedtls_ssl_handshake (& tls -> ssl );
972
+ if (ret != 0 && ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE ) {
973
+ ESP_LOGE (TAG , "mbedtls_ssl_handshake returned -0x%04X" , - ret );
974
+ mbedtls_print_error_msg (ret );
975
+ ESP_INT_EVENT_TRACKER_CAPTURE (tls -> error_handle , ESP_TLS_ERR_TYPE_MBEDTLS , - ret );
976
+ ESP_INT_EVENT_TRACKER_CAPTURE (tls -> error_handle , ESP_TLS_ERR_TYPE_ESP , ESP_ERR_MBEDTLS_SSL_HANDSHAKE_FAILED );
977
+ tls -> conn_state = ESP_TLS_FAIL ;
978
+ return ret ;
954
979
}
955
- return 0 ;
980
+ return ret ;
956
981
}
982
+
957
983
/**
958
984
* @brief Close the server side TLS/SSL connection and free any allocated resources.
959
985
*/
0 commit comments