mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-07-03 07:29:52 +08:00
feat(esp-tls): modify for esp8266
This commit is contained in:
@ -69,6 +69,7 @@ IoT_Error_t iot_tls_is_connected(Network *pNetwork) {
|
||||
}
|
||||
|
||||
IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params) {
|
||||
struct esp_tls *tls;
|
||||
int ret = SUCCESS;
|
||||
TLSDataParams *tlsDataParams = NULL;
|
||||
|
||||
@ -101,10 +102,15 @@ IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params) {
|
||||
|
||||
esp_set_cpu_freq(ESP_CPU_FREQ_160M);
|
||||
|
||||
struct esp_tls *tls = esp_tls_conn_new(pNetwork->tlsConnectParams.pDestinationURL, strlen(pNetwork->tlsConnectParams.pDestinationURL), pNetwork->tlsConnectParams.DestinationPort, &cfg);
|
||||
|
||||
tls = esp_tls_init();
|
||||
if (!tls) {
|
||||
ret = SSL_CONNECTION_ERROR;
|
||||
} else {
|
||||
int tls_ret = esp_tls_conn_new_sync(pNetwork->tlsConnectParams.pDestinationURL, strlen(pNetwork->tlsConnectParams.pDestinationURL), pNetwork->tlsConnectParams.DestinationPort, &cfg, tls);
|
||||
if (tls_ret) {
|
||||
ret = SSL_CONNECTION_ERROR;
|
||||
esp_tls_conn_delete(tls);
|
||||
}
|
||||
}
|
||||
|
||||
tlsDataParams->timeout = pNetwork->tlsConnectParams.timeout_ms;
|
||||
@ -129,7 +135,7 @@ IoT_Error_t iot_tls_write(Network *pNetwork, unsigned char *pMsg, size_t len, Ti
|
||||
written_so_far < len && !has_timer_expired(timer); written_so_far += ret, frags++) {
|
||||
while(!has_timer_expired(timer) &&
|
||||
(ret = esp_tls_conn_write(tls, pMsg + written_so_far, len - written_so_far)) <= 0) {
|
||||
if(ret != ESP_TLS_ERROR_WANT_READ && ret != ESP_TLS_ERROR_WANT_WRITE) {
|
||||
if(ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE) {
|
||||
ESP_LOGE(TAG, "failed! esp_tls_conn_write returned -0x%x", -ret);
|
||||
/* All other negative return values indicate connection needs to be reset.
|
||||
* Will be caught in ping request so ignored here */
|
||||
@ -195,7 +201,7 @@ IoT_Error_t iot_tls_read(Network *pNetwork, unsigned char *pMsg, size_t len, Tim
|
||||
rxLen += ret;
|
||||
pMsg += ret;
|
||||
len -= ret;
|
||||
} else if (ret == 0 || (ret != ESP_TLS_ERROR_WANT_READ && ret != ESP_TLS_ERROR_WANT_WRITE)) {
|
||||
} else if (ret == 0 || (ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE)) {
|
||||
return NETWORK_SSL_READ_ERROR;
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ idf_component_register(SRCS "${srcs}"
|
||||
INCLUDE_DIRS "."
|
||||
PRIV_INCLUDE_DIRS "private_include"
|
||||
REQUIRES mbedtls
|
||||
PRIV_REQUIRES lwip nghttp)
|
||||
PRIV_REQUIRES lwip http_parser)
|
||||
|
||||
if(CONFIG_ESP_TLS_USING_WOLFSSL)
|
||||
idf_component_get_property(wolfssl esp-wolfssl COMPONENT_LIB)
|
||||
|
@ -169,12 +169,16 @@ static esp_err_t esp_tcp_connect(const char *host, int hostlen, int port, int *s
|
||||
struct sockaddr_in *p = (struct sockaddr_in *)addrinfo->ai_addr;
|
||||
p->sin_port = htons(port);
|
||||
addr_ptr = p;
|
||||
} else if (addrinfo->ai_family == AF_INET6) {
|
||||
}
|
||||
#if LWIP_IPV6
|
||||
else if (addrinfo->ai_family == AF_INET6) {
|
||||
struct sockaddr_in6 *p = (struct sockaddr_in6 *)addrinfo->ai_addr;
|
||||
p->sin6_port = htons(port);
|
||||
p->sin6_family = AF_INET6;
|
||||
addr_ptr = p;
|
||||
} else {
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
ESP_LOGE(TAG, "Unsupported protocol family %d", addrinfo->ai_family);
|
||||
ret = ESP_ERR_ESP_TLS_UNSUPPORTED_PROTOCOL_FAMILY;
|
||||
goto err_freesocket;
|
||||
@ -236,8 +240,8 @@ static int esp_tls_low_level_conn(const char *hostname, int hostlen, int port, c
|
||||
return -1;
|
||||
}
|
||||
if (!cfg) {
|
||||
tls->read = tcp_read;
|
||||
tls->write = tcp_write;
|
||||
tls->_read = tcp_read;
|
||||
tls->_write = tcp_write;
|
||||
ESP_LOGD(TAG, "non-tls connection established");
|
||||
return 1;
|
||||
}
|
||||
@ -282,8 +286,8 @@ static int esp_tls_low_level_conn(const char *hostname, int hostlen, int port, c
|
||||
tls->conn_state = ESP_TLS_FAIL;
|
||||
return -1;
|
||||
}
|
||||
tls->read = _esp_tls_read;
|
||||
tls->write = _esp_tls_write;
|
||||
tls->_read = _esp_tls_read;
|
||||
tls->_write = _esp_tls_write;
|
||||
tls->conn_state = ESP_TLS_HANDSHAKE;
|
||||
/* falls through */
|
||||
case ESP_TLS_HANDSHAKE:
|
||||
|
@ -284,10 +284,10 @@ typedef struct esp_tls {
|
||||
#endif
|
||||
int sockfd; /*!< Underlying socket file descriptor. */
|
||||
|
||||
ssize_t (*read)(struct esp_tls *tls, char *data, size_t datalen); /*!< Callback function for reading data from TLS/SSL
|
||||
ssize_t (*_read)(struct esp_tls *tls, char *data, size_t datalen); /*!< Callback function for reading data from TLS/SSL
|
||||
connection. */
|
||||
|
||||
ssize_t (*write)(struct esp_tls *tls, const char *data, size_t datalen); /*!< Callback function for writing data to TLS/SSL
|
||||
ssize_t (*_write)(struct esp_tls *tls, const char *data, size_t datalen); /*!< Callback function for writing data to TLS/SSL
|
||||
connection. */
|
||||
|
||||
esp_tls_conn_state_t conn_state; /*!< ESP-TLS Connection state */
|
||||
@ -429,7 +429,7 @@ int esp_tls_conn_http_new_async(const char *url, const esp_tls_cfg_t *cfg, esp_t
|
||||
*/
|
||||
static inline ssize_t esp_tls_conn_write(esp_tls_t *tls, const void *data, size_t datalen)
|
||||
{
|
||||
return tls->write(tls, (char *)data, datalen);
|
||||
return tls->_write(tls, (char *)data, datalen);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -449,7 +449,7 @@ static inline ssize_t esp_tls_conn_write(esp_tls_t *tls, const void *data, size_
|
||||
*/
|
||||
static inline ssize_t esp_tls_conn_read(esp_tls_t *tls, void *data, size_t datalen)
|
||||
{
|
||||
return tls->read(tls, (char *)data, datalen);
|
||||
return tls->_read(tls, (char *)data, datalen);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1444,6 +1444,7 @@ size_t memp_malloc_get_size(size_t type);
|
||||
*/
|
||||
#ifdef CONFIG_USING_ESP_VFS
|
||||
#define LWIP_POSIX_SOCKETS_IO_NAMES 0
|
||||
#include <unistd.h> /* close/read/write */
|
||||
#else
|
||||
#define LWIP_POSIX_SOCKETS_IO_NAMES 1
|
||||
#endif
|
||||
|
@ -146,7 +146,7 @@ static void https_get_task(void *pvParameters)
|
||||
.cacert_pem_bytes = server_root_cert_pem_end - server_root_cert_pem_start,
|
||||
};
|
||||
|
||||
struct esp_tls *tls = esp_tls_conn_new(WEB_SERVER, strlen(WEB_SERVER), WEB_PORT, &cfg);
|
||||
struct esp_tls *tls = esp_tls_conn_http_new(WEB_URL, &cfg);
|
||||
|
||||
if(tls != NULL) {
|
||||
ESP_LOGI(TAG, "Connection established...");
|
||||
@ -163,12 +163,7 @@ static void https_get_task(void *pvParameters)
|
||||
if (ret >= 0) {
|
||||
ESP_LOGI(TAG, "%d bytes written", ret);
|
||||
written_bytes += ret;
|
||||
} else if
|
||||
#if CONFIG_SSL_USING_MBEDTLS
|
||||
(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE)
|
||||
#else
|
||||
(ret != WOLFSSL_ERROR_WANT_READ && ret != WOLFSSL_ERROR_WANT_WRITE)
|
||||
#endif
|
||||
} else if (ret != ESP_TLS_ERR_SSL_WANT_READ && ret != ESP_TLS_ERR_SSL_WANT_WRITE)
|
||||
{
|
||||
ESP_LOGE(TAG, "esp_tls_conn_write returned 0x%x", ret);
|
||||
goto exit;
|
||||
|
Reference in New Issue
Block a user