From 53aaae103a1f6d8b6916392897b8465aa79ebe91 Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Mon, 10 Apr 2017 01:59:07 -0700 Subject: [PATCH 1/3] FirebaseHttpClient: add forceReuse Fixes #230 --- src/FirebaseHttpClient_Esp8266.cpp | 36 ++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/FirebaseHttpClient_Esp8266.cpp b/src/FirebaseHttpClient_Esp8266.cpp index 7643db1e..74be1f1f 100644 --- a/src/FirebaseHttpClient_Esp8266.cpp +++ b/src/FirebaseHttpClient_Esp8266.cpp @@ -15,12 +15,44 @@ #define USE_ESP_ARDUINO_CORE_2_0_0 #endif +// Firebase now returns `Connection: close` after REST streaming redirection. +// +// Override the built-in ESP8266HTTPClient to *not* close the +// connection if forceReuse it set to `true`. +class ForceReuseHTTPClient : public HTTPClient { +public: + void end() { + if(connected()) { + if(_tcp->available() > 0) { + DEBUG_HTTPCLIENT("[HTTP-Client][end] still data in buffer (%d), clean up.\n", _tcp->available()); + while(_tcp->available() > 0) { + _tcp->read(); + } + } + if(_reuse && (_canReuse || _forceReuse)) { + DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp keep open for reuse\n"); + } else { + DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp stop\n"); + _tcp->stop(); + } + } else { + DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp is closed\n"); + } + } + void forceReuse(bool forceReuse) { + _forceReuse = forceReuse; + } +protected: + bool _forceReuse = false; +}; + class FirebaseHttpClientEsp8266 : public FirebaseHttpClient { public: FirebaseHttpClientEsp8266() {} - void setReuseConnection(bool reuse) override { + void setReuseConnection(bool reuse) override { http_.setReuse(reuse); + http_.forceReuse(reuse); } void begin(const std::string& url) override { @@ -64,7 +96,7 @@ class FirebaseHttpClientEsp8266 : public FirebaseHttpClient { } private: - HTTPClient http_; + ForceReuseHTTPClient http_; }; FirebaseHttpClient* FirebaseHttpClient::create() { From 3a68e6c5a55250db479d05385f2a100d5a6e78ef Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Mon, 10 Apr 2017 02:03:49 -0700 Subject: [PATCH 2/3] FirebaseHttpClient_Esp8266: fix trailing space --- src/FirebaseHttpClient_Esp8266.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FirebaseHttpClient_Esp8266.cpp b/src/FirebaseHttpClient_Esp8266.cpp index 74be1f1f..837b6ab1 100644 --- a/src/FirebaseHttpClient_Esp8266.cpp +++ b/src/FirebaseHttpClient_Esp8266.cpp @@ -50,7 +50,7 @@ class FirebaseHttpClientEsp8266 : public FirebaseHttpClient { public: FirebaseHttpClientEsp8266() {} - void setReuseConnection(bool reuse) override { + void setReuseConnection(bool reuse) override { http_.setReuse(reuse); http_.forceReuse(reuse); } From df523c084abb599234f332d8e45aec824d061c61 Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Fri, 27 Oct 2017 21:40:57 +0900 Subject: [PATCH 3/3] reuse HTTPClient::end --- src/FirebaseHttpClient_Esp8266.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/FirebaseHttpClient_Esp8266.cpp b/src/FirebaseHttpClient_Esp8266.cpp index 837b6ab1..92dbe92d 100644 --- a/src/FirebaseHttpClient_Esp8266.cpp +++ b/src/FirebaseHttpClient_Esp8266.cpp @@ -22,22 +22,10 @@ class ForceReuseHTTPClient : public HTTPClient { public: void end() { - if(connected()) { - if(_tcp->available() > 0) { - DEBUG_HTTPCLIENT("[HTTP-Client][end] still data in buffer (%d), clean up.\n", _tcp->available()); - while(_tcp->available() > 0) { - _tcp->read(); - } - } - if(_reuse && (_canReuse || _forceReuse)) { - DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp keep open for reuse\n"); - } else { - DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp stop\n"); - _tcp->stop(); - } - } else { - DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp is closed\n"); - } + if (_forceReuse) { + _canReuse = true; + } + HTTPClient::end(); } void forceReuse(bool forceReuse) { _forceReuse = forceReuse;