Reject incomplete WebConfig confirmations under memory pressure

This commit is contained in:
mikecarper committed 2026-10-27 11:58:39 -07:00
1 parent cefda42b53
commit 88bfaebb50
8 files changed
+302 -25

No files matched your search

+22 -2
View File
@@ -23,9 +23,27 @@ struct Client {
int localIP() const { return local_ip; }
uint32_t getRemoteAddress() const { return remote; }
};
struct AsyncWebHeader {
std::string text;
const std::string& value() const { return text; }
};
struct AsyncWebServerResponse {
int status; std::map<std::string, std::string> headers;
void addHeader(const char* key, const char* value) { headers[key]=value; }
int status = 200; std::map<std::string, std::string> headers;
mutable AsyncWebHeader header_view;
bool addHeader(const char* key, const char* value) { headers[key]=value; return true; }
const AsyncWebHeader* getHeader(const char* key) const {
const auto found = headers.find(key);
if (found == headers.end()) return nullptr;
header_view.text = found->second;
return &header_view;
}
};
struct AsyncResponseStream : AsyncWebServerResponse {
std::string body;
size_t available() const { return body.size(); }
void setCode(int value) { status = value; }
size_t write(uint8_t value) { body.push_back(char(value)); return 1; }
size_t write(const uint8_t* bytes, size_t count) { body.append(reinterpret_cast<const char*>(bytes), count); return count; }
};
struct AsyncWebServerRequest {
Client socket; bool has_client=true;
@@ -34,6 +52,8 @@ struct AsyncWebServerRequest {
Client* client() { return has_client ? &socket : nullptr; }
void send(int code, const char* =nullptr, const char* content=nullptr) { status=code; reply=content ? content : ""; }
AsyncWebServerResponse* beginResponse(int code, const char*, const char*) { response.status=code; return &response; }
AsyncResponseStream* beginResponseStream(const char*, size_t = 0) { return new AsyncResponseStream; }
void send(AsyncResponseStream* value) { status=value->status; response=*value; reply=value->body; delete value; }
void send(AsyncWebServerResponse* value) { status=value->status; }
};
struct WebConfigServer {