From 4c08389961c60adeb343fc9581ca2e3856e09e04 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Thu, 14 Dec 2017 11:10:01 +0800 Subject: [PATCH] ESP8266WebServer: send empty chunk when done sending chunked response Fixes https://github.com/esp8266/Arduino/issues/3225 --- .../ESP8266WebServer/src/ESP8266WebServer.cpp | 32 +++++++++++++------ .../ESP8266WebServer/src/ESP8266WebServer.h | 1 + 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp index 6b97505ee..d1a0f0435 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp @@ -433,6 +433,9 @@ void ESP8266WebServer::sendContent(const String& content) { _currentClient.write(content.c_str(), len); if(_chunked){ _currentClient.write(footer, 2); + if (len == 0) { + _chunked = false; + } } } @@ -453,6 +456,9 @@ void ESP8266WebServer::sendContent_P(PGM_P content, size_t size) { _currentClient.write_P(content, size); if(_chunked){ _currentClient.write(footer, 2); + if (size == 0) { + _chunked = false; + } } } @@ -560,19 +566,27 @@ void ESP8266WebServer::_handleRequest() { } #endif } - - if (!handled) { - if(_notFoundHandler) { - _notFoundHandler(); - } - else { - send(404, "text/plain", String("Not found: ") + _currentUri); - } + if (!handled && _notFoundHandler) { + _notFoundHandler(); + handled = true; + } + if (!handled) { + send(404, "text/plain", String("Not found: ") + _currentUri); + handled = true; + } + if (handled) { + _finalizeResponse(); } - _currentUri = String(); } + +void ESP8266WebServer::_finalizeResponse() { + if (_chunked) { + sendContent(""); + } +} + String ESP8266WebServer::_responseCodeToString(int code) { switch (code) { case 100: return F("Continue"); diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index 6eeb9f978..6ccb7d06d 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -142,6 +142,7 @@ template size_t streamFile(T &file, const String& contentType){ protected: void _addRequestHandler(RequestHandler* handler); void _handleRequest(); + void _finalizeResponse(); bool _parseRequest(WiFiClient& client); void _parseArguments(String data); static String _responseCodeToString(int code);