expose post args during upload (#1650)

This commit is contained in:
Luc 2018-07-17 10:58:03 +02:00 committed by Me No Dev
parent 05d72f963d
commit e157ec06a7
3 changed files with 34 additions and 11 deletions

View File

@ -32,6 +32,10 @@
#define DEBUG_OUTPUT Serial #define DEBUG_OUTPUT Serial
#endif #endif
#ifndef WEBSERVER_MAX_POST_ARGS
#define WEBSERVER_MAX_POST_ARGS 32
#endif
static const char Content_Type[] PROGMEM = "Content-Type"; static const char Content_Type[] PROGMEM = "Content-Type";
static const char filename[] PROGMEM = "filename"; static const char filename[] PROGMEM = "filename";
@ -383,8 +387,9 @@ bool WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t len){
client.readStringUntil('\n'); client.readStringUntil('\n');
//start reading the form //start reading the form
if (line == ("--"+boundary)){ if (line == ("--"+boundary)){
RequestArgument* postArgs = new RequestArgument[32]; if(_postArgs) delete[] _postArgs;
int postArgsLen = 0; _postArgs = new RequestArgument[WEBSERVER_MAX_POST_ARGS];
_postArgsLen = 0;
while(1){ while(1){
String argName; String argName;
String argValue; String argValue;
@ -445,7 +450,7 @@ bool WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t len){
DEBUG_OUTPUT.println(); DEBUG_OUTPUT.println();
#endif #endif
RequestArgument& arg = postArgs[postArgsLen++]; RequestArgument& arg = _postArgs[_postArgsLen++];
arg.key = argName; arg.key = argName;
arg.value = argValue; arg.value = argValue;
@ -552,22 +557,25 @@ readfile:
} }
int iarg; int iarg;
int totalArgs = ((32 - postArgsLen) < _currentArgCount)?(32 - postArgsLen):_currentArgCount; int totalArgs = ((WEBSERVER_MAX_POST_ARGS - _postArgsLen) < _currentArgCount)?(WEBSERVER_MAX_POST_ARGS - _postArgsLen):_currentArgCount;
for (iarg = 0; iarg < totalArgs; iarg++){ for (iarg = 0; iarg < totalArgs; iarg++){
RequestArgument& arg = postArgs[postArgsLen++]; RequestArgument& arg = _postArgs[_postArgsLen++];
arg.key = _currentArgs[iarg].key; arg.key = _currentArgs[iarg].key;
arg.value = _currentArgs[iarg].value; arg.value = _currentArgs[iarg].value;
} }
if (_currentArgs) delete[] _currentArgs; if (_currentArgs) delete[] _currentArgs;
_currentArgs = new RequestArgument[postArgsLen]; _currentArgs = new RequestArgument[_postArgsLen];
for (iarg = 0; iarg < postArgsLen; iarg++){ for (iarg = 0; iarg < _postArgsLen; iarg++){
RequestArgument& arg = _currentArgs[iarg]; RequestArgument& arg = _currentArgs[iarg];
arg.key = postArgs[iarg].key; arg.key = _postArgs[iarg].key;
arg.value = postArgs[iarg].value; arg.value = _postArgs[iarg].value;
} }
_currentArgCount = iarg; _currentArgCount = iarg;
if (postArgs) if (_postArgs) {
delete[] postArgs; delete[] _postArgs;
_postArgs=nullptr;
_postArgsLen = 0;
}
return true; return true;
} }
#ifdef DEBUG_ESP_HTTP_SERVER #ifdef DEBUG_ESP_HTTP_SERVER

View File

@ -54,6 +54,8 @@ WebServer::WebServer(IPAddress addr, int port)
, _lastHandler(nullptr) , _lastHandler(nullptr)
, _currentArgCount(0) , _currentArgCount(0)
, _currentArgs(nullptr) , _currentArgs(nullptr)
, _postArgsLen(0)
, _postArgs(nullptr)
, _headerKeysCount(0) , _headerKeysCount(0)
, _currentHeaders(nullptr) , _currentHeaders(nullptr)
, _contentLength(0) , _contentLength(0)
@ -72,6 +74,8 @@ WebServer::WebServer(int port)
, _lastHandler(nullptr) , _lastHandler(nullptr)
, _currentArgCount(0) , _currentArgCount(0)
, _currentArgs(nullptr) , _currentArgs(nullptr)
, _postArgsLen(0)
, _postArgs(nullptr)
, _headerKeysCount(0) , _headerKeysCount(0)
, _currentHeaders(nullptr) , _currentHeaders(nullptr)
, _contentLength(0) , _contentLength(0)
@ -507,6 +511,10 @@ void WebServer::_streamFileCore(const size_t fileSize, const String & fileName,
String WebServer::arg(String name) { String WebServer::arg(String name) {
for (int j = 0; j < _postArgsLen; ++j) {
if ( _postArgs[j].key == name )
return _postArgs[j].value;
}
for (int i = 0; i < _currentArgCount; ++i) { for (int i = 0; i < _currentArgCount; ++i) {
if ( _currentArgs[i].key == name ) if ( _currentArgs[i].key == name )
return _currentArgs[i].value; return _currentArgs[i].value;
@ -531,6 +539,10 @@ int WebServer::args() {
} }
bool WebServer::hasArg(String name) { bool WebServer::hasArg(String name) {
for (int j = 0; j < _postArgsLen; ++j) {
if (_postArgs[j].key == name)
return true;
}
for (int i = 0; i < _currentArgCount; ++i) { for (int i = 0; i < _currentArgCount; ++i) {
if (_currentArgs[i].key == name) if (_currentArgs[i].key == name)
return true; return true;

View File

@ -179,6 +179,9 @@ protected:
int _currentArgCount; int _currentArgCount;
RequestArgument* _currentArgs; RequestArgument* _currentArgs;
int _postArgsLen;
RequestArgument* _postArgs;
std::unique_ptr<HTTPUpload> _currentUpload; std::unique_ptr<HTTPUpload> _currentUpload;
int _headerKeysCount; int _headerKeysCount;