Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit 53aaae1

Browse files
committed
FirebaseHttpClient: add forceReuse
Fixes #230
1 parent 7144703 commit 53aaae1

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

src/FirebaseHttpClient_Esp8266.cpp

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,44 @@
1515
#define USE_ESP_ARDUINO_CORE_2_0_0
1616
#endif
1717

18+
// Firebase now returns `Connection: close` after REST streaming redirection.
19+
//
20+
// Override the built-in ESP8266HTTPClient to *not* close the
21+
// connection if forceReuse it set to `true`.
22+
class ForceReuseHTTPClient : public HTTPClient {
23+
public:
24+
void end() {
25+
if(connected()) {
26+
if(_tcp->available() > 0) {
27+
DEBUG_HTTPCLIENT("[HTTP-Client][end] still data in buffer (%d), clean up.\n", _tcp->available());
28+
while(_tcp->available() > 0) {
29+
_tcp->read();
30+
}
31+
}
32+
if(_reuse && (_canReuse || _forceReuse)) {
33+
DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp keep open for reuse\n");
34+
} else {
35+
DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp stop\n");
36+
_tcp->stop();
37+
}
38+
} else {
39+
DEBUG_HTTPCLIENT("[HTTP-Client][end] tcp is closed\n");
40+
}
41+
}
42+
void forceReuse(bool forceReuse) {
43+
_forceReuse = forceReuse;
44+
}
45+
protected:
46+
bool _forceReuse = false;
47+
};
48+
1849
class FirebaseHttpClientEsp8266 : public FirebaseHttpClient {
1950
public:
2051
FirebaseHttpClientEsp8266() {}
2152

22-
void setReuseConnection(bool reuse) override {
53+
void setReuseConnection(bool reuse) override {
2354
http_.setReuse(reuse);
55+
http_.forceReuse(reuse);
2456
}
2557

2658
void begin(const std::string& url) override {
@@ -64,7 +96,7 @@ class FirebaseHttpClientEsp8266 : public FirebaseHttpClient {
6496
}
6597

6698
private:
67-
HTTPClient http_;
99+
ForceReuseHTTPClient http_;
68100
};
69101

70102
FirebaseHttpClient* FirebaseHttpClient::create() {

0 commit comments

Comments
 (0)