|
4 | 4 | #include "RequestHandler.h" |
5 | 5 | #include "mimetable.h" |
6 | 6 | #include "WString.h" |
| 7 | +#include "Uri.h" |
7 | 8 |
|
8 | 9 | using namespace mime; |
9 | 10 |
|
10 | 11 | class FunctionRequestHandler : public RequestHandler { |
11 | 12 | public: |
12 | | - FunctionRequestHandler(WebServer::THandlerFunction fn, WebServer::THandlerFunction ufn, const String &uri, HTTPMethod method) |
| 13 | + FunctionRequestHandler(WebServer::THandlerFunction fn, WebServer::THandlerFunction ufn, const Uri &uri, HTTPMethod method) |
13 | 14 | : _fn(fn) |
14 | 15 | , _ufn(ufn) |
15 | | - , _uri(uri) |
| 16 | + , _uri(uri.clone()) |
16 | 17 | , _method(method) |
17 | 18 | { |
18 | | - int numParams = 0, start = 0; |
19 | | - do { |
20 | | - start = _uri.indexOf("{}", start); |
21 | | - if (start > 0) { |
22 | | - numParams++; |
23 | | - start += 2; |
24 | | - } |
25 | | - } while (start > 0); |
26 | | - pathArgs.resize(numParams); |
| 19 | + _uri->initPathArgs(pathArgs); |
| 20 | + } |
| 21 | + |
| 22 | + ~FunctionRequestHandler() { |
| 23 | + delete _uri; |
27 | 24 | } |
28 | 25 |
|
29 | 26 | bool canHandle(HTTPMethod requestMethod, String requestUri) override { |
30 | 27 | if (_method != HTTP_ANY && _method != requestMethod) |
31 | 28 | return false; |
32 | 29 |
|
33 | | - if (_uri == requestUri) |
34 | | - return true; |
35 | | - |
36 | | - size_t uriLength = _uri.length(); |
37 | | - unsigned int pathArgIndex = 0; |
38 | | - unsigned int requestUriIndex = 0; |
39 | | - for (unsigned int i = 0; i < uriLength; i++, requestUriIndex++) { |
40 | | - char uriChar = _uri[i]; |
41 | | - char requestUriChar = requestUri[requestUriIndex]; |
42 | | - |
43 | | - if (uriChar == requestUriChar) |
44 | | - continue; |
45 | | - if (uriChar != '{') |
46 | | - return false; |
47 | | - |
48 | | - i += 2; // index of char after '}' |
49 | | - if (i >= uriLength) { |
50 | | - // there is no char after '}' |
51 | | - pathArgs[pathArgIndex] = requestUri.substring(requestUriIndex); |
52 | | - return pathArgs[pathArgIndex].indexOf("/") == -1; // path argument may not contain a '/' |
53 | | - } |
54 | | - else |
55 | | - { |
56 | | - char charEnd = _uri[i]; |
57 | | - int uriIndex = requestUri.indexOf(charEnd, requestUriIndex); |
58 | | - if (uriIndex < 0) |
59 | | - return false; |
60 | | - pathArgs[pathArgIndex] = requestUri.substring(requestUriIndex, uriIndex); |
61 | | - requestUriIndex = (unsigned int) uriIndex; |
62 | | - } |
63 | | - pathArgIndex++; |
64 | | - } |
65 | | - |
66 | | - return requestUriIndex >= requestUri.length(); |
| 30 | + return _uri->canHandle(requestUri, pathArgs); |
67 | 31 | } |
68 | 32 |
|
69 | 33 | bool canUpload(String requestUri) override { |
@@ -92,7 +56,7 @@ class FunctionRequestHandler : public RequestHandler { |
92 | 56 | protected: |
93 | 57 | WebServer::THandlerFunction _fn; |
94 | 58 | WebServer::THandlerFunction _ufn; |
95 | | - String _uri; |
| 59 | + Uri *_uri; |
96 | 60 | HTTPMethod _method; |
97 | 61 | }; |
98 | 62 |
|
|
0 commit comments