Skip to content

Commit 090c3e3

Browse files
committed
Added arg_P hasArg_P and hasHeader_P
Added arg_P hasArg_P and hasHeader_P to be able to test arg from string stored in flash
1 parent 8a26750 commit 090c3e3

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

libraries/ESP8266WebServer/src/ESP8266WebServer.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,15 @@ String ESP8266WebServer::arg(const char* name) {
378378
return String();
379379
}
380380

381+
String ESP8266WebServer::arg_P(PGM_P name) {
382+
String argname = name; // Copy to RAM, avoid loop search compare from flash
383+
for (int i = 0; i < _currentArgCount; ++i) {
384+
if ( _currentArgs[i].key == argname )
385+
return _currentArgs[i].value;
386+
}
387+
return String();
388+
}
389+
381390
String ESP8266WebServer::arg(int i) {
382391
if (i < _currentArgCount)
383392
return _currentArgs[i].value;
@@ -402,6 +411,15 @@ bool ESP8266WebServer::hasArg(const char* name) {
402411
return false;
403412
}
404413

414+
bool ESP8266WebServer::hasArg_P(PGM_P name) {
415+
String argname = name; // Copy to RAM, avoid loop search compare from flash
416+
for (int i = 0; i < _currentArgCount; ++i) {
417+
if ( _currentArgs[i].key == argname )
418+
return true;
419+
}
420+
return false;
421+
}
422+
405423
String ESP8266WebServer::header(const char* name) {
406424
for (int i = 0; i < _headerKeysCount; ++i) {
407425
if (_currentHeaders[i].key == name)
@@ -445,6 +463,16 @@ bool ESP8266WebServer::hasHeader(const char* name) {
445463
return false;
446464
}
447465

466+
bool ESP8266WebServer::hasHeader_P(PGM_P name) {
467+
String argname = name; // Copy to RAM, avoid loop search compare from flash
468+
for (int i = 0; i < _headerKeysCount; ++i) {
469+
if ((_currentHeaders[i].key == argname ) && (_currentHeaders[i].value.length() > 0))
470+
return true;
471+
}
472+
return false;
473+
}
474+
475+
448476
String ESP8266WebServer::hostHeader() {
449477
return _hostHeader;
450478
}

libraries/ESP8266WebServer/src/ESP8266WebServer.h

+3
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,19 @@ class ESP8266WebServer
8888
HTTPUpload& upload() { return _currentUpload; }
8989

9090
String arg(const char* name); // get request argument value by name
91+
String arg_P(PGM_P name); // get request argument value by name
9192
String arg(int i); // get request argument value by number
9293
String argName(int i); // get request argument name by number
9394
int args(); // get arguments count
9495
bool hasArg(const char* name); // check if argument exists
96+
bool hasArg_P(PGM_P name); // check if argument exists
9597
void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); // set the request headers to collect
9698
String header(const char* name); // get request header value by name
9799
String header(int i); // get request header value by number
98100
String headerName(int i); // get request header name by number
99101
int headers(); // get header count
100102
bool hasHeader(const char* name); // check if header exists
103+
bool hasHeader_P(PGM_P name); // check if header exists
101104

102105
String hostHeader(); // get request host header if available or empty String if not
103106

0 commit comments

Comments
 (0)