diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp index 5f1ab6a0e9d..61a9a602358 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp @@ -157,12 +157,6 @@ int WiFiClientSecure::read() { uint8_t data = -1; - if(_peek >= 0){ - data = _peek; - _peek = -1; - return data; - } - int res = read(&data, 1); if (res < 0) { return res; @@ -185,7 +179,6 @@ size_t WiFiClientSecure::write(const uint8_t *buf, size_t size) int WiFiClientSecure::read(uint8_t *buf, size_t size) { - int peeked = 0; if ((!buf && size) || (_peek < 0 && !available())) { return -1; } @@ -195,12 +188,8 @@ int WiFiClientSecure::read(uint8_t *buf, size_t size) if(_peek >= 0){ buf[0] = _peek; _peek = -1; - size--; - if(!size || !available()){ - return 1; - } - buf++; - peeked = 1; + int ret = read(buf+1, size-1); + return 1 + ((ret > 0) ? ret : 0); } int res = get_ssl_receive(sslclient, buf, size); @@ -208,18 +197,20 @@ int WiFiClientSecure::read(uint8_t *buf, size_t size) stop(); return res; } - return res + peeked; + return res; } int WiFiClientSecure::available() { - if (!_connected) { - return 0; + int res = 0; + if (_connected) { + res = data_to_read(sslclient); + if (res < 0 ) { + stop(); + res = 0; + } } - int res = data_to_read(sslclient); - if (res < 0 ) { - stop(); - } else if(_peek >= 0) { + if(_peek >= 0) { res += 1; } return res;