From 996cc5e5a0e38b09e25d76ca08455f4c08c66d64 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 7 May 2024 11:57:39 +0200 Subject: [PATCH 1/6] WiFiS3: unify codestyle and remove trailing spaces --- libraries/WiFiS3/src/WiFiClient.cpp | 68 +++++++++++++------------- libraries/WiFiS3/src/WiFiClient.h | 2 +- libraries/WiFiS3/src/WiFiSSLClient.cpp | 50 +++++++++---------- libraries/WiFiS3/src/WiFiSSLClient.h | 2 +- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/libraries/WiFiS3/src/WiFiClient.cpp b/libraries/WiFiS3/src/WiFiClient.cpp index adb020053..5f765895f 100644 --- a/libraries/WiFiS3/src/WiFiClient.cpp +++ b/libraries/WiFiS3/src/WiFiClient.cpp @@ -3,11 +3,11 @@ using namespace std; /* -------------------------------------------------------------------------- */ -WiFiClient::WiFiClient() : _sock(-1), destroy_at_distructor(true), rx_buffer(nullptr) { +WiFiClient::WiFiClient() : _sock(-1), destroy_at_distructor(true), rx_buffer(nullptr) { rx_buffer = std::shared_ptr>(new FifoBuffer()); } /* -------------------------------------------------------------------------- */ - + /* -------------------------------------------------------------------------- */ WiFiClient::WiFiClient(int s) : _sock(s), destroy_at_distructor(false), rx_buffer(nullptr) { rx_buffer = std::shared_ptr>(new FifoBuffer()); @@ -18,9 +18,9 @@ WiFiClient::WiFiClient(int s) : _sock(s), destroy_at_distructor(false), rx_buffe WiFiClient::~WiFiClient() { } /* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ WiFiClient::WiFiClient(const WiFiClient& c) { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ _sock = c._sock; rx_buffer = c.rx_buffer; } @@ -34,7 +34,7 @@ void WiFiClient::getSocket() { if(modem.write(string(PROMPT(_BEGINCLIENT)),res, "%s" , CMD(_BEGINCLIENT))) { _sock = atoi(res.c_str()); } - } + } } /* -------------------------------------------------------------------------- */ @@ -45,7 +45,7 @@ int WiFiClient::connect(IPAddress ip, uint16_t port){ /* -------------------------------------------------------------------------- */ int WiFiClient::connect(const char *host, uint16_t port){ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ getSocket(); if(_sock >= 0) { string res = ""; @@ -55,17 +55,18 @@ int WiFiClient::connect(const char *host, uint16_t port){ return 1; } } else { - if(modem.write(string(PROMPT(_CLIENTCONNECTNAME)),res, "%s%d,%s,%d\r\n" , CMD_WRITE(_CLIENTCONNECTNAME), _sock, host,port)) { - return 1; - } + if(modem.write(string(PROMPT(_CLIENTCONNECTNAME)),res, "%s%d,%s,%d\r\n" , CMD_WRITE(_CLIENTCONNECTNAME), _sock, host,port)) { + return 1; + } } } + return 0; } /* -------------------------------------------------------------------------- */ size_t WiFiClient::write(uint8_t b){ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ return write(&b, 1); } @@ -79,7 +80,6 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size){ if(modem.passthrough(buf,size)) { return size; } - } return 0; @@ -87,7 +87,7 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size){ /* -------------------------------------------------------------------------- */ int WiFiClient::available() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ int rv = 0; if(_sock >= 0 && rx_buffer != nullptr) { if(rx_buffer->available() > 0) { @@ -109,17 +109,17 @@ int WiFiClient::available() { /* -------------------------------------------------------------------------- */ int WiFiClient::_read() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ int rv = -1; if(_sock >= 0 && rx_buffer != nullptr) { string res = ""; uint32_t size = rx_buffer->freePositions() - 1; modem.begin(); - + /* important - it works one shot */ modem.avoid_trim_results(); modem.read_using_size(); - + if(modem.write(string(PROMPT(_CLIENTRECEIVE)),res, "%s%d,%d\r\n" , CMD_WRITE(_CLIENTRECEIVE), _sock, size)) { if(res.size() > 0) { for(int i = 0, rv = 0; i < size && i < res.size(); i++) { @@ -133,11 +133,11 @@ int WiFiClient::_read() { } } return rv; -} +} /* -------------------------------------------------------------------------- */ void WiFiClient::read_if_needed(size_t s) { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ if(rx_buffer != nullptr) { if((size_t)rx_buffer->available() < s) { _read(); @@ -147,12 +147,12 @@ void WiFiClient::read_if_needed(size_t s) { /* -------------------------------------------------------------------------- */ int WiFiClient::read() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ uint8_t b; if(read(&b, 1) == 1) { return b; } - return -1; + return -1; } /* -------------------------------------------------------------------------- */ @@ -173,19 +173,19 @@ int WiFiClient::read(uint8_t *buf, size_t size) { } } } - return rv; + return rv; } /* -------------------------------------------------------------------------- */ int WiFiClient::peek() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ int rv = -1; if(_sock >= 0) { string res = ""; modem.begin(); if(modem.write(string(PROMPT(_PEEK)),res, "%s%d\r\n" , CMD_WRITE(_PEEK), _sock)) { rv = atoi(res.c_str()); - } + } } return rv; } @@ -193,7 +193,7 @@ int WiFiClient::peek() { /* -------------------------------------------------------------------------- */ void WiFiClient::flush() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ if(_sock >= 0) { string res = ""; modem.begin(); @@ -203,7 +203,7 @@ void WiFiClient::flush() { /* -------------------------------------------------------------------------- */ void WiFiClient::stop() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ if(_sock >= 0) { string res = ""; modem.begin(); @@ -214,7 +214,7 @@ void WiFiClient::stop() { /* -------------------------------------------------------------------------- */ uint8_t WiFiClient::connected() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ uint8_t rv = 0; if(this->available() > 0) { return 1; @@ -224,16 +224,16 @@ uint8_t WiFiClient::connected() { modem.begin(); if(modem.write(string(PROMPT(_CLIENTCONNECTED)),res, "%s%d\r\n" , CMD_WRITE(_CLIENTCONNECTED), _sock)) { rv = atoi(res.c_str()); - } + } } + return rv; } /* -------------------------------------------------------------------------- */ -bool WiFiClient::operator==(const WiFiClient& whs) -{ - /* -------------------------------------------------------------------------- */ - return _sock == whs._sock; +bool WiFiClient::operator==(const WiFiClient& whs) { +/* -------------------------------------------------------------------------- */ + return _sock == whs._sock; } /* -------------------------------------------------------------------------- */ @@ -246,14 +246,14 @@ IPAddress WiFiClient::remoteIP() { if(modem.write(string(PROMPT(_REMOTEIP)),res, "%s%d\r\n" , CMD_WRITE(_REMOTEIP), _sock)) { ip.fromString(res.c_str()); return ip; - } + } } return IPAddress(0,0,0,0); } /* -------------------------------------------------------------------------- */ uint16_t WiFiClient::remotePort(){ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ uint16_t rv = 0; if(_sock >= 0) { string res = ""; @@ -261,7 +261,7 @@ uint16_t WiFiClient::remotePort(){ if(modem.write(string(PROMPT(_REMOTEPORT)),res, "%s%d\r\n" , CMD_WRITE(_REMOTEPORT), _sock)) { rv = atoi(res.c_str()); return rv; - } + } } - return rv; + return rv; } diff --git a/libraries/WiFiS3/src/WiFiClient.h b/libraries/WiFiS3/src/WiFiClient.h index 972b98b8a..1ccc4cc57 100644 --- a/libraries/WiFiS3/src/WiFiClient.h +++ b/libraries/WiFiS3/src/WiFiClient.h @@ -67,7 +67,7 @@ class WiFiClient : public Client { } friend class WiFiServer; - + using Print::write; protected: diff --git a/libraries/WiFiS3/src/WiFiSSLClient.cpp b/libraries/WiFiS3/src/WiFiSSLClient.cpp index f67c30896..7bb438a14 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.cpp +++ b/libraries/WiFiS3/src/WiFiSSLClient.cpp @@ -23,7 +23,7 @@ void WiFiSSLClient::getSocket() { if(modem.write(string(PROMPT(_SSLBEGINCLIENT)),res, "%s" , CMD(_SSLBEGINCLIENT))) { _sock = atoi(res.c_str()); } - } + } } /* -------------------------------------------------------------------------- */ @@ -87,7 +87,7 @@ void WiFiSSLClient::setEccSlot(int ecc508KeySlot, const byte cert[], int certLen /* -------------------------------------------------------------------------- */ size_t WiFiSSLClient::write(uint8_t b){ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ return write(&b, 1); } @@ -101,7 +101,7 @@ size_t WiFiSSLClient::write(const uint8_t *buf, size_t size){ if(modem.passthrough(buf,size)) { return size; } - + } return 0; @@ -109,7 +109,7 @@ size_t WiFiSSLClient::write(const uint8_t *buf, size_t size){ /* -------------------------------------------------------------------------- */ int WiFiSSLClient::available(){ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ int rv = 0; if(_sock >= 0 && rx_buffer != nullptr) { if(rx_buffer->available() > 0) { @@ -123,7 +123,7 @@ int WiFiSSLClient::available(){ if (rv < 0) { return 0; } - } + } } } return rv; @@ -131,13 +131,13 @@ int WiFiSSLClient::available(){ /* -------------------------------------------------------------------------- */ int WiFiSSLClient::_read() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ int rv = -1; if(_sock >= 0) { string res = ""; uint32_t size = rx_buffer->freePositions() - 1; modem.begin(); - + /* important - it works one shot */ modem.avoid_trim_results(); modem.read_using_size(); @@ -154,11 +154,11 @@ int WiFiSSLClient::_read() { } } return rv; -} +} /* -------------------------------------------------------------------------- */ void WiFiSSLClient::read_if_needed(size_t s) { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ if((size_t)rx_buffer->available() < s) { _read(); } @@ -166,12 +166,12 @@ void WiFiSSLClient::read_if_needed(size_t s) { /* -------------------------------------------------------------------------- */ int WiFiSSLClient::read() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ uint8_t b; if(read(&b, 1) == 1) { return b; } - return -1; + return -1; } /* -------------------------------------------------------------------------- */ @@ -190,19 +190,19 @@ int WiFiSSLClient::read(uint8_t *buf, size_t size) { go_on = false; } } - return rv; + return rv; } /* -------------------------------------------------------------------------- */ int WiFiSSLClient::peek() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ int rv = -1; if(_sock >= 0) { string res = ""; modem.begin(); if(modem.write(string(PROMPT(_SSLPEEK)),res, "%s%d\r\n" , CMD_WRITE(_SSLPEEK), _sock)) { rv = atoi(res.c_str()); - } + } } return rv; } @@ -210,7 +210,7 @@ int WiFiSSLClient::peek() { /* -------------------------------------------------------------------------- */ void WiFiSSLClient::flush() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ if(_sock >= 0) { string res = ""; modem.begin(); @@ -220,7 +220,7 @@ void WiFiSSLClient::flush() { /* -------------------------------------------------------------------------- */ void WiFiSSLClient::stop() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ if(_sock >= 0) { string res = ""; modem.begin(); @@ -231,20 +231,20 @@ void WiFiSSLClient::stop() { /* -------------------------------------------------------------------------- */ uint8_t WiFiSSLClient::connected() { -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ uint8_t rv = 0; if(_sock >= 0) { string res = ""; modem.begin(); if(modem.write(string(PROMPT(_SSLCLIENTCONNECTED)),res, "%s%d\r\n" , CMD_WRITE(_SSLCLIENTCONNECTED), _sock)) { rv = atoi(res.c_str()); - } + } } return rv; } -bool WiFiSSLClient::operator==(const WiFiSSLClient& whs) -{ - return _sock == whs._sock; + +bool WiFiSSLClient::operator==(const WiFiSSLClient& whs) { + return _sock == whs._sock; } /* -------------------------------------------------------------------------- */ @@ -257,14 +257,14 @@ IPAddress WiFiSSLClient::remoteIP() { if(modem.write(string(PROMPT(_SSLREMOTEIP)),res, "%s%d\r\n" , CMD_WRITE(_SSLREMOTEIP), _sock)) { ip.fromString(res.c_str()); return ip; - } + } } return IPAddress(0,0,0,0); } /* -------------------------------------------------------------------------- */ uint16_t WiFiSSLClient::remotePort(){ -/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ uint16_t rv = 0; if(_sock >= 0) { string res = ""; @@ -272,7 +272,7 @@ uint16_t WiFiSSLClient::remotePort(){ if(modem.write(string(PROMPT(_SSLREMOTEPORT)),res, "%s%d\r\n" , CMD_WRITE(_SSLREMOTEPORT), _sock)) { rv = atoi(res.c_str()); return rv; - } + } } - return rv; + return rv; } \ No newline at end of file diff --git a/libraries/WiFiS3/src/WiFiSSLClient.h b/libraries/WiFiS3/src/WiFiSSLClient.h index c021a0a16..28f5fb348 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.h +++ b/libraries/WiFiS3/src/WiFiSSLClient.h @@ -45,7 +45,7 @@ class WiFiSSLClient : public WiFiClient { virtual void stop(); virtual uint8_t connected(); virtual operator bool() { - return _sock != -1; + return _sock != -1; } virtual bool operator==(const WiFiSSLClient&); virtual bool operator!=(const WiFiSSLClient& whs) From bf5da07809bfefc481563d0b83dc63cc1a0fdd19 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 7 May 2024 11:58:24 +0200 Subject: [PATCH 2/6] WiFiS3: WiFiClient: removing unimplemented method --- libraries/WiFiS3/src/WiFiClient.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/WiFiS3/src/WiFiClient.h b/libraries/WiFiS3/src/WiFiClient.h index 1ccc4cc57..54d86ad39 100644 --- a/libraries/WiFiS3/src/WiFiClient.h +++ b/libraries/WiFiS3/src/WiFiClient.h @@ -77,7 +77,6 @@ class WiFiClient : public Client { std::shared_ptr> rx_buffer; int _read(); void read_if_needed(size_t s); - void clear_buffer(); bool destroy_at_distructor; From 5798b34d25a598155b468dd296d0f95a4d9b41d2 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 7 May 2024 11:59:26 +0200 Subject: [PATCH 3/6] WiFiS3: clients: clear rx_buffer on stop() --- libraries/WiFiS3/src/WiFiClient.cpp | 2 ++ libraries/WiFiS3/src/WiFiSSLClient.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/libraries/WiFiS3/src/WiFiClient.cpp b/libraries/WiFiS3/src/WiFiClient.cpp index 5f765895f..706fcdf8a 100644 --- a/libraries/WiFiS3/src/WiFiClient.cpp +++ b/libraries/WiFiS3/src/WiFiClient.cpp @@ -210,6 +210,8 @@ void WiFiClient::stop() { modem.write(string(PROMPT(_CLIENTCLOSE)),res, "%s%d\r\n" , CMD_WRITE(_CLIENTCLOSE), _sock); _sock = -1; } + + rx_buffer->clear(); } /* -------------------------------------------------------------------------- */ diff --git a/libraries/WiFiS3/src/WiFiSSLClient.cpp b/libraries/WiFiS3/src/WiFiSSLClient.cpp index 7bb438a14..42693f893 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.cpp +++ b/libraries/WiFiS3/src/WiFiSSLClient.cpp @@ -227,6 +227,8 @@ void WiFiSSLClient::stop() { modem.write(string(PROMPT(_SSLCLIENTCLOSE)),res, "%s%d\r\n" , CMD_WRITE(_SSLCLIENTCLOSE), _sock); _sock = -1; } + + rx_buffer->clear(); } /* -------------------------------------------------------------------------- */ From 6fda842c801cc0b2e6b9f0afe4f5348b528e04ff Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 7 May 2024 12:00:15 +0200 Subject: [PATCH 4/6] WiFiS3: WiFiSSLClient: remove attributes that come from parent class --- libraries/WiFiS3/src/WiFiSSLClient.cpp | 3 +-- libraries/WiFiS3/src/WiFiSSLClient.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/libraries/WiFiS3/src/WiFiSSLClient.cpp b/libraries/WiFiS3/src/WiFiSSLClient.cpp index 42693f893..0d53da908 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.cpp +++ b/libraries/WiFiS3/src/WiFiSSLClient.cpp @@ -3,9 +3,8 @@ using namespace std; /* -------------------------------------------------------------------------- */ -WiFiSSLClient::WiFiSSLClient() : _sock(-1) { +WiFiSSLClient::WiFiSSLClient() { /* -------------------------------------------------------------------------- */ - rx_buffer = std::shared_ptr>(new FifoBuffer()); } /* -------------------------------------------------------------------------- */ diff --git a/libraries/WiFiS3/src/WiFiSSLClient.h b/libraries/WiFiS3/src/WiFiSSLClient.h index 28f5fb348..6bdbf9687 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.h +++ b/libraries/WiFiS3/src/WiFiSSLClient.h @@ -60,7 +60,6 @@ class WiFiSSLClient : public WiFiClient { using Print::write; private: - int _sock; void getSocket(); int _read(); void read_if_needed(size_t s); From 113a524992b0fab70aa33187c66c820e73a5400d Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 7 May 2024 12:01:36 +0200 Subject: [PATCH 5/6] WiFiS3: WiFiSSLClient: adding check for rx_buffer being != nullptr Like in parent class --- libraries/WiFiS3/src/WiFiSSLClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/WiFiS3/src/WiFiSSLClient.cpp b/libraries/WiFiS3/src/WiFiSSLClient.cpp index 0d53da908..259dd80af 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.cpp +++ b/libraries/WiFiS3/src/WiFiSSLClient.cpp @@ -132,7 +132,7 @@ int WiFiSSLClient::available(){ int WiFiSSLClient::_read() { /* -------------------------------------------------------------------------- */ int rv = -1; - if(_sock >= 0) { + if(_sock >= 0 && rx_buffer != nullptr) { string res = ""; uint32_t size = rx_buffer->freePositions() - 1; modem.begin(); From c9a7485dd85f5543d4acbbe5f01ed32fe31ceda3 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 7 May 2024 12:35:09 +0200 Subject: [PATCH 6/6] WiFiS3: clients: restore socket on connection loss When a client looses connection the client needs to be stopped before calling connect again --- libraries/WiFiS3/src/WiFiClient.cpp | 6 ++++++ libraries/WiFiS3/src/WiFiSSLClient.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/libraries/WiFiS3/src/WiFiClient.cpp b/libraries/WiFiS3/src/WiFiClient.cpp index 706fcdf8a..143f92dae 100644 --- a/libraries/WiFiS3/src/WiFiClient.cpp +++ b/libraries/WiFiS3/src/WiFiClient.cpp @@ -28,6 +28,12 @@ WiFiClient::WiFiClient(const WiFiClient& c) { /* -------------------------------------------------------------------------- */ void WiFiClient::getSocket() { /* -------------------------------------------------------------------------- */ + if(_sock >= 0 && !connected()) { + // if sock >= 0 -> it means we were connected, but something happened and we need + // to reset this socket in order to be able to connect again + stop(); + } + if(_sock == -1) { string res = ""; modem.begin(); diff --git a/libraries/WiFiS3/src/WiFiSSLClient.cpp b/libraries/WiFiS3/src/WiFiSSLClient.cpp index 259dd80af..91b6951e5 100644 --- a/libraries/WiFiS3/src/WiFiSSLClient.cpp +++ b/libraries/WiFiS3/src/WiFiSSLClient.cpp @@ -16,6 +16,12 @@ WiFiSSLClient::~WiFiSSLClient() { /* -------------------------------------------------------------------------- */ void WiFiSSLClient::getSocket() { /* -------------------------------------------------------------------------- */ + if(_sock >= 0 && !connected()) { + // if sock >= 0 -> it means we were connected, but something happened and we need + // to reset this socket in order to be able to connect again + stop(); + } + if(_sock == -1) { string res = ""; modem.begin();