mirror of
https://github.com/me-no-dev/ESPAsyncWebServer.git
synced 2025-09-28 15:21:03 +02:00
Replace use of LinkedList<T> with std::list for AsyncWebServerResponse headers
Fraction of commit 8bb1c704cd70dd58b318b296154a5404a1bd27d0 of dumbfixes branch of 0xFEEDC0DE64 fork of ESPAsyncWebServer. This uses defaulted copy constructors for AsyncWebHeader from a previous commit. Step three of removal of homebrewed LinkedList in favor of standard C++ containers. Also removed from DefaultHeaders class.
This commit is contained in:
@@ -380,7 +380,7 @@ typedef enum {
|
|||||||
class AsyncWebServerResponse {
|
class AsyncWebServerResponse {
|
||||||
protected:
|
protected:
|
||||||
int _code;
|
int _code;
|
||||||
LinkedList<AsyncWebHeader *> _headers;
|
std::list<AsyncWebHeader> _headers;
|
||||||
String _contentType;
|
String _contentType;
|
||||||
size_t _contentLength;
|
size_t _contentLength;
|
||||||
bool _sendContentLength;
|
bool _sendContentLength;
|
||||||
@@ -463,17 +463,16 @@ class AsyncWebServer {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class DefaultHeaders {
|
class DefaultHeaders {
|
||||||
using headers_t = LinkedList<AsyncWebHeader *>;
|
using headers_t = std::list<AsyncWebHeader>;
|
||||||
headers_t _headers;
|
headers_t _headers;
|
||||||
|
|
||||||
DefaultHeaders()
|
|
||||||
:_headers(headers_t([](AsyncWebHeader *h){ delete h; }))
|
|
||||||
{}
|
|
||||||
public:
|
public:
|
||||||
using ConstIterator = headers_t::ConstIterator;
|
DefaultHeaders() = default;
|
||||||
|
|
||||||
|
using ConstIterator = headers_t::const_iterator;
|
||||||
|
|
||||||
void addHeader(const String& name, const String& value){
|
void addHeader(const String& name, const String& value){
|
||||||
_headers.add(new AsyncWebHeader(name, value));
|
_headers.emplace_back(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConstIterator begin() const { return _headers.begin(); }
|
ConstIterator begin() const { return _headers.begin(); }
|
||||||
@@ -481,6 +480,7 @@ public:
|
|||||||
|
|
||||||
DefaultHeaders(DefaultHeaders const &) = delete;
|
DefaultHeaders(DefaultHeaders const &) = delete;
|
||||||
DefaultHeaders &operator=(DefaultHeaders const &) = delete;
|
DefaultHeaders &operator=(DefaultHeaders const &) = delete;
|
||||||
|
|
||||||
static DefaultHeaders &Instance() {
|
static DefaultHeaders &Instance() {
|
||||||
static DefaultHeaders instance;
|
static DefaultHeaders instance;
|
||||||
return instance;
|
return instance;
|
||||||
|
@@ -88,7 +88,6 @@ const __FlashStringHelper *AsyncWebServerResponse::responseCodeToString(int code
|
|||||||
|
|
||||||
AsyncWebServerResponse::AsyncWebServerResponse()
|
AsyncWebServerResponse::AsyncWebServerResponse()
|
||||||
: _code(0)
|
: _code(0)
|
||||||
, _headers(LinkedList<AsyncWebHeader *>([](AsyncWebHeader *h){ delete h; }))
|
|
||||||
, _contentType()
|
, _contentType()
|
||||||
, _contentLength(0)
|
, _contentLength(0)
|
||||||
, _sendContentLength(true)
|
, _sendContentLength(true)
|
||||||
@@ -99,14 +98,12 @@ AsyncWebServerResponse::AsyncWebServerResponse()
|
|||||||
, _writtenLength(0)
|
, _writtenLength(0)
|
||||||
, _state(RESPONSE_SETUP)
|
, _state(RESPONSE_SETUP)
|
||||||
{
|
{
|
||||||
for(auto header: DefaultHeaders::Instance()) {
|
for(const auto &header: DefaultHeaders::Instance()) {
|
||||||
_headers.add(new AsyncWebHeader(header->name(), header->value()));
|
_headers.emplace_back(header);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncWebServerResponse::~AsyncWebServerResponse(){
|
AsyncWebServerResponse::~AsyncWebServerResponse() = default;
|
||||||
_headers.free();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AsyncWebServerResponse::setCode(int code){
|
void AsyncWebServerResponse::setCode(int code){
|
||||||
if(_state == RESPONSE_SETUP)
|
if(_state == RESPONSE_SETUP)
|
||||||
@@ -124,7 +121,7 @@ void AsyncWebServerResponse::setContentType(const String& type){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AsyncWebServerResponse::addHeader(const String& name, const String& value){
|
void AsyncWebServerResponse::addHeader(const String& name, const String& value){
|
||||||
_headers.add(new AsyncWebHeader(name, value));
|
_headers.emplace_back(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
String AsyncWebServerResponse::_assembleHead(uint8_t version){
|
String AsyncWebServerResponse::_assembleHead(uint8_t version){
|
||||||
@@ -150,10 +147,10 @@ String AsyncWebServerResponse::_assembleHead(uint8_t version){
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(const auto& header: _headers){
|
for(const auto& header: _headers){
|
||||||
snprintf_P(buf, bufSize, PSTR("%s: %s\r\n"), header->name().c_str(), header->value().c_str());
|
snprintf_P(buf, bufSize, PSTR("%s: %s\r\n"), header.name().c_str(), header.value().c_str());
|
||||||
out.concat(buf);
|
out.concat(buf);
|
||||||
}
|
}
|
||||||
_headers.free();
|
_headers.clear();
|
||||||
|
|
||||||
out.concat(F("\r\n"));
|
out.concat(F("\r\n"));
|
||||||
_headLength = out.length();
|
_headLength = out.length();
|
||||||
|
Reference in New Issue
Block a user