feat(esp-tls): modify for esp8266

This commit is contained in:
Dong Heng
2019-11-18 17:50:38 +08:00
parent fd8ed3b340
commit 7a30e6c072
6 changed files with 28 additions and 22 deletions

View File

@ -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;
}

View File

@ -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)

View File

@ -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:

View File

@ -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);
}
/**

View File

@ -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

View File

@ -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;