File tree Expand file tree Collapse file tree 4 files changed +33
-3
lines changed
libraries/ESP8266WebServer Expand file tree Collapse file tree 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;
1616
1717ESP8266WebServer 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+
1928void 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 + " '" );
Original file line number Diff line number Diff 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+
659666template <typename ServerType>
660667const String& ESP8266WebServerTemplate<ServerType>::pathArg(unsigned int i) const {
661668 if (_currentHandler != nullptr )
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
7676public:
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 }
You can’t perform that action at this time.
0 commit comments