# HG changeset patch # User David Demelier # Date 1511273525 -3600 # Node ID 8d9662b2beeeafea6ce47bbd9635e6359171b6d5 # Parent 7051034bf2ee1ad2fbe0db20e5c1d72b1d34a5a6 Irccd: unify handlers, take error code as first argument diff -r 7051034bf2ee -r 8d9662b2beee libirccd/irccd/transport_client.cpp --- a/libirccd/irccd/transport_client.cpp Tue Nov 21 13:40:39 2017 +0100 +++ b/libirccd/irccd/transport_client.cpp Tue Nov 21 15:12:05 2017 +0100 @@ -59,7 +59,7 @@ do_recv(input_, [this, self, handler] (auto code, auto xfer) { if (code || xfer == 0) { - handler("", code); + handler(code, nullptr); close(); return; } @@ -72,16 +72,18 @@ // Remove early in case of errors. input_.consume(xfer); - try { - auto json = nlohmann::json::parse(message); + nlohmann::json command; - if (!json.is_object()) - handler(nullptr, network_errc::invalid_message); - else - handler(json, code); + try { + command = nlohmann::json::parse(message); } catch (...) { - handler(nullptr, network_errc::invalid_message); + handler(network_errc::invalid_message, nullptr); } + + if (!command.is_object()) + handler(network_errc::invalid_message, nullptr); + else + handler(network_errc::no_error, std::move(command)); }); } diff -r 7051034bf2ee -r 8d9662b2beee libirccd/irccd/transport_client.hpp --- a/libirccd/irccd/transport_client.hpp Tue Nov 21 13:40:39 2017 +0100 +++ b/libirccd/irccd/transport_client.hpp Tue Nov 21 15:12:05 2017 +0100 @@ -51,12 +51,12 @@ /** * Callback on receive operation. */ - using recv_t = std::function; + using recv_t = std::function; /** * Callback on send operation. */ - using send_t = std::function; + using send_t = std::function; /** * Client state. @@ -73,14 +73,14 @@ * * The implementation should read until \r\n\r\n is found. */ - using do_recv_handler_t = std::function; + using do_recv_handler_t = std::function; /** * Handler for do_send. * * The implementation must send the whole message. */ - using do_send_handler_t = std::function; + using do_send_handler_t = std::function; /** * Input buffer. diff -r 7051034bf2ee -r 8d9662b2beee libirccd/irccd/transport_server.cpp --- a/libirccd/irccd/transport_server.cpp Tue Nov 21 13:40:39 2017 +0100 +++ b/libirccd/irccd/transport_server.cpp Tue Nov 21 15:12:05 2017 +0100 @@ -30,9 +30,11 @@ assert(client); assert(handler); - client->recv([this, client, handler] (auto message, auto code) { - if (code) - handler(client, code); + client->recv([this, client, handler] (auto code, auto message) { + if (code) { + handler(std::move(code), std::move(client)); + return; + } clients_.insert(client); @@ -50,7 +52,7 @@ code = network_errc::no_error; } - handler(client, code); + handler(std::move(code), std::move(client)); }); } @@ -74,12 +76,12 @@ client->send(greetings, [this, client, handler] (auto code) { if (code) - handler(client, code); + handler(std::move(code), std::move(client)); else if (!password_.empty()) do_auth(std::move(client), std::move(handler)); else { clients_.insert(client); - handler(client, code); + handler(std::move(code), std::move(client)); } }); } @@ -88,9 +90,9 @@ { assert(handler); - do_accept([this, handler] (auto client, auto code) { + do_accept([this, handler] (auto code, auto client) { if (code) - handler(nullptr, code); + handler(std::move(code), nullptr); else do_greetings(std::move(client), std::move(handler)); }); diff -r 7051034bf2ee -r 8d9662b2beee libirccd/irccd/transport_server.hpp --- a/libirccd/irccd/transport_server.hpp Tue Nov 21 13:40:39 2017 +0100 +++ b/libirccd/irccd/transport_server.hpp Tue Nov 21 15:12:05 2017 +0100 @@ -52,7 +52,7 @@ /** * Callback when a new client should be accepted. */ - using accept_t = std::function, boost::system::error_code)>; + using accept_t = std::function)>; private: client_set_t clients_; @@ -192,9 +192,9 @@ acceptor_.async_accept(client->socket(), [client, handler] (auto code) { if (!code) - handler(std::move(client), std::move(code)); + handler(std::move(code), std::move(client)); else - handler(nullptr, code); + handler(std::move(code), nullptr); }); } diff -r 7051034bf2ee -r 8d9662b2beee libirccd/irccd/transport_service.cpp --- a/libirccd/irccd/transport_service.cpp Tue Nov 21 13:40:39 2017 +0100 +++ b/libirccd/irccd/transport_service.cpp Tue Nov 21 15:12:05 2017 +0100 @@ -53,15 +53,15 @@ void transport_service::do_accept(transport_server& ts) { - ts.accept([this, &ts] (auto client, auto code) { + ts.accept([this, &ts] (auto code, auto client) { if (code) log::warning() << "transport: " << code.message() << std::endl; else { - client->recv([this, client] (auto json, auto code) { + client->recv([this, client] (auto code, auto json) { if (code) log::warning() << "transport: " << code.message() << std::endl; else - handle_command(client, json); + handle_command(std::move(client), json); }); } diff -r 7051034bf2ee -r 8d9662b2beee libirccdctl/irccd/ctl/network_connection.hpp --- a/libirccdctl/irccd/ctl/network_connection.hpp Tue Nov 21 13:40:39 2017 +0100 +++ b/libirccdctl/irccd/ctl/network_connection.hpp Tue Nov 21 15:12:05 2017 +0100 @@ -109,7 +109,10 @@ handler(network_errc::invalid_message, nullptr); } - handler(network_errc::no_error, std::move(json)); + if (!json.is_object()) + handler(network_errc::invalid_message, nullptr); + else + handler(network_errc::no_error, std::move(json)); }); }