File tree 4 files changed +33
-3
lines changed
libraries/ESP8266WebServer
4 files changed +33
-3
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,15 @@ const char *password = STAPSK;
16
16
17
17
ESP8266WebServer server (80 );
18
18
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
+
19
28
void setup (void ) {
20
29
Serial.begin (115200 );
21
30
WiFi.mode (WIFI_STA);
@@ -40,11 +49,19 @@ void setup(void) {
40
49
});
41
50
42
51
server.on (UriBraces (" /users/{}" ), []() {
52
+ if (!checkPathArgs (1 )) {
53
+ return ;
54
+ }
55
+
43
56
String user = server.pathArg (0 );
44
57
server.send (200 , " text/plain" , " User: '" + user + " '" );
45
58
});
46
59
47
60
server.on (UriRegex (" ^\\ /users\\ /([0-9]+)\\ /devices\\ /([0-9]+)$" ), []() {
61
+ if (!checkPathArgs (2 )) {
62
+ return ;
63
+ }
64
+
48
65
String user = server.pathArg (0 );
49
66
String device = server.pathArg (1 );
50
67
server.send (200 , " text/plain" , " User: '" + user + " ' and Device: '" + device + " '" );
Original file line number Diff line number Diff line change @@ -656,6 +656,13 @@ void ESP8266WebServerTemplate<ServerType>::_streamFileCore(const size_t fileSize
656
656
send (200 , contentType, emptyString);
657
657
}
658
658
659
+ template <typename ServerType>
660
+ size_t ESP8266WebServerTemplate<ServerType>::pathArgs() const {
661
+ if (_currentHandler != nullptr )
662
+ return _currentHandler->pathArgs ();
663
+ return 0 ;
664
+ }
665
+
659
666
template <typename ServerType>
660
667
const String& ESP8266WebServerTemplate<ServerType>::pathArg(unsigned int i) const {
661
668
if (_currentHandler != nullptr )
Original file line number Diff line number Diff line change @@ -142,6 +142,8 @@ class ESP8266WebServerTemplate
142
142
ServerType &getServer () { return _server; }
143
143
144
144
const String& pathArg (unsigned int i) const ; // get request path argument by number
145
+ int pathArgs () const ; // get path arguments count
146
+
145
147
const String& arg (const String& name) const ; // get request argument value by name
146
148
const String& arg (int i) const ; // get request argument value by number
147
149
const String& argName (int i) const ; // get request argument name by number
Original file line number Diff line number Diff line change @@ -16,7 +16,7 @@ class RequestHandler {
16
16
/*
17
17
note: old handler API for backward compatibility
18
18
*/
19
-
19
+
20
20
virtual bool canHandle (HTTPMethod method, const String& uri) {
21
21
(void ) method;
22
22
(void ) uri;
@@ -43,7 +43,7 @@ class RequestHandler {
43
43
return false ;
44
44
}
45
45
virtual bool handle (WebServerType& server, HTTPMethod requestMethod, const String& requestUri) {
46
- (void ) server;
46
+ (void ) server;
47
47
(void ) requestMethod;
48
48
(void ) requestUri;
49
49
return false ;
@@ -74,7 +74,11 @@ class RequestHandler {
74
74
std::vector<String> pathArgs;
75
75
76
76
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 {
78
82
assert (i < pathArgs.size ());
79
83
return pathArgs[i];
80
84
}
You can’t perform that action at this time.
0 commit comments