Skip to content

Commit 3b6d29b

Browse files
Merge pull request #56 from ESP32Async/feat/abort
feat(http): Add ability to abort a request
2 parents c8026aa + 2496f38 commit 3b6d29b

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/ESPAsyncWebServer.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,17 @@ class AsyncWebServerRequest {
502502
return _paused;
503503
}
504504

505+
/**
506+
* @brief Aborts the request and close the client (RST).
507+
* Mark the request as sent.
508+
* If it was paused, it will be unpaused and it won't be possible to resume it.
509+
*/
510+
void abort();
511+
512+
bool isSent() const {
513+
return _sent;
514+
}
515+
505516
/**
506517
* @brief Get the Request parameter by name
507518
*

src/WebRequest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer *s, AsyncClient *c)
2929
c->onError(
3030
[](void *r, AsyncClient *c, int8_t error) {
3131
(void)c;
32+
// log_e("AsyncWebServerRequest::_onError");
3233
AsyncWebServerRequest *req = (AsyncWebServerRequest *)r;
3334
req->_onError(error);
3435
},
@@ -37,13 +38,15 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer *s, AsyncClient *c)
3738
c->onAck(
3839
[](void *r, AsyncClient *c, size_t len, uint32_t time) {
3940
(void)c;
41+
// log_e("AsyncWebServerRequest::_onAck");
4042
AsyncWebServerRequest *req = (AsyncWebServerRequest *)r;
4143
req->_onAck(len, time);
4244
},
4345
this
4446
);
4547
c->onDisconnect(
4648
[](void *r, AsyncClient *c) {
49+
// log_e("AsyncWebServerRequest::_onDisconnect");
4750
AsyncWebServerRequest *req = (AsyncWebServerRequest *)r;
4851
req->_onDisconnect();
4952
delete c;
@@ -53,6 +56,7 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer *s, AsyncClient *c)
5356
c->onTimeout(
5457
[](void *r, AsyncClient *c, uint32_t time) {
5558
(void)c;
59+
// log_e("AsyncWebServerRequest::_onTimeout");
5660
AsyncWebServerRequest *req = (AsyncWebServerRequest *)r;
5761
req->_onTimeout(time);
5862
},
@@ -61,6 +65,7 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer *s, AsyncClient *c)
6165
c->onData(
6266
[](void *r, AsyncClient *c, void *buf, size_t len) {
6367
(void)c;
68+
// log_e("AsyncWebServerRequest::_onData");
6469
AsyncWebServerRequest *req = (AsyncWebServerRequest *)r;
6570
req->_onData(buf, len);
6671
},
@@ -69,6 +74,7 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer *s, AsyncClient *c)
6974
c->onPoll(
7075
[](void *r, AsyncClient *c) {
7176
(void)c;
77+
// log_e("AsyncWebServerRequest::_onPoll");
7278
AsyncWebServerRequest *req = (AsyncWebServerRequest *)r;
7379
req->_onPoll();
7480
},
@@ -77,6 +83,8 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer *s, AsyncClient *c)
7783
}
7884

7985
AsyncWebServerRequest::~AsyncWebServerRequest() {
86+
// log_e("AsyncWebServerRequest::~AsyncWebServerRequest");
87+
8088
_this.reset();
8189

8290
_headers.clear();
@@ -727,6 +735,16 @@ AsyncWebServerRequestPtr AsyncWebServerRequest::pause() {
727735
return _this;
728736
}
729737

738+
void AsyncWebServerRequest::abort() {
739+
if (!_sent) {
740+
_sent = true;
741+
_paused = false;
742+
_this.reset();
743+
// log_e("AsyncWebServerRequest::abort");
744+
_client->abort();
745+
}
746+
}
747+
730748
size_t AsyncWebServerRequest::headers() const {
731749
return _headers.size();
732750
}

0 commit comments

Comments
 (0)