@@ -597,9 +597,17 @@ inline void default_socket_options(socket_t sock) {
597597class Server {
598598public:
599599 using Handler = std::function<void (const Request &, Response &)>;
600- using HandlerWithReturn = std::function<bool (const Request &, Response &)>;
600+
601+ enum class HandlerResponse {
602+ Handled,
603+ Unhandled,
604+ };
605+ using HandlerWithResponse =
606+ std::function<HandlerResponse(const Request &, Response &)>;
607+
601608 using HandlerWithContentReader = std::function<void (
602609 const Request &, Response &, const ContentReader &content_reader)>;
610+
603611 using Expect100ContinueHandler =
604612 std::function<int (const Request &, Response &)>;
605613
@@ -642,9 +650,9 @@ class Server {
642650 const char *mime);
643651 Server &set_file_request_handler (Handler handler);
644652
645- Server &set_error_handler (HandlerWithReturn handler);
653+ Server &set_error_handler (HandlerWithResponse handler);
646654 Server &set_error_handler (Handler handler);
647- Server &set_pre_routing_handler (HandlerWithReturn handler);
655+ Server &set_pre_routing_handler (HandlerWithResponse handler);
648656 Server &set_post_routing_handler (Handler handler);
649657
650658 Server &set_expect_100_continue_handler (Expect100ContinueHandler handler);
@@ -753,8 +761,8 @@ class Server {
753761 Handlers delete_handlers_;
754762 HandlersForContentReader delete_handlers_for_content_reader_;
755763 Handlers options_handlers_;
756- HandlerWithReturn error_handler_;
757- HandlerWithReturn pre_routing_handler_;
764+ HandlerWithResponse error_handler_;
765+ HandlerWithResponse pre_routing_handler_;
758766 Handler post_routing_handler_;
759767 Logger logger_;
760768 Expect100ContinueHandler expect_100_continue_handler_;
@@ -4260,20 +4268,20 @@ inline Server &Server::set_file_request_handler(Handler handler) {
42604268 return *this ;
42614269}
42624270
4263- inline Server &Server::set_error_handler (HandlerWithReturn handler) {
4271+ inline Server &Server::set_error_handler (HandlerWithResponse handler) {
42644272 error_handler_ = std::move (handler);
42654273 return *this ;
42664274}
42674275
42684276inline Server &Server::set_error_handler (Handler handler) {
42694277 error_handler_ = [handler](const Request &req, Response &res) {
42704278 handler (req, res);
4271- return true ;
4279+ return HandlerResponse::Handled ;
42724280 };
42734281 return *this ;
42744282}
42754283
4276- inline Server &Server::set_pre_routing_handler (HandlerWithReturn handler) {
4284+ inline Server &Server::set_pre_routing_handler (HandlerWithResponse handler) {
42774285 pre_routing_handler_ = std::move (handler);
42784286 return *this ;
42794287}
@@ -4411,7 +4419,8 @@ inline bool Server::write_response_core(Stream &strm, bool close_connection,
44114419 bool need_apply_ranges) {
44124420 assert (res.status != -1 );
44134421
4414- if (400 <= res.status && error_handler_ && error_handler_ (req, res)) {
4422+ if (400 <= res.status && error_handler_ &&
4423+ error_handler_ (req, res) == HandlerResponse::Handled) {
44154424 need_apply_ranges = true ;
44164425 }
44174426
@@ -4748,7 +4757,10 @@ inline bool Server::listen_internal() {
47484757}
47494758
47504759inline bool Server::routing (Request &req, Response &res, Stream &strm) {
4751- if (pre_routing_handler_ && pre_routing_handler_ (req, res)) { return true ; }
4760+ if (pre_routing_handler_ &&
4761+ pre_routing_handler_ (req, res) == HandlerResponse::Handled) {
4762+ return true ;
4763+ }
47524764
47534765 // File handler
47544766 bool is_head_request = req.method == " HEAD" ;
0 commit comments