From 86c29847f05de92556f399e56c16bc5e4d8d7baf Mon Sep 17 00:00:00 2001 From: Craig Forbes Date: Thu, 25 Apr 2019 20:53:29 -0500 Subject: [PATCH 1/3] Add debug print in socket_close. Remove tab characters. --- adafruit_esp32spi/adafruit_esp32spi.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index e1d4c7a..e5f109a 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -66,20 +66,20 @@ _SCAN_NETWORKS = const(0x27) _GET_SOCKET_CMD = const(0x3F) _GET_STATE_TCP_CMD = const(0x29) -_DATA_SENT_TCP_CMD = const(0x2A) -_AVAIL_DATA_TCP_CMD = const(0x2B) -_GET_DATA_TCP_CMD = const(0x2C) +_DATA_SENT_TCP_CMD = const(0x2A) +_AVAIL_DATA_TCP_CMD = const(0x2B) +_GET_DATA_TCP_CMD = const(0x2C) _START_CLIENT_TCP_CMD = const(0x2D) _STOP_CLIENT_TCP_CMD = const(0x2E) _GET_CLIENT_STATE_TCP_CMD = const(0x2F) -_DISCONNECT_CMD = const(0x30) +_DISCONNECT_CMD = const(0x30) _GET_IDX_RSSI_CMD = const(0x32) _GET_IDX_ENCT_CMD = const(0x33) _REQ_HOST_BY_NAME_CMD = const(0x34) _GET_HOST_BY_NAME_CMD = const(0x35) _START_SCAN_NETWORKS = const(0x36) _GET_FW_VERSION_CMD = const(0x37) -_PING_CMD = const(0x3E) +_PING_CMD = const(0x3E) _SEND_DATA_TCP_CMD = const(0x44) _GET_DATABUF_TCP_CMD = const(0x45) @@ -612,6 +612,8 @@ def socket_connect(self, socket_num, dest, port, conn_mode=TCP_MODE): def socket_close(self, socket_num): """Close a socket using the ESP32's internal reference number""" + if self._debug: + print("*** Closing socket #%d" % socket_num) self._socknum_ll[0][0] = socket_num resp = self._send_command_get_response(_STOP_CLIENT_TCP_CMD, self._socknum_ll) if resp[0][0] != 1: From 11c2bfbc2a40bdd9c000557d45e180643136a9ae Mon Sep 17 00:00:00 2001 From: Craig Forbes Date: Thu, 25 Apr 2019 20:59:02 -0500 Subject: [PATCH 2/3] Fix socket leak when exception is raised in request. Added __enter__ and __exit__ to Response for as with context manager. --- adafruit_esp32spi/adafruit_esp32spi_requests.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_requests.py b/adafruit_esp32spi/adafruit_esp32spi_requests.py index 54a2103..ec17481 100755 --- a/adafruit_esp32spi/adafruit_esp32spi_requests.py +++ b/adafruit_esp32spi/adafruit_esp32spi_requests.py @@ -69,6 +69,12 @@ def __init__(self, sock): self._read_so_far = 0 self.headers = {} + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + def close(self): """Close, delete and collect the response data""" if self.socket: @@ -216,7 +222,7 @@ def request(method, url, data=None, json=None, headers=None, stream=False): elif line.startswith(b"Location:") and not 200 <= status <= 299: raise NotImplementedError("Redirects not yet supported") - except OSError: + except: sock.close() raise From 4ebc502faf821c1cfc984f12bc3c6aacbfe64385 Mon Sep 17 00:00:00 2001 From: Craig Forbes Date: Thu, 25 Apr 2019 21:04:54 -0500 Subject: [PATCH 3/3] Fix import so debug works in ESPSPI_WiFiManager. Made status_pixed optional to match docs. --- adafruit_esp32spi/adafruit_esp32spi_wifimanager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_wifimanager.py b/adafruit_esp32spi/adafruit_esp32spi_wifimanager.py index 02a1555..9906847 100755 --- a/adafruit_esp32spi/adafruit_esp32spi_wifimanager.py +++ b/adafruit_esp32spi/adafruit_esp32spi_wifimanager.py @@ -31,14 +31,14 @@ # pylint: disable=no-name-in-module -import adafruit_esp32spi +from adafruit_esp32spi import adafruit_esp32spi import adafruit_esp32spi.adafruit_esp32spi_requests as requests class ESPSPI_WiFiManager: """ A class to help manage the Wifi connection """ - def __init__(self, esp, secrets, status_pixel, attempts=2): + def __init__(self, esp, secrets, status_pixel=None, attempts=2): """ :param ESP_SPIcontrol esp: The ESP object we are using :param dict secrets: The WiFi and Adafruit IO secrets dict (See examples)