Skip to content

Commit b31b187

Browse files
committed
Allow std::functional for middleware callbacks.
Signed-off-by: pvogt09 <[email protected]>
1 parent 07f042b commit b31b187

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

src/HTTPMiddlewareFunction.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ namespace httpsserver {
2121
* handling in case of missing authentication. Don't forget to call next in case you want to access your
2222
* resources, though.
2323
*/
24-
typedef void (HTTPSMiddlewareFunction)(HTTPRequest * req, HTTPResponse * res, std::function<void()> next);
24+
typedef std::function<void(HTTPRequest * req, HTTPResponse * res, std::function<void()> next)> HTTPSMiddlewareFunction;
25+
26+
bool operator==(const HTTPSMiddlewareFunction& lhs, const HTTPSMiddlewareFunction& rhs);
2527
}
2628
#endif /* SRC_HTTPMIDDLEWAREFUNCTION_HPP_ */

src/ResourceResolver.cpp

+11-3
Original file line numberDiff line numberDiff line change
@@ -160,15 +160,23 @@ void ResourceResolver::resolveNode(const std::string &method, const std::string
160160
}
161161
}
162162

163-
void ResourceResolver::addMiddleware(const HTTPSMiddlewareFunction * mwFunction) {
163+
void ResourceResolver::addMiddleware(const HTTPSMiddlewareFunction mwFunction) {
164164
_middleware.push_back(mwFunction);
165165
}
166166

167-
void ResourceResolver::removeMiddleware(const HTTPSMiddlewareFunction * mwFunction) {
167+
void ResourceResolver::addMiddleware(void (*mwFunction)(HTTPRequest * req, HTTPResponse * res, std::function<void()> next)) {
168+
_middleware.push_back(HTTPSMiddlewareFunction(mwFunction));
169+
}
170+
171+
void ResourceResolver::removeMiddleware(const HTTPSMiddlewareFunction mwFunction) {
172+
_middleware.erase(std::remove(_middleware.begin(), _middleware.end(), mwFunction), _middleware.end());
173+
}
174+
175+
void ResourceResolver::removeMiddleware(void (*mwFunction)(HTTPRequest * req, HTTPResponse * res, std::function<void()> next)) {
168176
_middleware.erase(std::remove(_middleware.begin(), _middleware.end(), mwFunction), _middleware.end());
169177
}
170178

171-
const std::vector<HTTPSMiddlewareFunction*> ResourceResolver::getMiddleware() {
179+
const std::vector<HTTPSMiddlewareFunction> ResourceResolver::getMiddleware() {
172180
return _middleware;
173181
}
174182

src/ResourceResolver.hpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ class ResourceResolver {
3030
void resolveNode(const std::string &method, const std::string &url, ResolvedResource &resolvedResource, HTTPNodeType nodeType);
3131

3232
/** Add a middleware function to the end of the middleware function chain. See HTTPSMiddlewareFunction.hpp for details. */
33-
void addMiddleware(const HTTPSMiddlewareFunction * mwFunction);
33+
void addMiddleware(const HTTPSMiddlewareFunction mwFunction);
34+
void addMiddleware(void (*mwFunction)(HTTPRequest *req, HTTPResponse *res, std::function<void()> next));
3435
/** Remove a specific function from the middleware function chain. */
35-
void removeMiddleware(const HTTPSMiddlewareFunction * mwFunction);
36+
void removeMiddleware(const HTTPSMiddlewareFunction mwFunction);
37+
void removeMiddleware(void (*mwFunction)(HTTPRequest * req, HTTPResponse * res, std::function<void()> next));
3638
/** Get the current middleware chain with a resource function at the end */
37-
const std::vector<HTTPSMiddlewareFunction*> getMiddleware();
39+
const std::vector<HTTPSMiddlewareFunction> getMiddleware();
3840

3941
private:
4042

@@ -43,7 +45,7 @@ class ResourceResolver {
4345
HTTPNode * _defaultNode;
4446

4547
// Middleware functions, if any are registered. Will be called in order of the vector.
46-
std::vector<const HTTPSMiddlewareFunction*> _middleware;
48+
std::vector<HTTPSMiddlewareFunction> _middleware;
4749
};
4850

4951
} /* namespace httpsserver */

0 commit comments

Comments
 (0)