Skip to content

Commit

Permalink
Expose post args during upload (#4935)
Browse files Browse the repository at this point in the history
Currently post args are only available at the end of upload but they are already listed - this PR just expose them with minimal changes
It also set a define for post args array size originaly set to 32
  • Loading branch information
Luc authored and earlephilhower committed Nov 29, 2018
1 parent 9ec03ed commit 440a3aa
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 12 deletions.
12 changes: 12 additions & 0 deletions libraries/ESP8266WebServer/src/ESP8266WebServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ ESP8266WebServer::ESP8266WebServer(IPAddress addr, int port)
, _lastHandler(nullptr)
, _currentArgCount(0)
, _currentArgs(nullptr)
, _postArgsLen(0)
, _postArgs(nullptr)
, _headerKeysCount(0)
, _currentHeaders(nullptr)
, _contentLength(0)
Expand All @@ -71,6 +73,8 @@ ESP8266WebServer::ESP8266WebServer(int port)
, _lastHandler(nullptr)
, _currentArgCount(0)
, _currentArgs(nullptr)
, _postArgsLen(0)
, _postArgs(nullptr)
, _headerKeysCount(0)
, _currentHeaders(nullptr)
, _contentLength(0)
Expand Down Expand Up @@ -486,6 +490,10 @@ void ESP8266WebServer::_streamFileCore(const size_t fileSize, const String & fil


const String& ESP8266WebServer::arg(String name) const {
for (int j = 0; j < _postArgsLen; ++j) {
if ( _postArgs[j].key == name )
return _postArgs[j].value;
}
for (int i = 0; i < _currentArgCount; ++i) {
if ( _currentArgs[i].key == name )
return _currentArgs[i].value;
Expand All @@ -510,6 +518,10 @@ int ESP8266WebServer::args() const {
}

bool ESP8266WebServer::hasArg(const String& name) const {
for (int j = 0; j < _postArgsLen; ++j) {
if (_postArgs[j].key == name)
return true;
}
for (int i = 0; i < _currentArgCount; ++i) {
if (_currentArgs[i].key == name)
return true;
Expand Down
5 changes: 4 additions & 1 deletion libraries/ESP8266WebServer/src/ESP8266WebServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,12 @@ class ESP8266WebServer
int _currentArgCount;
RequestArgument* _currentArgs;
std::unique_ptr<HTTPUpload> _currentUpload;

int _postArgsLen;
RequestArgument* _postArgs;

int _headerKeysCount;
RequestArgument* _currentHeaders;

size_t _contentLength;
String _responseHeaders;

Expand Down
30 changes: 19 additions & 11 deletions libraries/ESP8266WebServer/src/Parsing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
#define DEBUG_OUTPUT Serial
#endif

#ifndef WEBSERVER_MAX_POST_ARGS
#define WEBSERVER_MAX_POST_ARGS 32
#endif

static const char Content_Type[] PROGMEM = "Content-Type";
static const char filename[] PROGMEM = "filename";

Expand Down Expand Up @@ -383,8 +387,9 @@ bool ESP8266WebServer::_parseForm(WiFiClient& client, const String& boundary, ui
client.readStringUntil('\n');
//start reading the form
if (line == ("--"+boundary)){
RequestArgument* postArgs = new RequestArgument[32];
int postArgsLen = 0;
if(_postArgs) delete[] _postArgs;
_postArgs = new RequestArgument[WEBSERVER_MAX_POST_ARGS];
_postArgsLen = 0;
while(1){
String argName;
String argValue;
Expand Down Expand Up @@ -445,7 +450,7 @@ bool ESP8266WebServer::_parseForm(WiFiClient& client, const String& boundary, ui
DEBUG_OUTPUT.println();
#endif

RequestArgument& arg = postArgs[postArgsLen++];
RequestArgument& arg = _postArgs[_postArgsLen++];
arg.key = argName;
arg.value = argValue;

Expand Down Expand Up @@ -552,22 +557,25 @@ bool ESP8266WebServer::_parseForm(WiFiClient& client, const String& boundary, ui
}

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++){
RequestArgument& arg = postArgs[postArgsLen++];
RequestArgument& arg = _postArgs[_postArgsLen++];
arg.key = _currentArgs[iarg].key;
arg.value = _currentArgs[iarg].value;
}
if (_currentArgs) delete[] _currentArgs;
_currentArgs = new RequestArgument[postArgsLen];
for (iarg = 0; iarg < postArgsLen; iarg++){
_currentArgs = new RequestArgument[_postArgsLen];
for (iarg = 0; iarg < _postArgsLen; iarg++){
RequestArgument& arg = _currentArgs[iarg];
arg.key = postArgs[iarg].key;
arg.value = postArgs[iarg].value;
arg.key = _postArgs[iarg].key;
arg.value = _postArgs[iarg].value;
}
_currentArgCount = iarg;
if (postArgs)
delete[] postArgs;
if (_postArgs) {
delete[] _postArgs;
_postArgs = nullptr;
_postArgsLen = 0;
}
return true;
}
#ifdef DEBUG_ESP_HTTP_SERVER
Expand Down

0 comments on commit 440a3aa

Please sign in to comment.