expose post args during upload (#1650)
This commit is contained in:
parent
05d72f963d
commit
e157ec06a7
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user