Skip to content

Commit 4c5dc83

Browse files
committed
Implemented access to headers
1 parent 90aae15 commit 4c5dc83

File tree

1 file changed

+32
-23
lines changed

1 file changed

+32
-23
lines changed

src/ESPWebServer.cpp

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ void ESPWebServer::on(const String &uri, HTTPMethod method, THandlerFunction fn)
8181

8282
void ESPWebServer::on(const String &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn) {
8383
// TODO: Handle HTTP_ANY
84+
// TODO: convert {} in uri to * (so pathArg() will work)
8485
const char *methodname = "???";
8586
for (size_t n = 0; n < sizeof(METHODNAMES); n++) {
8687
if (METHODNAMES[n].val == method) {
@@ -93,6 +94,7 @@ void ESPWebServer::on(const String &uri, HTTPMethod method, THandlerFunction fn,
9394
}
9495

9596
void ESPWebServer::serveStatic(const char* uri, fs::FS& fs, const char* path, const char* cache_header) {
97+
// TODO: add * or something to path so serveStatic("/dir/",...) will serve all content from that directory
9698
ESPWebServerStaticNode *node = new ESPWebServerStaticNode(this, std::string(path), fs, path, cache_header);
9799
_server.registerNode(node);
98100
}
@@ -127,9 +129,9 @@ HTTPUpload& ESPWebServer::upload() {
127129
}
128130

129131
String ESPWebServer::pathArg(unsigned int i) {
130-
// TODO
131-
HTTPS_LOGE("pathArg() not yet implemented");
132-
return "";
132+
ResourceParameters *params = _activeRequest->getParams();
133+
auto rv = params->getPathParameter(i);
134+
return String(rv.c_str());
133135
}
134136

135137
String ESPWebServer::arg(String name) {
@@ -173,44 +175,52 @@ bool ESPWebServer::hasArg(String name) {
173175
}
174176

175177
void ESPWebServer::collectHeaders(const char* headerKeys[], const size_t headerKeysCount) {
176-
// TODO
177-
HTTPS_LOGE("collectHeaders() not yet implemented");
178+
HTTPS_LOGW("collectHeaders() not implemented, but probably not needed");
178179
}
179180

180181
String ESPWebServer::header(String name) {
181-
// TODO
182-
HTTPS_LOGE("header(String) not yet implemented");
182+
HTTPHeaders* headers = _activeRequest->getHTTPHeaders();
183+
HTTPHeader* header = headers->get(std::string(name.c_str()));
184+
if (header) {
185+
return String(header->_value.c_str());
186+
}
183187
return "";
184188
}
185189

186190
String ESPWebServer::header(int i) {
187-
// TODO
188-
HTTPS_LOGE("header(int) not yet implemented");
191+
HTTPHeaders* headers = _activeRequest->getHTTPHeaders();
192+
auto allHeaders = headers->getAll();
193+
if (i >= 0 && i < allHeaders->size()) {
194+
HTTPHeader* header = allHeaders->at(i);
195+
return String(header->_value.c_str());
196+
}
189197
return "";
190198
}
191199

192200
String ESPWebServer::headerName(int i) {
193-
// TODO
194-
HTTPS_LOGE("headerName() not yet implemented");
201+
HTTPHeaders* headers = _activeRequest->getHTTPHeaders();
202+
auto allHeaders = headers->getAll();
203+
if (i >= 0 && i < allHeaders->size()) {
204+
HTTPHeader* header = allHeaders->at(i);
205+
return String(header->_name.c_str());
206+
}
195207
return "";
196208
}
197209

198210
int ESPWebServer::headers() {
199-
// TODO
200-
HTTPS_LOGE("headers() not yet implemented");
201-
return 0;
211+
HTTPHeaders* headers = _activeRequest->getHTTPHeaders();
212+
auto allHeaders = headers->getAll();
213+
return allHeaders->size();
202214
}
203215

204216
bool ESPWebServer::hasHeader(String name) {
205-
// TODO
206-
HTTPS_LOGE("hasHeader() not yet implemented");
207-
return false;
217+
HTTPHeaders* headers = _activeRequest->getHTTPHeaders();
218+
HTTPHeader* header = headers->get(std::string(name.c_str()));
219+
return header != NULL;
208220
}
209221

210222
String ESPWebServer::hostHeader() {
211-
// TODO
212-
HTTPS_LOGE("hostHeader() not yet implemented");
213-
return "";
223+
return header("Host");
214224
}
215225

216226
void ESPWebServer::send(int code, const char* content_type, const String& content) {
@@ -285,9 +295,8 @@ void ESPWebServer::sendContent_P(PGM_P content, size_t size) {
285295
}
286296

287297
String ESPWebServer::urlDecode(const String& text) {
288-
// TODO
289-
HTTPS_LOGE("urlDecode() not yet implemented");
290-
return text;
298+
auto decoded = ::urlDecode(std::string(text.c_str()));
299+
return String(decoded.c_str());
291300
}
292301

293302
void ESPWebServer::_handlerWrapper(

0 commit comments

Comments
 (0)