Skip to content

Commit 7285b89

Browse files
committed
ESP8266WebServer: pathArgs() to complement pathArg(N)
similar to ::args(), returns number of parsed path arguments shortened esp8266#9100
1 parent 7e0d20e commit 7285b89

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

libraries/ESP8266WebServer/examples/PathArgServer/PathArgServer.ino

+17
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ const char *password = STAPSK;
1616

1717
ESP8266WebServer server(80);
1818

19+
bool checkPathArgs(int number) {
20+
if (server.pathArgs() == number) {
21+
return true;
22+
}
23+
24+
server.send(500, "text/plain", "request handler received unexpected number of path arguments");
25+
return false;
26+
}
27+
1928
void setup(void) {
2029
Serial.begin(115200);
2130
WiFi.mode(WIFI_STA);
@@ -40,11 +49,19 @@ void setup(void) {
4049
});
4150

4251
server.on(UriBraces("/users/{}"), []() {
52+
if (!checkPathArgs(1)) {
53+
return;
54+
}
55+
4356
String user = server.pathArg(0);
4457
server.send(200, "text/plain", "User: '" + user + "'");
4558
});
4659

4760
server.on(UriRegex("^\\/users\\/([0-9]+)\\/devices\\/([0-9]+)$"), []() {
61+
if (!checkPathArgs(2)) {
62+
return;
63+
}
64+
4865
String user = server.pathArg(0);
4966
String device = server.pathArg(1);
5067
server.send(200, "text/plain", "User: '" + user + "' and Device: '" + device + "'");

libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h

+7
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,13 @@ void ESP8266WebServerTemplate<ServerType>::_streamFileCore(const size_t fileSize
656656
send(200, contentType, emptyString);
657657
}
658658

659+
template <typename ServerType>
660+
size_t ESP8266WebServerTemplate<ServerType>::pathArgs() const {
661+
if (_currentHandler != nullptr)
662+
return _currentHandler->pathArgs();
663+
return 0;
664+
}
665+
659666
template <typename ServerType>
660667
const String& ESP8266WebServerTemplate<ServerType>::pathArg(unsigned int i) const {
661668
if (_currentHandler != nullptr)

libraries/ESP8266WebServer/src/ESP8266WebServer.h

+2
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ class ESP8266WebServerTemplate
142142
ServerType &getServer() { return _server; }
143143

144144
const String& pathArg(unsigned int i) const; // get request path argument by number
145+
int pathArgs() const; // get path arguments count
146+
145147
const String& arg(const String& name) const; // get request argument value by name
146148
const String& arg(int i) const; // get request argument value by number
147149
const String& argName(int i) const; // get request argument name by number

libraries/ESP8266WebServer/src/detail/RequestHandler.h

+7-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class RequestHandler {
1616
/*
1717
note: old handler API for backward compatibility
1818
*/
19-
19+
2020
virtual bool canHandle(HTTPMethod method, const String& uri) {
2121
(void) method;
2222
(void) uri;
@@ -43,7 +43,7 @@ class RequestHandler {
4343
return false;
4444
}
4545
virtual bool handle(WebServerType& server, HTTPMethod requestMethod, const String& requestUri) {
46-
(void) server;
46+
(void) server;
4747
(void) requestMethod;
4848
(void) requestUri;
4949
return false;
@@ -74,7 +74,11 @@ class RequestHandler {
7474
std::vector<String> pathArgs;
7575

7676
public:
77-
const String& pathArg(unsigned int i) {
77+
size_t pathArgs() const {
78+
return pathArgs.size();
79+
}
80+
81+
const String& pathArg(unsigned int i) const {
7882
assert(i < pathArgs.size());
7983
return pathArgs[i];
8084
}

0 commit comments

Comments
 (0)