From 87ef46a9b43fd11a5f94d70079fb0f48f529b1f8 Mon Sep 17 00:00:00 2001 From: Ivan Aponte Date: Fri, 1 Jun 2018 12:06:53 -0400 Subject: [PATCH] fix some keepalives issues (#51) * merge some changes * fix blocking issue --- lib/transport_ssl.c | 8 +++++++- mqtt_client.c | 10 ++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/transport_ssl.c b/lib/transport_ssl.c index da0a179..a2169c3 100644 --- a/lib/transport_ssl.c +++ b/lib/transport_ssl.c @@ -192,8 +192,14 @@ static int ssl_write(transport_handle_t t, const char *buffer, int len, int time static int ssl_read(transport_handle_t t, char *buffer, int len, int timeout_ms) { - int ret; + int poll = -1, ret; transport_ssl_t *ssl = transport_get_context_data(t); + + if (mbedtls_ssl_get_bytes_avail(&ssl->ctx) <= 0) { + if ((poll = transport_poll_read(t, timeout_ms)) <= 0) { + return poll; + } + } ret = mbedtls_ssl_read(&ssl->ctx, (unsigned char *)buffer, len); if (ret == 0) { return -1; diff --git a/mqtt_client.c b/mqtt_client.c index 541e81d..58b518c 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -438,6 +438,10 @@ static esp_err_t mqtt_write_data(esp_mqtt_client_handle_t client) ESP_LOGE(TAG, "Error write data or timeout, written len = %d", write_len); return ESP_FAIL; } + /* we've just sent a mqtt control packet, update keepalive counter + * [MQTT-3.1.2-23] + */ + client->keepalive_tick = platform_tick_get_ms(); return ESP_OK; } @@ -630,10 +634,6 @@ static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client) esp_mqtt_dispatch_event(client); } break; - case MQTT_MSG_TYPE_PINGREQ: - client->mqtt_state.outbound_message = mqtt_msg_pingresp(&client->mqtt_state.mqtt_connection); - mqtt_write_data(client); - break; case MQTT_MSG_TYPE_PINGRESP: ESP_LOGD(TAG, "MQTT_MSG_TYPE_PINGRESP"); // Ignore @@ -702,7 +702,6 @@ static void esp_mqtt_task(void *pv) esp_mqtt_abort_connection(client); break; } - client->keepalive_tick = platform_tick_get_ms(); } //Delete mesaage after 30 senconds @@ -741,7 +740,6 @@ esp_err_t esp_mqtt_client_start(esp_mqtt_client_handle_t client) ESP_LOGE(TAG, "Error create mqtt task"); return ESP_FAIL; } - xEventGroupClearBits(client->status_bits, STOPPED_BIT); return ESP_OK; }