Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0260cd6

Browse filesBrowse files
authored
WebServer: rename & expose internal 'contentLength' variable for POST… (espressif#7012)
1 parent 0130856 commit 0260cd6
Copy full SHA for 0260cd6

File tree

3 files changed

+19
-15
lines changed
Filter options

3 files changed

+19
-15
lines changed

‎libraries/WebServer/src/Parsing.cpp

Copy file name to clipboardExpand all lines: libraries/WebServer/src/Parsing.cpp
+9-10Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ bool WebServer::_parseRequest(WiFiClient& client) {
8080
//reset header value
8181
for (int i = 0; i < _headerKeysCount; ++i) {
8282
_currentHeaders[i].value =String();
83-
}
83+
}
8484

8585
// First line of HTTP request looks like "GET /path HTTP/1.1"
8686
// Retrieve the "/path" part by finding the spaces
@@ -103,6 +103,7 @@ bool WebServer::_parseRequest(WiFiClient& client) {
103103
}
104104
_currentUri = url;
105105
_chunked = false;
106+
_clientContentLength = 0; // not known yet, or invalid
106107

107108
HTTPMethod method = HTTP_ANY;
108109
size_t num_methods = sizeof(_http_method_str) / sizeof(const char *);
@@ -136,7 +137,6 @@ bool WebServer::_parseRequest(WiFiClient& client) {
136137
String headerValue;
137138
bool isForm = false;
138139
bool isEncoded = false;
139-
uint32_t contentLength = 0;
140140
//parse headers
141141
while(1){
142142
req = client.readStringUntil('\r');
@@ -167,20 +167,20 @@ bool WebServer::_parseRequest(WiFiClient& client) {
167167
isForm = true;
168168
}
169169
} else if (headerName.equalsIgnoreCase(F("Content-Length"))){
170-
contentLength = headerValue.toInt();
170+
_clientContentLength = headerValue.toInt();
171171
} else if (headerName.equalsIgnoreCase(F("Host"))){
172172
_hostHeader = headerValue;
173173
}
174174
}
175175

176176
if (!isForm){
177177
size_t plainLength;
178-
char* plainBuf = readBytesWithTimeout(client, contentLength, plainLength, HTTP_MAX_POST_WAIT);
179-
if (plainLength < contentLength) {
178+
char* plainBuf = readBytesWithTimeout(client, _clientContentLength, plainLength, HTTP_MAX_POST_WAIT);
179+
if (plainLength < _clientContentLength) {
180180
free(plainBuf);
181181
return false;
182182
}
183-
if (contentLength > 0) {
183+
if (_clientContentLength > 0) {
184184
if(isEncoded){
185185
//url encoded form
186186
if (searchStr != "") searchStr += '&';
@@ -200,11 +200,10 @@ bool WebServer::_parseRequest(WiFiClient& client) {
200200
// No content - but we can still have arguments in the URL.
201201
_parseArguments(searchStr);
202202
}
203-
}
204-
205-
if (isForm){
203+
} else {
204+
// it IS a form
206205
_parseArguments(searchStr);
207-
if (!_parseForm(client, boundaryStr, contentLength)) {
206+
if (!_parseForm(client, boundaryStr, _clientContentLength)) {
208207
return false;
209208
}
210209
}

‎libraries/WebServer/src/WebServer.cpp

Copy file name to clipboardExpand all lines: libraries/WebServer/src/WebServer.cpp
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ WebServer::WebServer(IPAddress addr, int port)
5757
, _headerKeysCount(0)
5858
, _currentHeaders(nullptr)
5959
, _contentLength(0)
60+
, _clientContentLength(0)
6061
, _chunked(false)
6162
{
6263
log_v("WebServer::Webserver(addr=%s, port=%d)", addr.toString().c_str(), port);
@@ -80,6 +81,7 @@ WebServer::WebServer(int port)
8081
, _headerKeysCount(0)
8182
, _currentHeaders(nullptr)
8283
, _contentLength(0)
84+
, _clientContentLength(0)
8385
, _chunked(false)
8486
{
8587
log_v("WebServer::Webserver(port=%d)", port);

‎libraries/WebServer/src/WebServer.h

Copy file name to clipboardExpand all lines: libraries/WebServer/src/WebServer.h
+8-5Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,13 @@ class WebServer
105105
int args(); // get arguments count
106106
bool hasArg(String name); // check if argument exists
107107
void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); // set the request headers to collect
108-
String header(String name); // get request header value by name
109-
String header(int i); // get request header value by number
110-
String headerName(int i); // get request header name by number
111-
int headers(); // get header count
112-
bool hasHeader(String name); // check if header exists
108+
String header(String name); // get request header value by name
109+
String header(int i); // get request header value by number
110+
String headerName(int i); // get request header name by number
111+
int headers(); // get header count
112+
bool hasHeader(String name); // check if header exists
113+
114+
int clientContentLength() { return _clientContentLength; } // return "content-length" of incoming HTTP header from "_currentClient"
113115

114116
String hostHeader(); // get request host header if available or empty String if not
115117

@@ -198,6 +200,7 @@ class WebServer
198200
int _headerKeysCount;
199201
RequestArgument* _currentHeaders;
200202
size_t _contentLength;
203+
int _clientContentLength; // "Content-Length" from header of incoming POST or GET request
201204
String _responseHeaders;
202205

203206
String _hostHeader;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.