tcp_transport: transport set handle refactoring, web socket client name updated

This commit is contained in:
David Cermak 2018-10-02 15:19:46 +02:00
parent e02225cc07
commit 0d4f5cc495
6 changed files with 41 additions and 22 deletions

@ -1 +1 @@
Subproject commit fe3ac2af1b708f44e710f35c4731584a3f69acd5
Subproject commit 85ee406d03fd84f5613c6dead1ea653e384b9559

View file

@ -260,7 +260,6 @@ esp_err_t esp_transport_set_context_data(esp_transport_handle_t t, void *data);
* @param[in] _poll_read The poll read function pointer
* @param[in] _poll_write The poll write function pointer
* @param[in] _destroy The destroy function pointer
* @param[in] _parrent_transport The parrent transfer getter pointer
*
* @return
* - ESP_OK
@ -272,8 +271,7 @@ esp_err_t esp_transport_set_func(esp_transport_handle_t t,
trans_func _close,
poll_func _poll_read,
poll_func _poll_write,
trans_func _destroy,
payload_transfer_func _parrent_transport);
trans_func _destroy);
/**
@ -288,6 +286,18 @@ esp_err_t esp_transport_set_func(esp_transport_handle_t t,
*/
esp_err_t esp_transport_set_async_connect_func(esp_transport_handle_t t, connect_async_func _connect_async_func);
/**
* @brief Set parent transport function to the handle
*
* @param[in] t The transport handle
* @param[in] _parent_transport The underlying transport getter pointer
*
* @return
* - ESP_OK
* - ESP_FAIL
*/
esp_err_t esp_transport_set_parent_transport_func(esp_transport_handle_t t, payload_transfer_func _parent_transport);
#ifdef __cplusplus
}
#endif

View file

