Flash String support (#137)
* Flash String support * use strlen_P and strcpy_p
This commit is contained in:
parent
9b66da2c92
commit
3afc669f10
|
@ -228,21 +228,30 @@ class AsyncWebServerRequest {
|
|||
|
||||
size_t headers() const; // get header count
|
||||
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 __FlashStringHelper * data) const;
|
||||
AsyncWebHeader* getHeader(size_t num) const;
|
||||
|
||||
size_t params() const; // get arguments count
|
||||
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 __FlashStringHelper * data, bool post, bool file) const;
|
||||
AsyncWebParameter* getParam(size_t num) const;
|
||||
|
||||
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 __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& argName(size_t i) const; // get request argument name by number
|
||||
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 __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& headerName(size_t i) const; // get request header name by number
|
||||
String urlDecode(const String& text) const;
|
||||
|
|
|
@ -541,6 +541,26 @@ bool AsyncWebServerRequest::hasHeader(const String& name) const {
|
|||
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 {
|
||||
for(const auto& h: _headers){
|
||||
if(h->name().equalsIgnoreCase(name)){
|
||||
|
@ -550,6 +570,20 @@ AsyncWebHeader* AsyncWebServerRequest::getHeader(const String& name) const {
|
|||
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 {
|
||||
auto header = _headers.nth(num);
|
||||
return header ? *header : nullptr;
|
||||
|
@ -568,6 +602,22 @@ bool AsyncWebServerRequest::hasParam(const String& name, bool post, bool file) c
|
|||
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 {
|
||||
for(const auto& p: _params){
|
||||
if(p->name() == name && p->isPost() == post && p->isFile() == file){
|
||||
|
@ -577,6 +627,20 @@ AsyncWebParameter* AsyncWebServerRequest::getParam(const String& name, bool post
|
|||
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 {
|
||||
auto param = _params.nth(num);
|
||||
return param ? *param : nullptr;
|
||||
|
@ -747,6 +811,21 @@ bool AsyncWebServerRequest::hasArg(const char* name) const {
|
|||
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 {
|
||||
for(const auto& arg: _params){
|
||||
if(arg->name() == name){
|
||||
|
@ -756,6 +835,21 @@ const String& AsyncWebServerRequest::arg(const String& name) const {
|
|||
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 {
|
||||
return getParam(i)->value();
|
||||
}
|
||||
|
@ -769,6 +863,21 @@ const String& AsyncWebServerRequest::header(const char* name) const {
|
|||
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 {
|
||||
AsyncWebHeader* h = getHeader(i);
|
||||
return h ? h->value() : SharedEmptyString;
|
||||
|
|
Loading…
Reference in New Issue