26#ifndef ROUTER_SRC_HTTP_SRC_HTTP_REQUEST_ROUTER_H_
27#define ROUTER_SRC_HTTP_SRC_HTTP_REQUEST_ROUTER_H_
32#include <shared_mutex>
50 void register_regex_handler(
const std::string &url_host,
51 const std::string &url_regex_str,
52 std::unique_ptr<RequestHandler>
cb);
53 void register_direct_match_handler(
54 const std::string &url_host,
55 const ::http::base::UriPathMatcher &uri_path_matcher,
56 std::unique_ptr<RequestHandler>
cb);
59 void set_default_route(std::unique_ptr<RequestHandler>
cb);
60 void clear_default_route();
63 void require_realm(
const std::string &realm) { require_realm_ = realm; }
70 url_pattern_(
std::move(url_pattern)),
73 bool matches(std::string_view input)
const;
75 const std::string &
url_pattern()
const {
return url_pattern_; }
80 std::unique_ptr<mysql_harness::RegexMatcher>
matcher_;
98 for (
const auto &el : path_elements) {
105 if (allow_trailing_slash)
result +=
"[/]";
112 const ::http::base::UriPathMatcher &url_path_matcher);
120 add_handler(path_handler);
124 std::vector<PathHandler> &
handlers() {
return handlers_; }
125 void add_handler(
const PathHandler &path_handler);
126 bool has_handler(
const void *handler_id)
const;
127 std::string get_handler_path(
const void *handler_id)
const;
128 size_t remove_handler(
const void *handler_id);
138 std::string_view
path);
141 std::string_view url_host, std::string_view
path);
144 std::string_view
path);
146 void unregister_regex_handler(
const void *handler_id);
147 void unregister_direct_match_handler(
const void *handler_id);
150 std::map<std::string, std::map<UrlPathKey, RouteDirectMatcher>, std::less<>>
153 std::map<std::string, std::vector<RouteRegexMatcher>, std::less<>>
161 friend class HttpRequestRouterDirectMatchTest;
Definition: http_request_router.h:85
std::vector< PathHandler > & handlers()
Definition: http_request_router.h:124
std::vector< PathHandler > handlers_
Definition: http_request_router.h:131
RouteDirectMatcher(const PathHandler &path_handler)
Definition: http_request_router.h:119
Definition: http_request_router.h:66
std::string url_pattern_
Definition: http_request_router.h:81
RouteRegexMatcher(std::string url_pattern, BaseRequestHandlerPtr handler)
Definition: http_request_router.h:68
BaseRequestHandlerPtr handler() const
Definition: http_request_router.h:77
std::unique_ptr< mysql_harness::RegexMatcher > matcher_
Definition: http_request_router.h:80
BaseRequestHandlerPtr handler_
Definition: http_request_router.h:82
const std::string & url_pattern() const
Definition: http_request_router.h:75
Definition: http_request_router.h:45
std::shared_mutex route_mtx_
Definition: http_request_router.h:159
void require_realm(const std::string &realm)
Definition: http_request_router.h:63
std::shared_ptr< http::base::RequestHandler > BaseRequestHandlerPtr
Definition: http_request_router.h:48
std::string require_realm_
Definition: http_request_router.h:157
std::map< std::string, std::vector< RouteRegexMatcher >, std::less<> > request_regex_handlers_
Definition: http_request_router.h:154
BaseRequestHandlerPtr default_route_
Definition: http_request_router.h:156
std::map< std::string, std::map< UrlPathKey, RouteDirectMatcher >, std::less<> > request_direct_handlers_
Definition: http_request_router.h:151
The handler class is the interface for dynamically loadable storage engines.
Definition: handler.h:4666
Definition: request_handler.h:36
Definition: request_handler_interface.h:36
virtual void route(http::base::Request &request)=0
#define HTTP_SERVER_LIB_EXPORT
Definition: http_server_lib_export.h:15
static char * path
Definition: mysqldump.cc:150
static bool cb(unsigned long long new_value)
Definition: option_usage.cc:45
Unique_ptr< T, std::nullptr_t > make_unique(size_t size)
In-place constructs a new unique pointer with no specific allocator and with array type T.
Oauth2Handler::RequestHandler RequestHandler
Definition: oauth2_facebook_handler.cc:45
HARNESS_EXPORT void unregister_handler(std::string name)
Unregister a handler.
Definition: registry.cc:505
constexpr bool operator<(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:166
Definition: gcs_xcom_synode.h:64
struct result result
Definition: result.h:34
Definition: http_request_router.h:114
BaseRequestHandlerPtr handler
Definition: http_request_router.h:116
::http::base::UriPathMatcher path_matcher
Definition: http_request_router.h:115
Definition: http_request_router.h:87
bool allow_trailing_slash
Definition: http_request_router.h:92
std::optional< std::string > UrlPathElem
Definition: http_request_router.h:90
std::vector< UrlPathElem > path_elements
Definition: http_request_router.h:91
auto str() const
Definition: http_request_router.h:96
Definition: uri_path_matcher.h:40