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

Commit cd882c4

Browse files
Merge pull request #180 from mathieucarbou/refac
Reset connection when appropriate + some code cleanup
2 parents 5efe913 + 55fa42a commit cd882c4

File tree

3 files changed

+12
-13
lines changed

3 files changed

+12
-13
lines changed

examples/SimpleServer/SimpleServer.ino

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,10 @@ websocat: error running
750750
}
751751
});
752752

753+
// Reset connection on HTTP request:
754+
// for i in {1..20}; do curl -v -X GET https://192.168.4.1:80; done;
755+
// The heap size should not decrease over time.
756+
753757
#if __has_include("ArduinoJson.h")
754758
server.addHandler(jsonHandler);
755759
server.addHandler(msgPackHandler);

src/WebRequest.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void AsyncWebServerRequest::_onData(void* buf, size_t len) {
8989
// Check for null characters in header
9090
if (!str[i]) {
9191
_parseState = PARSE_REQ_FAIL;
92-
_client->close(true);
92+
_client->abort();
9393
return;
9494
}
9595
if (str[i] == '\n') {
@@ -160,6 +160,8 @@ void AsyncWebServerRequest::_onData(void* buf, size_t len) {
160160
if (!_sent) {
161161
if (!_response)
162162
send(501, T_text_plain, "Handler did not handle the request");
163+
else if (!_response->_sourceValid())
164+
send(500, T_text_plain, "Invalid data in handler");
163165
_client->setRxTimeout(0);
164166
_response->_respond(this);
165167
_sent = true;
@@ -587,13 +589,13 @@ void AsyncWebServerRequest::_parseLine() {
587589
if (_parseState == PARSE_REQ_START) {
588590
if (!_temp.length()) {
589591
_parseState = PARSE_REQ_FAIL;
590-
_client->close();
592+
_client->abort();
591593
} else {
592594
if (_parseReqHead()) {
593595
_parseState = PARSE_REQ_HEADERS;
594596
} else {
595597
_parseState = PARSE_REQ_FAIL;
596-
_client->close();
598+
_client->abort();
597599
}
598600
}
599601
return;
@@ -616,6 +618,8 @@ void AsyncWebServerRequest::_parseLine() {
616618
if (!_sent) {
617619
if (!_response)
618620
send(501, T_text_plain, "Handler did not handle the request");
621+
else if (!_response->_sourceValid())
622+
send(500, T_text_plain, "Invalid data in handler");
619623
_client->setRxTimeout(0);
620624
_response->_respond(this);
621625
_sent = true;
@@ -792,14 +796,6 @@ void AsyncWebServerRequest::send(AsyncWebServerResponse* response) {
792796
if (_response)
793797
delete _response;
794798
_response = response;
795-
if (_response == NULL) {
796-
_client->close(true);
797-
_onDisconnect();
798-
_sent = true;
799-
return;
800-
}
801-
if (!_response->_sourceValid())
802-
send(500);
803799
}
804800

805801
void AsyncWebServerRequest::redirect(const char* url, int code) {

src/WebServer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ AsyncWebServer::AsyncWebServer(uint16_t port)
5656
c->setRxTimeout(3);
5757
AsyncWebServerRequest* r = new AsyncWebServerRequest((AsyncWebServer*)s, c);
5858
if (r == NULL) {
59-
c->close(true);
60-
c->free();
59+
c->abort();
6160
delete c;
6261
}
6362
},

0 commit comments

Comments
 (0)