Fix esp_mbedtls_write API

Fix esp_wolfssl_write API
Closes https://github.com/espressif/esp-idf/issues/7461
This commit is contained in:
Aditya Patwardhan
2021-09-13 01:00:13 +05:30
parent b22c975a3b
commit fc931ff193
3 changed files with 8 additions and 4 deletions

View File

@ -436,7 +436,11 @@ int esp_tls_conn_http_new_async(const char *url, const esp_tls_cfg_t *cfg, esp_t
* - 0 if write operation was not successful. The underlying * - 0 if write operation was not successful. The underlying
* connection was closed. * connection was closed.
* - <0 if write operation was not successful, because either an * - <0 if write operation was not successful, because either an
* error occured or an action must be taken by the calling process. * error occured or an action must be taken by the calling process.
* - ESP_TLS_ERR_SSL_WANT_READ/
* ESP_TLS_ERR_SSL_WANT_WRITE.
* if the handshake is incomplete and waiting for data to be available for reading.
* In this case this functions needs to be called again when the underlying transport is ready for operation.
*/ */
static inline ssize_t esp_tls_conn_write(esp_tls_t *tls, const void *data, size_t datalen) static inline ssize_t esp_tls_conn_write(esp_tls_t *tls, const void *data, size_t datalen)
{ {

View File

@ -161,9 +161,9 @@ ssize_t esp_mbedtls_write(esp_tls_t *tls, const char *data, size_t datalen)
ESP_LOGE(TAG, "write error :%d:", ret); ESP_LOGE(TAG, "write error :%d:", ret);
return ret; return ret;
} else { } else {
// Exitting the tls-write process as less than desired datalen are writable // Exiting the tls-write process as less than desired datalen are writable
ESP_LOGD(TAG, "mbedtls_ssl_write() returned %d, already written %d, exitting...", ret, written); ESP_LOGD(TAG, "mbedtls_ssl_write() returned %d, already written %d, exitting...", ret, written);
return written; return (written > 0) ? written : ret;
} }
} }
written += ret; written += ret;

View File

@ -170,7 +170,7 @@ ssize_t esp_wolfssl_read(esp_tls_t *tls, char *data, size_t datalen)
ssize_t esp_wolfssl_write(esp_tls_t *tls, const char *data, size_t datalen) ssize_t esp_wolfssl_write(esp_tls_t *tls, const char *data, size_t datalen)
{ {
ssize_t ret = wolfSSL_write( (WOLFSSL *)tls->priv_ssl, (unsigned char *) data, datalen); ssize_t ret = wolfSSL_write( (WOLFSSL *)tls->priv_ssl, (unsigned char *) data, datalen);
if (ret < 0) { if (ret <= 0) {
ret = wolfSSL_get_error( (WOLFSSL *)tls->priv_ssl, ret); ret = wolfSSL_get_error( (WOLFSSL *)tls->priv_ssl, ret);
if (ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE) { if (ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE) {
ESP_INT_EVENT_TRACKER_CAPTURE(tls->error_handle, ERR_TYPE_WOLFSSL, -ret); ESP_INT_EVENT_TRACKER_CAPTURE(tls->error_handle, ERR_TYPE_WOLFSSL, -ret);