From 5468812946002fdbc601fc6e7420d587970f22a0 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Sun, 7 May 2017 08:19:55 +0800 Subject: [PATCH] esp32: reapply pending count just for esp32 --- component.mk | 4 +++- lib/output.c | 8 +++++++- lib/service.c | 11 ++++++++--- lib/ssl.c | 1 + plugins/protocol_esp32_lws_ota.c | 2 +- plugins/protocol_esp32_lws_scan.c | 9 +++++++++ 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/component.mk b/component.mk index d80bba93..f7dbbd8e 100644 --- a/component.mk +++ b/component.mk @@ -10,11 +10,13 @@ CROSS_PATH:= $(shell dirname $(CROSS_PATH1) )/.. # -DOPENSSL_LIBRARIES="${PWD}/../../boringssl/build/ssl/libssl.a;${PWD}/../../boringssl/build/crypto/libcrypto.a" \ # -DOPENSSL_INCLUDE_DIRS="${PWD}/../../boringssl/include" \ +# -DNDEBUG=1 after cflags + .PHONY: build build: cd $(COMPONENT_BUILD_DIR) ; \ echo "doing lws cmake" ; \ - cmake $(COMPONENT_PATH) -DLWS_C_FLAGS="$(CFLAGS) -DNDEBUG=1 " \ + cmake $(COMPONENT_PATH) -DLWS_C_FLAGS="$(CFLAGS) -DNDEBUG=1" \ -DIDF_PATH=$(IDF_PATH) \ -DCROSS_PATH=$(CROSS_PATH) \ -DCOMPONENT_PATH=$(COMPONENT_PATH) \ diff --git a/lib/output.c b/lib/output.c index 727c423f..c77b5c05 100644 --- a/lib/output.c +++ b/lib/output.c @@ -159,6 +159,8 @@ int lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len) n = lws_ssl_capable_write(wsi, buf, n); lws_latency(context, wsi, "send lws_issue_raw", n, n == len); + //lwsl_notice("lws_ssl_capable_write: %d\n", n); + switch (n) { case LWS_SSL_CAPABLE_ERROR: /* we're going to close, let close know sends aren't possible */ @@ -202,7 +204,7 @@ handle_truncated_send: * Newly truncated send. Buffer the remainder (it will get * first priority next time the socket is writable) */ - lwsl_info("%p new partial sent %d from %lu total\n", wsi, n, + lwsl_debug("%p new partial sent %d from %lu total\n", wsi, n, (unsigned long)real_len); /* @@ -813,5 +815,9 @@ LWS_VISIBLE int lws_ssl_pending_no_ssl(struct lws *wsi) { (void)wsi; +#if defined(LWS_WITH_ESP32) + return 100; +#else return 0; +#endif } diff --git a/lib/service.c b/lib/service.c index 5d402d0e..b23defd7 100644 --- a/lib/service.c +++ b/lib/service.c @@ -90,8 +90,10 @@ lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd) /* leave POLLOUT active either way */ goto bail_ok; } else - if (wsi->state == LWSS_FLUSHING_STORED_SEND_BEFORE_CLOSE) + if (wsi->state == LWSS_FLUSHING_STORED_SEND_BEFORE_CLOSE) { + wsi->socket_is_permanently_unusable = 1; goto bail_die; /* retry closing now */ + } if (wsi->mode == LWSCM_WSCL_ISSUE_HTTP_BODY) goto user_service; @@ -906,8 +908,11 @@ lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int t #endif // lwsl_debug("fd=%d, revents=%d, mode=%d, state=%d\n", pollfd->fd, pollfd->revents, (int)wsi->mode, (int)wsi->state); - if (pollfd->revents & LWS_POLLHUP) + if (pollfd->revents & LWS_POLLHUP) { + lwsl_debug("pollhup\n"); + wsi->socket_is_permanently_unusable = 1; goto close_and_handled; + } #ifdef LWS_OPENSSL_SUPPORT @@ -1318,7 +1323,7 @@ drain: goto handled; close_and_handled: - lwsl_debug("Close and handled\n"); + lwsl_debug("%p: Close and handled\n", wsi); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS); /* * pollfd may point to something else after the close diff --git a/lib/ssl.c b/lib/ssl.c index c8ebe88b..a7969f3d 100644 --- a/lib/ssl.c +++ b/lib/ssl.c @@ -334,6 +334,7 @@ lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, int len) if (n < 0) { n = lws_ssl_get_error(wsi, n); + lwsl_notice("get_ssl_err result %d\n", n); if (n == SSL_ERROR_WANT_READ || SSL_want_read(wsi->ssl)) { lwsl_debug("%s: WANT_READ\n", __func__); lwsl_debug("%p: LWS_SSL_CAPABLE_MORE_SERVICE\n", wsi); diff --git a/plugins/protocol_esp32_lws_ota.c b/plugins/protocol_esp32_lws_ota.c index 0a775f4a..a1dc14be 100644 --- a/plugins/protocol_esp32_lws_ota.c +++ b/plugins/protocol_esp32_lws_ota.c @@ -59,7 +59,7 @@ static void ota_reboot_timer_cb(TimerHandle_t t) const esp_partition_t * ota_choose_part(void) { - const esp_partition_t *bootpart, *part; + const esp_partition_t *bootpart, *part = NULL; esp_partition_iterator_t i; bootpart = lws_esp_ota_get_boot_partition(); diff --git a/plugins/protocol_esp32_lws_scan.c b/plugins/protocol_esp32_lws_scan.c index ebb36db3..b6b29636 100644 --- a/plugins/protocol_esp32_lws_scan.c +++ b/plugins/protocol_esp32_lws_scan.c @@ -39,6 +39,7 @@ struct store_json { struct per_session_data__esplws_scan { struct per_session_data__esplws_scan *next; scan_state scan_state; + struct timeval last_send; struct lws_spa *spa; char filename[32]; @@ -361,6 +362,7 @@ callback_esplws_scan(struct lws *wsi, enum lws_callback_reasons reason, } switch (pss->scan_state) { + struct timeval t; char ssid[32]; uint8_t mac[6]; struct lws_esp32_image i; @@ -369,6 +371,12 @@ callback_esplws_scan(struct lws *wsi, enum lws_callback_reasons reason, case SCAN_STATE_INITIAL: + gettimeofday(&t, NULL); + if (t.tv_sec - pss->last_send.tv_sec < 10) + return 0; + + pss->last_send = t; + ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); n = 0; if (nvs_get_blob(nvh, "ssl-pub.der", NULL, &s) == ESP_OK) @@ -495,6 +503,7 @@ scan_state_final: return 0; } issue: +// lwsl_notice("issue: %d (%d)\n", p - start, n); m = lws_write(wsi, (unsigned char *)start, p - start, n); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m);