@ -41,7 +41,7 @@ struct esp_transport_item_t {
poll_func _poll_write; /*!< Poll and write */
trans_func _destroy; /*!< Destroy and free transport */
connect_async_func _connect_async; /*!< non-blocking connect function of this transport */
payload_transfer_func _parrent_transfer; /*!< Function returning underlying transport layer */
payload_transfer_func _parent_transfer; /*!< Function returning underlying transport layer */
STAILQ_ENTRY(esp_transport_item_t) next;
};
@ -52,6 +52,13 @@ struct esp_transport_item_t {
*/
STAILQ_HEAD(esp_transport_list_t, esp_transport_item_t);
static esp_transport_handle_t esp_transport_get_default_parent(esp_transport_handle_t t)
{
/*
* By default, the underlying transport layer handle is the handle itself
*/
return t;
}
esp_transport_list_handle_t esp_transport_list_init()
{
@ -123,7 +130,7 @@ esp_transport_handle_t esp_transport_init()
esp_transport_handle_t esp_transport_get_payload_transport_handle(esp_transport_handle_t t)
{
if (t && t->_read) {
return t->_parrent_transfer(t);
return t->_parent_transfer(t);
}
return NULL;
}
@ -219,8 +226,7 @@ esp_err_t esp_transport_set_func(esp_transport_handle_t t,
trans_func _close,
poll_func _poll_read,
poll_func _poll_write,
trans_func _destroy,
payload_transfer_func _parrent_transport)
trans_func _destroy)
{
if (t == NULL) {
return ESP_FAIL;
@ -233,7 +239,7 @@ esp_err_t esp_transport_set_func(esp_transport_handle_t t,
t->_poll_write = _poll_write;
t->_destroy = _destroy;
t->_connect_async = NULL;
t->_parrent_transfer = _parrent_transport;
t->_parent_transfer = esp_transport_get_default_parent;
return ESP_OK;
}
@ -254,11 +260,6 @@ esp_err_t esp_transport_set_default_port(esp_transport_handle_t t, int port)
return ESP_OK;
}
esp_transport_handle_t transport_get_handle(esp_transport_handle_t t)
{
return t;
}
esp_err_t esp_transport_set_async_connect_func(esp_transport_handle_t t, connect_async_func _connect_async_func)
{
if (t == NULL) {
@ -267,3 +268,12 @@ esp_err_t esp_transport_set_async_connect_func(esp_transport_handle_t t, connect
t->_connect_async = _connect_async_func;
return ESP_OK;
}
esp_err_t esp_transport_set_parent_transport_func(esp_transport_handle_t t, payload_transfer_func _parent_transport)
{
if (t == NULL) {
return ESP_FAIL;
}
t->_parent_transfer = _parent_transport;
return ESP_OK;
}

View file

@ -43,8 +43,6 @@ typedef struct {
transport_ssl_conn_state_t conn_state;
} transport_ssl_t;
esp_transport_handle_t transport_get_handle(esp_transport_handle_t t);
static int ssl_close(esp_transport_handle_t t);
static int ssl_connect_async(esp_transport_handle_t t, const char *host, int port, int timeout_ms)
@ -176,7 +174,7 @@ esp_transport_handle_t esp_transport_ssl_init()
transport_ssl_t *ssl = calloc(1, sizeof(transport_ssl_t));
ESP_TRANSPORT_MEM_CHECK(TAG, ssl, return NULL);
esp_transport_set_context_data(t, ssl);
esp_transport_set_func(t, ssl_connect, ssl_read, ssl_write, ssl_close, ssl_poll_read, ssl_poll_write, ssl_destroy, transport_get_handle);
esp_transport_set_func(t, ssl_connect, ssl_read, ssl_write, ssl_close, ssl_poll_read, ssl_poll_write, ssl_destroy);
esp_transport_set_async_connect_func(t, ssl_connect_async);
return t;
}

View file

@ -32,8 +32,6 @@ typedef struct {
int sock;
} transport_tcp_t;
esp_transport_handle_t transport_get_handle(esp_transport_handle_t t);
static int resolve_dns(const char *host, struct sockaddr_in *ip) {
struct hostent *he;
@ -161,7 +159,7 @@ esp_transport_handle_t esp_transport_tcp_init()
transport_tcp_t *tcp = calloc(1, sizeof(transport_tcp_t));
ESP_TRANSPORT_MEM_CHECK(TAG, tcp, return NULL);
tcp->sock = -1;
esp_transport_set_func(t, tcp_connect, tcp_read, tcp_write, tcp_close, tcp_poll_read, tcp_poll_write, tcp_destroy, transport_get_handle);
esp_transport_set_func(t, tcp_connect, tcp_read, tcp_write, tcp_close, tcp_poll_read, tcp_poll_write, tcp_destroy);
esp_transport_set_context_data(t, tcp);
return t;

View file

@ -99,7 +99,7 @@ static int ws_connect(esp_transport_handle_t t, const char *host, int port, int
"Sec-WebSocket-Version: 13\r\n"
"Sec-WebSocket-Protocol: mqtt\r\n"
"Sec-WebSocket-Key: %s\r\n"
"User-Agent: ESP32 MQTT Client\r\n\r\n",
"User-Agent: ESP32 Websocket Client\r\n\r\n",
ws->path,
host, port,
client_key);
@ -283,7 +283,10 @@ esp_transport_handle_t esp_transport_ws_init(esp_transport_handle_t parent_handl
return NULL;
});
esp_transport_set_func(t, ws_connect, ws_read, ws_write, ws_close, ws_poll_read, ws_poll_write, ws_destroy, ws_get_payload_transport_handle);
esp_transport_set_func(t, ws_connect, ws_read, ws_write, ws_close, ws_poll_read, ws_poll_write, ws_destroy);
// webocket underlying transfer is the payload transfer handle
esp_transport_set_parent_transport_func(t, ws_get_payload_transport_handle);
esp_transport_set_context_data(t, ws);
return t;
}