From 090c3e3533cd83d15cc65e34273c1dd28c596fae Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 3 Feb 2016 05:29:21 +0100 Subject: [PATCH 1/3] 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 --- .../ESP8266WebServer/src/ESP8266WebServer.cpp | 28 +++++++++++++++++++ .../ESP8266WebServer/src/ESP8266WebServer.h | 3 ++ 2 files changed, 31 insertions(+) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp index b2c0054d9..b6bc86cb1 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp @@ -378,6 +378,15 @@ String ESP8266WebServer::arg(const char* name) { return String(); } +String ESP8266WebServer::arg_P(PGM_P name) { + String argname = name; // Copy to RAM, avoid loop search compare from flash + for (int i = 0; i < _currentArgCount; ++i) { + if ( _currentArgs[i].key == argname ) + return _currentArgs[i].value; + } + return String(); +} + String ESP8266WebServer::arg(int i) { if (i < _currentArgCount) return _currentArgs[i].value; @@ -402,6 +411,15 @@ bool ESP8266WebServer::hasArg(const char* name) { return false; } +bool ESP8266WebServer::hasArg_P(PGM_P name) { + String argname = name; // Copy to RAM, avoid loop search compare from flash + for (int i = 0; i < _currentArgCount; ++i) { + if ( _currentArgs[i].key == argname ) + return true; + } + return false; +} + String ESP8266WebServer::header(const char* name) { for (int i = 0; i < _headerKeysCount; ++i) { if (_currentHeaders[i].key == name) @@ -445,6 +463,16 @@ bool ESP8266WebServer::hasHeader(const char* name) { return false; } +bool ESP8266WebServer::hasHeader_P(PGM_P name) { + String argname = name; // Copy to RAM, avoid loop search compare from flash + for (int i = 0; i < _headerKeysCount; ++i) { + if ((_currentHeaders[i].key == argname ) && (_currentHeaders[i].value.length() > 0)) + return true; + } + return false; +} + + String ESP8266WebServer::hostHeader() { return _hostHeader; } diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index ccf48dbbf..f2e2baad5 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -88,16 +88,19 @@ public: HTTPUpload& upload() { return _currentUpload; } String arg(const char* name); // get request argument value by name + String arg_P(PGM_P name); // get request argument value by name String arg(int i); // get request argument value by number String argName(int i); // get request argument name by number int args(); // get arguments count bool hasArg(const char* name); // check if argument exists + bool hasArg_P(PGM_P name); // check if argument exists void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); // set the request headers to collect String header(const char* name); // get request header value by name String header(int i); // get request header value by number String headerName(int i); // get request header name by number int headers(); // get header count bool hasHeader(const char* name); // check if header exists + bool hasHeader_P(PGM_P name); // check if header exists String hostHeader(); // get request host header if available or empty String if not From c74a7703d2aaf1e49d5ceffb6e42979ba84cfe31 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 3 Feb 2016 12:04:03 +0100 Subject: [PATCH 2/3] Changed Arg hasArg hasHeader from const char * to String This permet calling these with const char *, String or PGM_P type parameter --- .../ESP8266WebServer/src/ESP8266WebServer.cpp | 34 +++---------------- .../ESP8266WebServer/src/ESP8266WebServer.h | 9 ++--- 2 files changed, 7 insertions(+), 36 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp index b6bc86cb1..5c413b959 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp @@ -370,18 +370,10 @@ void ESP8266WebServer::sendContent_P(PGM_P content, size_t size) { } } -String ESP8266WebServer::arg(const char* name) { - for (int i = 0; i < _currentArgCount; ++i) { - if (_currentArgs[i].key == name) - return _currentArgs[i].value; - } - return String(); -} -String ESP8266WebServer::arg_P(PGM_P name) { - String argname = name; // Copy to RAM, avoid loop search compare from flash +String ESP8266WebServer::arg(String name) { for (int i = 0; i < _currentArgCount; ++i) { - if ( _currentArgs[i].key == argname ) + if ( _currentArgs[i].key == name ) return _currentArgs[i].value; } return String(); @@ -403,7 +395,7 @@ int ESP8266WebServer::args() { return _currentArgCount; } -bool ESP8266WebServer::hasArg(const char* name) { +bool ESP8266WebServer::hasArg(String name) { for (int i = 0; i < _currentArgCount; ++i) { if (_currentArgs[i].key == name) return true; @@ -411,14 +403,6 @@ bool ESP8266WebServer::hasArg(const char* name) { return false; } -bool ESP8266WebServer::hasArg_P(PGM_P name) { - String argname = name; // Copy to RAM, avoid loop search compare from flash - for (int i = 0; i < _currentArgCount; ++i) { - if ( _currentArgs[i].key == argname ) - return true; - } - return false; -} String ESP8266WebServer::header(const char* name) { for (int i = 0; i < _headerKeysCount; ++i) { @@ -455,7 +439,7 @@ int ESP8266WebServer::headers() { return _headerKeysCount; } -bool ESP8266WebServer::hasHeader(const char* name) { +bool ESP8266WebServer::hasHeader(String name) { for (int i = 0; i < _headerKeysCount; ++i) { if ((_currentHeaders[i].key == name) && (_currentHeaders[i].value.length() > 0)) return true; @@ -463,16 +447,6 @@ bool ESP8266WebServer::hasHeader(const char* name) { return false; } -bool ESP8266WebServer::hasHeader_P(PGM_P name) { - String argname = name; // Copy to RAM, avoid loop search compare from flash - for (int i = 0; i < _headerKeysCount; ++i) { - if ((_currentHeaders[i].key == argname ) && (_currentHeaders[i].value.length() > 0)) - return true; - } - return false; -} - - String ESP8266WebServer::hostHeader() { return _hostHeader; } diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index f2e2baad5..6d0007aab 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -87,20 +87,17 @@ public: WiFiClient client() { return _currentClient; } HTTPUpload& upload() { return _currentUpload; } - String arg(const char* name); // get request argument value by name - String arg_P(PGM_P name); // get request argument value by name + String arg(String name); // get request argument value by name String arg(int i); // get request argument value by number String argName(int i); // get request argument name by number int args(); // get arguments count - bool hasArg(const char* name); // check if argument exists - bool hasArg_P(PGM_P name); // check if argument exists + bool hasArg(String name); // check if argument exists void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); // set the request headers to collect String header(const char* name); // get request header value by name String header(int i); // get request header value by number String headerName(int i); // get request header name by number int headers(); // get header count - bool hasHeader(const char* name); // check if header exists - bool hasHeader_P(PGM_P name); // check if header exists + bool hasHeader(String name); // check if header exists String hostHeader(); // get request host header if available or empty String if not From 4036e3a43669c385cd0efe9d404b92f1f70201e6 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 3 Feb 2016 13:48:26 +0100 Subject: [PATCH 3/3] Changed header() to have string parameter instead of const char * --- libraries/ESP8266WebServer/src/ESP8266WebServer.cpp | 2 +- libraries/ESP8266WebServer/src/ESP8266WebServer.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp index 5c413b959..a01abf416 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp @@ -404,7 +404,7 @@ bool ESP8266WebServer::hasArg(String name) { } -String ESP8266WebServer::header(const char* name) { +String ESP8266WebServer::header(String name) { for (int i = 0; i < _headerKeysCount; ++i) { if (_currentHeaders[i].key == name) return _currentHeaders[i].value; diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index 6d0007aab..4e291e5fb 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -93,7 +93,7 @@ public: int args(); // get arguments count bool hasArg(String name); // check if argument exists void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); // set the request headers to collect - String header(const char* name); // get request header value by name + String header(String name); // get request header value by name String header(int i); // get request header value by number String headerName(int i); // get request header name by number int headers(); // get header count