From 59f5fdbb332d74750b61e7f7255d1ff0f991bf83 Mon Sep 17 00:00:00 2001 From: yhirose Date: Sat, 23 Jan 2021 11:40:31 -0500 Subject: [PATCH] Resolve #840 --- httplib.h | 84 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 10 deletions(-) diff --git a/httplib.h b/httplib.h index 6e39f86..40004a5 100644 --- a/httplib.h +++ b/httplib.h @@ -610,15 +610,29 @@ public: virtual bool is_valid() const; Server &Get(const char *pattern, Handler handler); + Server &Get(const char *pattern, size_t pattern_len, Handler handler); Server &Post(const char *pattern, Handler handler); + Server &Post(const char *pattern, size_t pattern_len, Handler handler); Server &Post(const char *pattern, HandlerWithContentReader handler); + Server &Post(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler); Server &Put(const char *pattern, Handler handler); + Server &Put(const char *pattern, size_t pattern_len, Handler handler); Server &Put(const char *pattern, HandlerWithContentReader handler); + Server &Put(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler); Server &Patch(const char *pattern, Handler handler); + Server &Patch(const char *pattern, size_t pattern_len, Handler handler); Server &Patch(const char *pattern, HandlerWithContentReader handler); + Server &Patch(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler); Server &Delete(const char *pattern, Handler handler); + Server &Delete(const char *pattern, size_t pattern_len, Handler handler); Server &Delete(const char *pattern, HandlerWithContentReader handler); + Server &Delete(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler); Server &Options(const char *pattern, Handler handler); + Server &Options(const char *pattern, size_t pattern_len, Handler handler); bool set_base_dir(const char *dir, const char *mount_point = nullptr); bool set_mount_point(const char *mount_point, const char *dir, @@ -4069,66 +4083,116 @@ inline Server::Server() inline Server::~Server() {} inline Server &Server::Get(const char *pattern, Handler handler) { + return Get(pattern, strlen(pattern), handler); +} + +inline Server &Server::Get(const char *pattern, size_t pattern_len, + Handler handler) { get_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Post(const char *pattern, Handler handler) { + return Post(pattern, strlen(pattern), handler); +} + +inline Server &Server::Post(const char *pattern, size_t pattern_len, + Handler handler) { post_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Post(const char *pattern, HandlerWithContentReader handler) { + return Post(pattern, strlen(pattern), handler); +} + +inline Server &Server::Post(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler) { post_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Put(const char *pattern, Handler handler) { + return Put(pattern, strlen(pattern), handler); +} + +inline Server &Server::Put(const char *pattern, size_t pattern_len, + Handler handler) { put_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Put(const char *pattern, HandlerWithContentReader handler) { + return Put(pattern, strlen(pattern), handler); +} + +inline Server &Server::Put(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler) { put_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Patch(const char *pattern, Handler handler) { + return Patch(pattern, strlen(pattern), handler); +} + +inline Server &Server::Patch(const char *pattern, size_t pattern_len, + Handler handler) { patch_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Patch(const char *pattern, HandlerWithContentReader handler) { + return Patch(pattern, strlen(pattern), handler); +} + +inline Server &Server::Patch(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler) { patch_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Delete(const char *pattern, Handler handler) { + return Delete(pattern, strlen(pattern), handler); +} + +inline Server &Server::Delete(const char *pattern, size_t pattern_len, + Handler handler) { delete_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Delete(const char *pattern, HandlerWithContentReader handler) { + return Delete(pattern, strlen(pattern), handler); +} + +inline Server &Server::Delete(const char *pattern, size_t pattern_len, + HandlerWithContentReader handler) { delete_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; } inline Server &Server::Options(const char *pattern, Handler handler) { + return Options(pattern, strlen(pattern), handler); +} + +inline Server &Server::Options(const char *pattern, size_t pattern_len, + Handler handler) { options_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + std::make_pair(std::regex(pattern, pattern_len), std::move(handler))); return *this; }