diff --git a/libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino b/libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino index e0eb2879b..5e767ccd5 100644 --- a/libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino +++ b/libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino @@ -41,7 +41,7 @@ void loop() { // wait for WiFi connection if ((WiFiMulti.run() == WL_CONNECTED)) { - BearSSL::WiFiClientSecure *client = new BearSSL::WiFiClientSecure; + std::unique_ptrclient(new BearSSL::WiFiClientSecure); client->setFingerprint(fingerprint); @@ -50,7 +50,6 @@ void loop() { Serial.print("[HTTPS] begin...\n"); if (https.begin(*client, "https://jigsaw.w3.org/HTTP/connection.html")) { // HTTPS - Serial.print("[HTTPS] GET...\n"); // start connection and send HTTP header int httpCode = https.GET(); @@ -73,9 +72,8 @@ void loop() { } else { Serial.printf("[HTTPS] Unable to connect\n"); } - - delete client; } + Serial.println("Wait 10s before next round..."); delay(10000); } diff --git a/libraries/ESP8266HTTPClient/examples/StreamHttpsClient/StreamHttpsClient.ino b/libraries/ESP8266HTTPClient/examples/StreamHttpsClient/StreamHttpsClient.ino index b802e2dc5..55009349f 100644 --- a/libraries/ESP8266HTTPClient/examples/StreamHttpsClient/StreamHttpsClient.ino +++ b/libraries/ESP8266HTTPClient/examples/StreamHttpsClient/StreamHttpsClient.ino @@ -38,9 +38,7 @@ void loop() { // wait for WiFi connection if ((WiFiMulti.run() == WL_CONNECTED)) { - HTTPClient http; - - BearSSL::WiFiClientSecure *client = new BearSSL::WiFiClientSecure ; + std::unique_ptr client(new BearSSL::WiFiClientSecure); bool mfln = client->probeMaxFragmentLength("tls.mbed.org", 443, 1024); Serial.printf("\nConnecting to https://tls.mbed.org\n"); @@ -53,13 +51,16 @@ void loop() { // configure server and url const uint8_t fingerprint[20] = {0xEB, 0xD9, 0xDF, 0x37, 0xC2, 0xCC, 0x84, 0x89, 0x00, 0xA0, 0x58, 0x52, 0x24, 0x04, 0xE4, 0x37, 0x3E, 0x2B, 0xF1, 0x41}; + client->setFingerprint(fingerprint); - if (http.begin(*client, "https://tls.mbed.org/")) { + HTTPClient https; + + if (https.begin(*client, "https://tls.mbed.org/")) { Serial.print("[HTTPS] GET...\n"); // start connection and send HTTP header - int httpCode = http.GET(); + int httpCode = https.GET(); if (httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTPS] GET... code: %d\n", httpCode); @@ -68,22 +69,19 @@ void loop() { if (httpCode == HTTP_CODE_OK) { // get lenght of document (is -1 when Server sends no Content-Length header) - int len = http.getSize(); + int len = https.getSize(); // create buffer for read static uint8_t buff[128] = { 0 }; - // get tcp stream - WiFiClient * stream = client; - // read all data from server - while (http.connected() && (len > 0 || len == -1)) { + while (https.connected() && (len > 0 || len == -1)) { // get available data size - size_t size = stream->available(); + size_t size = client->available(); if (size) { // read up to 128 byte - int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); + int c = client->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); // write it to Serial Serial.write(buff, c); @@ -100,16 +98,15 @@ void loop() { } } else { - Serial.printf("[HTTPS] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); + Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str()); } - http.end(); + https.end(); } else { Serial.printf("Unable to connect\n"); } - - delete client; } + Serial.println("Wait 10s before the next round..."); delay(10000); } diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp index 1872ed08c..62031fb50 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp @@ -123,7 +123,7 @@ HTTPClient::HTTPClient() HTTPClient::~HTTPClient() { if(_client) { - DEBUG_HTTPCLIENT("[HTTP-Client][~HTTPClient] end() not called before destruction of HTTPClient\n"); + _client->stop(); } if(_currentHeaders) { delete[] _currentHeaders; @@ -147,7 +147,13 @@ void HTTPClient::clear() * @return success bool */ bool HTTPClient::begin(WiFiClient &client, String url) { - end(); +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if(_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } +#endif _client = &client; @@ -180,7 +186,13 @@ bool HTTPClient::begin(WiFiClient &client, String url) { */ bool HTTPClient::begin(WiFiClient &client, String host, uint16_t port, String uri, bool https) { - end(); +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if(_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } +#endif _client = &client; @@ -196,8 +208,11 @@ bool HTTPClient::begin(WiFiClient &client, String host, uint16_t port, String ur #ifdef HTTPCLIENT_1_1_COMPATIBLE bool HTTPClient::begin(String url, String httpsFingerprint) { - _canReuse = false; - end(); + if(_client && !_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } _port = 443; if (httpsFingerprint.length() == 0) { @@ -214,8 +229,11 @@ bool HTTPClient::begin(String url, String httpsFingerprint) bool HTTPClient::begin(String url, const uint8_t httpsFingerprint[20]) { - _canReuse = false; - end(); + if(_client && !_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } _port = 443; if (!beginInternal(url, "https")) { @@ -237,8 +255,11 @@ bool HTTPClient::begin(String url, const uint8_t httpsFingerprint[20]) */ bool HTTPClient::begin(String url) { - _canReuse = false; - end(); + if(_client && !_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } _port = 80; if (!beginInternal(url, "http")) { @@ -299,8 +320,11 @@ bool HTTPClient::beginInternal(String url, const char* expectedProtocol) #ifdef HTTPCLIENT_1_1_COMPATIBLE bool HTTPClient::begin(String host, uint16_t port, String uri) { - _canReuse = false; - end(); + if(_client && !_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } clear(); _host = host; @@ -325,8 +349,11 @@ bool HTTPClient::begin(String host, uint16_t port, String uri, bool https, Strin bool HTTPClient::begin(String host, uint16_t port, String uri, String httpsFingerprint) { - _canReuse = false; - end(); + if(_client && !_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } clear(); _host = host; @@ -343,8 +370,11 @@ bool HTTPClient::begin(String host, uint16_t port, String uri, String httpsFinge bool HTTPClient::begin(String host, uint16_t port, String uri, const uint8_t httpsFingerprint[20]) { - _canReuse = false; - end(); + if(_client && !_tcpDeprecated) { + DEBUG_HTTPCLIENT("[HTTP-Client][begin] mix up of new and deprecated api\n"); + _canReuse = false; + end(); + } clear(); _host = host; @@ -367,7 +397,6 @@ bool HTTPClient::begin(String host, uint16_t port, String uri, const uint8_t htt */ void HTTPClient::end(void) { - _canReuse = false; disconnect(); clear(); } @@ -379,15 +408,13 @@ void HTTPClient::end(void) void HTTPClient::disconnect() { if(connected()) { - if(_client) { - if(_client->available() > 0) { - DEBUG_HTTPCLIENT("[HTTP-Client][end] still data in buffer (%d), clean up.\n", _client->available()); - while(_client->available() > 0) { - _client->read(); - } + if(_client->available() > 0) { + DEBUG_HTTPCLIENT("[HTTP-Client][end] still data in buffer (%d), clean up.\n", _client->available()); + while(_client->available() > 0) { + _client->read(); } - } + if(_reuse && _canReuse) { DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp keep open for reuse\n"); } else {