@@ -597,9 +597,17 @@ inline void default_socket_options(socket_t sock) {
597
597
class Server {
598
598
public:
599
599
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
+
601
608
using HandlerWithContentReader = std::function<void (
602
609
const Request &, Response &, const ContentReader &content_reader)>;
610
+
603
611
using Expect100ContinueHandler =
604
612
std::function<int (const Request &, Response &)>;
605
613
@@ -642,9 +650,9 @@ class Server {
642
650
const char *mime);
643
651
Server &set_file_request_handler (Handler handler);
644
652
645
- Server &set_error_handler (HandlerWithReturn handler);
653
+ Server &set_error_handler (HandlerWithResponse handler);
646
654
Server &set_error_handler (Handler handler);
647
- Server &set_pre_routing_handler (HandlerWithReturn handler);
655
+ Server &set_pre_routing_handler (HandlerWithResponse handler);
648
656
Server &set_post_routing_handler (Handler handler);
649
657
650
658
Server &set_expect_100_continue_handler (Expect100ContinueHandler handler);
@@ -753,8 +761,8 @@ class Server {
753
761
Handlers delete_handlers_;
754
762
HandlersForContentReader delete_handlers_for_content_reader_;
755
763
Handlers options_handlers_;
756
- HandlerWithReturn error_handler_;
757
- HandlerWithReturn pre_routing_handler_;
764
+ HandlerWithResponse error_handler_;
765
+ HandlerWithResponse pre_routing_handler_;
758
766
Handler post_routing_handler_;
759
767
Logger logger_;
760
768
Expect100ContinueHandler expect_100_continue_handler_;
@@ -4260,20 +4268,20 @@ inline Server &Server::set_file_request_handler(Handler handler) {
4260
4268
return *this ;
4261
4269
}
4262
4270
4263
- inline Server &Server::set_error_handler (HandlerWithReturn handler) {
4271
+ inline Server &Server::set_error_handler (HandlerWithResponse handler) {
4264
4272
error_handler_ = std::move (handler);
4265
4273
return *this ;
4266
4274
}
4267
4275
4268
4276
inline Server &Server::set_error_handler (Handler handler) {
4269
4277
error_handler_ = [handler](const Request &req, Response &res) {
4270
4278
handler (req, res);
4271
- return true ;
4279
+ return HandlerResponse::Handled ;
4272
4280
};
4273
4281
return *this ;
4274
4282
}
4275
4283
4276
- inline Server &Server::set_pre_routing_handler (HandlerWithReturn handler) {
4284
+ inline Server &Server::set_pre_routing_handler (HandlerWithResponse handler) {
4277
4285
pre_routing_handler_ = std::move (handler);
4278
4286
return *this ;
4279
4287
}
@@ -4411,7 +4419,8 @@ inline bool Server::write_response_core(Stream &strm, bool close_connection,
4411
4419
bool need_apply_ranges) {
4412
4420
assert (res.status != -1 );
4413
4421
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) {
4415
4424
need_apply_ranges = true ;
4416
4425
}
4417
4426
@@ -4748,7 +4757,10 @@ inline bool Server::listen_internal() {
4748
4757
}
4749
4758
4750
4759
inline 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
+ }
4752
4764
4753
4765
// File handler
4754
4766
bool is_head_request = req.method == " HEAD" ;
0 commit comments