Skip to content

Commit 68d1281

Browse files
committed
Resolve #839
1 parent 0308d60 commit 68d1281

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

httplib.h

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -597,9 +597,17 @@ inline void default_socket_options(socket_t sock) {
597597
class Server {
598598
public:
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

42684276
inline 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

47504759
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+
}
47524764

47534765
// File handler
47544766
bool is_head_request = req.method == "HEAD";

test/test.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,9 +1009,9 @@ TEST(RoutingHandlerTest, PreRoutingHandler) {
10091009
if (req.path == "/routing_handler") {
10101010
res.set_header("PRE_ROUTING", "on");
10111011
res.set_content("Routing Handler", "text/plain");
1012-
return true;
1012+
return httplib::Server::HandlerResponse::Handled;
10131013
}
1014-
return false;
1014+
return httplib::Server::HandlerResponse::Unhandled;
10151015
});
10161016

10171017
svr.set_error_handler([](const Request & /*req*/, Response &res) {

0 commit comments

Comments
 (0)