forked from me-no-dev/ESPAsyncWebServer
Flash String support (#137)
* Flash String support * use strlen_P and strcpy_p
This commit is contained in:
@@ -228,21 +228,30 @@ class AsyncWebServerRequest {
|
|||||||
|
|
||||||
size_t headers() const; // get header count
|
size_t headers() const; // get header count
|
||||||
bool hasHeader(const String& name) const; // check if header exists
|
bool hasHeader(const String& name) const; // check if header exists
|
||||||
|
bool hasHeader(const __FlashStringHelper * data) const; // check if header exists
|
||||||
|
|
||||||
AsyncWebHeader* getHeader(const String& name) const;
|
AsyncWebHeader* getHeader(const String& name) const;
|
||||||
|
AsyncWebHeader* getHeader(const __FlashStringHelper * data) const;
|
||||||
AsyncWebHeader* getHeader(size_t num) const;
|
AsyncWebHeader* getHeader(size_t num) const;
|
||||||
|
|
||||||
size_t params() const; // get arguments count
|
size_t params() const; // get arguments count
|
||||||
bool hasParam(const String& name, bool post=false, bool file=false) const;
|
bool hasParam(const String& name, bool post=false, bool file=false) const;
|
||||||
|
bool hasParam(const __FlashStringHelper * data, bool post=false, bool file=false) const;
|
||||||
|
|
||||||
AsyncWebParameter* getParam(const String& name, bool post=false, bool file=false) const;
|
AsyncWebParameter* getParam(const String& name, bool post=false, bool file=false) const;
|
||||||
|
AsyncWebParameter* getParam(const __FlashStringHelper * data, bool post, bool file) const;
|
||||||
AsyncWebParameter* getParam(size_t num) const;
|
AsyncWebParameter* getParam(size_t num) const;
|
||||||
|
|
||||||
size_t args() const { return params(); } // get arguments count
|
size_t args() const { return params(); } // get arguments count
|
||||||
const String& arg(const String& name) const; // get request argument value by name
|
const String& arg(const String& name) const; // get request argument value by name
|
||||||
|
const String& arg(const __FlashStringHelper * data) const; // get request argument value by F(name)
|
||||||
const String& arg(size_t i) const; // get request argument value by number
|
const String& arg(size_t i) const; // get request argument value by number
|
||||||
const String& argName(size_t i) const; // get request argument name by number
|
const String& argName(size_t i) const; // get request argument name by number
|
||||||
bool hasArg(const char* name) const; // check if argument exists
|
bool hasArg(const char* name) const; // check if argument exists
|
||||||
|
bool hasArg(const __FlashStringHelper * data) const; // check if F(argument) exists
|
||||||
|
|
||||||
const String& header(const char* name) const;// get request header value by name
|
const String& header(const char* name) const;// get request header value by name
|
||||||
|
const String& header(const __FlashStringHelper * data) const;// get request header value by F(name)
|
||||||
const String& header(size_t i) const; // get request header value by number
|
const String& header(size_t i) const; // get request header value by number
|
||||||
const String& headerName(size_t i) const; // get request header name by number
|
const String& headerName(size_t i) const; // get request header name by number
|
||||||
String urlDecode(const String& text) const;
|
String urlDecode(const String& text) const;
|
||||||
|
@@ -541,6 +541,26 @@ bool AsyncWebServerRequest::hasHeader(const String& name) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AsyncWebServerRequest::hasHeader(const __FlashStringHelper * data) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = 0;
|
||||||
|
while (1) {
|
||||||
|
if (pgm_read_byte(p+n) == 0) break;
|
||||||
|
n += 1;
|
||||||
|
}
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
name[n] = 0;
|
||||||
|
if (name) {
|
||||||
|
for(size_t b=0; b<n; b++)
|
||||||
|
name[b] = pgm_read_byte(p++);
|
||||||
|
bool result = hasHeader( String(name) );
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AsyncWebHeader* AsyncWebServerRequest::getHeader(const String& name) const {
|
AsyncWebHeader* AsyncWebServerRequest::getHeader(const String& name) const {
|
||||||
for(const auto& h: _headers){
|
for(const auto& h: _headers){
|
||||||
if(h->name().equalsIgnoreCase(name)){
|
if(h->name().equalsIgnoreCase(name)){
|
||||||
@@ -550,6 +570,20 @@ AsyncWebHeader* AsyncWebServerRequest::getHeader(const String& name) const {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AsyncWebHeader* AsyncWebServerRequest::getHeader(const __FlashStringHelper * data) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = strlen_P(p);
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
if (name) {
|
||||||
|
strcpy_P(name, p);
|
||||||
|
AsyncWebHeader* result = getHeader( String(name));
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AsyncWebHeader* AsyncWebServerRequest::getHeader(size_t num) const {
|
AsyncWebHeader* AsyncWebServerRequest::getHeader(size_t num) const {
|
||||||
auto header = _headers.nth(num);
|
auto header = _headers.nth(num);
|
||||||
return header ? *header : nullptr;
|
return header ? *header : nullptr;
|
||||||
@@ -568,6 +602,22 @@ bool AsyncWebServerRequest::hasParam(const String& name, bool post, bool file) c
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AsyncWebServerRequest::hasParam(const __FlashStringHelper * data, bool post, bool file) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = strlen_P(p);
|
||||||
|
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
name[n] = 0;
|
||||||
|
if (name) {
|
||||||
|
strcpy_P(name,p);
|
||||||
|
bool result = hasParam( name, post, file);
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AsyncWebParameter* AsyncWebServerRequest::getParam(const String& name, bool post, bool file) const {
|
AsyncWebParameter* AsyncWebServerRequest::getParam(const String& name, bool post, bool file) const {
|
||||||
for(const auto& p: _params){
|
for(const auto& p: _params){
|
||||||
if(p->name() == name && p->isPost() == post && p->isFile() == file){
|
if(p->name() == name && p->isPost() == post && p->isFile() == file){
|
||||||
@@ -577,6 +627,20 @@ AsyncWebParameter* AsyncWebServerRequest::getParam(const String& name, bool post
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AsyncWebParameter* AsyncWebServerRequest::getParam(const __FlashStringHelper * data, bool post, bool file) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = strlen_P(p);
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
if (name) {
|
||||||
|
strcpy_P(name, p);
|
||||||
|
AsyncWebParameter* result = getParam(name, post, file);
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AsyncWebParameter* AsyncWebServerRequest::getParam(size_t num) const {
|
AsyncWebParameter* AsyncWebServerRequest::getParam(size_t num) const {
|
||||||
auto param = _params.nth(num);
|
auto param = _params.nth(num);
|
||||||
return param ? *param : nullptr;
|
return param ? *param : nullptr;
|
||||||
@@ -747,6 +811,21 @@ bool AsyncWebServerRequest::hasArg(const char* name) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AsyncWebServerRequest::hasArg(const __FlashStringHelper * data) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = strlen_P(p);
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
if (name) {
|
||||||
|
strcpy_P(name, p);
|
||||||
|
bool result = hasArg( name );
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const String& AsyncWebServerRequest::arg(const String& name) const {
|
const String& AsyncWebServerRequest::arg(const String& name) const {
|
||||||
for(const auto& arg: _params){
|
for(const auto& arg: _params){
|
||||||
if(arg->name() == name){
|
if(arg->name() == name){
|
||||||
@@ -756,6 +835,21 @@ const String& AsyncWebServerRequest::arg(const String& name) const {
|
|||||||
return SharedEmptyString;
|
return SharedEmptyString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const String& AsyncWebServerRequest::arg(const __FlashStringHelper * data) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = strlen_P(p);
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
if (name) {
|
||||||
|
strcpy(name, p);
|
||||||
|
const String & result = arg( String(name) );
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return SharedEmptyString;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
const String& AsyncWebServerRequest::arg(size_t i) const {
|
const String& AsyncWebServerRequest::arg(size_t i) const {
|
||||||
return getParam(i)->value();
|
return getParam(i)->value();
|
||||||
}
|
}
|
||||||
@@ -769,6 +863,21 @@ const String& AsyncWebServerRequest::header(const char* name) const {
|
|||||||
return h ? h->value() : SharedEmptyString;
|
return h ? h->value() : SharedEmptyString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const String& AsyncWebServerRequest::header(const __FlashStringHelper * data) const {
|
||||||
|
PGM_P p = reinterpret_cast<PGM_P>(data);
|
||||||
|
size_t n = strlen_P(p);
|
||||||
|
char * name = (char*) malloc(n+1);
|
||||||
|
if (name) {
|
||||||
|
strcpy_P(name, p);
|
||||||
|
const String & result = header( (const char *)name );
|
||||||
|
free(name);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return SharedEmptyString;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const String& AsyncWebServerRequest::header(size_t i) const {
|
const String& AsyncWebServerRequest::header(size_t i) const {
|
||||||
AsyncWebHeader* h = getHeader(i);
|
AsyncWebHeader* h = getHeader(i);
|
||||||
return h ? h->value() : SharedEmptyString;
|
return h ? h->value() : SharedEmptyString;
|
||||||
|
Reference in New Issue
Block a user