From febcda0095e9754787eeba3569543c953635da3e Mon Sep 17 00:00:00 2001 From: copercini Date: Sat, 14 Apr 2018 04:44:21 -0300 Subject: [PATCH] add WiFiClientSecure::peek(); (#1310) --- .../WiFiClientSecure/src/WiFiClientSecure.cpp | 32 ++++++++++++++++--- .../WiFiClientSecure/src/WiFiClientSecure.h | 6 ++-- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp index a0a8b3d8..f40e4707 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp @@ -39,7 +39,7 @@ WiFiClientSecure::WiFiClientSecure() _CA_cert = NULL; _cert = NULL; _private_key = NULL; - next = NULL; + next = NULL; } @@ -58,13 +58,13 @@ WiFiClientSecure::WiFiClientSecure(int sock) _CA_cert = NULL; _cert = NULL; _private_key = NULL; - next = NULL; + next = NULL; } WiFiClientSecure::~WiFiClientSecure() { stop(); - delete sslclient; + delete sslclient; } WiFiClientSecure &WiFiClientSecure::operator=(const WiFiClientSecure &other) @@ -113,6 +113,14 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, const char *_CA_c return 1; } +int WiFiClientSecure::peek(){ + if(_peek >= 0){ + return _peek; + } + _peek = read(); + return _peek; +} + size_t WiFiClientSecure::write(uint8_t data) { return write(&data, 1); @@ -120,7 +128,14 @@ size_t WiFiClientSecure::write(uint8_t data) int WiFiClientSecure::read() { - uint8_t data = 0; + uint8_t data = -1; + + if(_peek >= 0){ + data = _peek; + _peek = -1; + return data; + } + int res = read(&data, 1); if (res < 0) { return res; @@ -143,6 +158,13 @@ size_t WiFiClientSecure::write(const uint8_t *buf, size_t size) int WiFiClientSecure::read(uint8_t *buf, size_t size) { + if(_peek >= 0){ + uint8_t data = -1; + data = _peek; + _peek = -1; + return data; + } + if (!available()) { return -1; } @@ -161,7 +183,7 @@ int WiFiClientSecure::available() int res = data_to_read(sslclient); if (res < 0 ) { stop(); - } + } return res; } diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.h b/libraries/WiFiClientSecure/src/WiFiClientSecure.h index 8b6899a6..f4e88021 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.h +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.h @@ -31,6 +31,7 @@ protected: sslclient_context *sslclient; int _lastError = 0; + int _peek = -1; const char *_CA_cert; const char *_cert; const char *_private_key; @@ -44,15 +45,12 @@ public: int connect(const char *host, uint16_t port); int connect(IPAddress ip, uint16_t port, const char *rootCABuff, const char *cli_cert, const char *cli_key); int connect(const char *host, uint16_t port, const char *rootCABuff, const char *cli_cert, const char *cli_key); + int peek(); size_t write(uint8_t data); size_t write(const uint8_t *buf, size_t size); int available(); int read(); int read(uint8_t *buf, size_t size); - int peek() - { - return 0; - } void flush() {} void stop(); uint8_t connected();