diff --git a/src/client/Client.hxx b/src/client/Client.hxx index 66be0ead8..f6677b145 100644 --- a/src/client/Client.hxx +++ b/src/client/Client.hxx @@ -1,5 +1,5 @@ /* - * Copyright 2003-2018 The Music Player Daemon Project + * Copyright 2003-2019 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -21,6 +21,7 @@ #define MPD_CLIENT_H #include "ClientMessage.hxx" +#include "command/CommandResult.hxx" #include "command/CommandListBuilder.hxx" #include "tag/Mask.hxx" #include "event/FullyBufferedSocket.hxx" @@ -226,6 +227,11 @@ public: const Storage *GetStorage() const noexcept; private: + CommandResult ProcessCommandList(bool list_ok, + std::list &&list) noexcept; + + CommandResult ProcessLine(char *line) noexcept; + /* virtual methods from class BufferedSocket */ InputResult OnSocketInput(void *data, size_t length) noexcept override; void OnSocketError(std::exception_ptr ep) noexcept override; diff --git a/src/client/ClientInternal.hxx b/src/client/ClientInternal.hxx index 37b5925f2..f9555e0cf 100644 --- a/src/client/ClientInternal.hxx +++ b/src/client/ClientInternal.hxx @@ -21,7 +21,6 @@ #define MPD_CLIENT_INTERNAL_HXX #include "Client.hxx" -#include "command/CommandResult.hxx" #include @@ -34,7 +33,4 @@ extern std::chrono::steady_clock::duration client_timeout; extern size_t client_max_command_list_size; extern size_t client_max_output_buffer_size; -CommandResult -client_process_line(Client &client, char *line) noexcept; - #endif diff --git a/src/client/ClientProcess.cxx b/src/client/ClientProcess.cxx index eeb72d35a..3926bee71 100644 --- a/src/client/ClientProcess.cxx +++ b/src/client/ClientProcess.cxx @@ -1,5 +1,5 @@ /* - * Copyright 2003-2018 The Music Player Daemon Project + * Copyright 2003-2019 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -28,38 +28,38 @@ #define CLIENT_LIST_OK_MODE_BEGIN "command_list_ok_begin" #define CLIENT_LIST_MODE_END "command_list_end" -static CommandResult -client_process_command_list(Client &client, bool list_ok, - std::list &&list) noexcept +inline CommandResult +Client::ProcessCommandList(bool list_ok, + std::list &&list) noexcept { CommandResult ret = CommandResult::OK; - unsigned num = 0; + unsigned n = 0; for (auto &&i : list) { char *cmd = &*i.begin(); FormatDebug(client_domain, "process command \"%s\"", cmd); - ret = command_process(client, num++, cmd); + ret = command_process(*this, n++, cmd); FormatDebug(client_domain, "command returned %i", int(ret)); - if (ret != CommandResult::OK || client.IsExpired()) + if (ret != CommandResult::OK || IsExpired()) break; else if (list_ok) - client.Write("list_OK\n"); + Write("list_OK\n"); } return ret; } CommandResult -client_process_line(Client &client, char *line) noexcept +Client::ProcessLine(char *line) noexcept { CommandResult ret; if (StringIsEqual(line, "noidle")) { - if (client.idle_waiting) { + if (idle_waiting) { /* send empty idle response and leave idle mode */ - client.idle_waiting = false; - command_success(client); + idle_waiting = false; + command_success(*this); } /* do nothing if the client wasn't idling: the client @@ -67,44 +67,43 @@ client_process_line(Client &client, char *line) noexcept client_idle_notify(), which he can now evaluate */ return CommandResult::OK; - } else if (client.idle_waiting) { + } else if (idle_waiting) { /* during idle mode, clients must not send anything except "noidle" */ FormatWarning(client_domain, "[%u] command \"%s\" during idle", - client.num, line); + num, line); return CommandResult::CLOSE; } - if (client.cmd_list.IsActive()) { + if (cmd_list.IsActive()) { if (StringIsEqual(line, CLIENT_LIST_MODE_END)) { FormatDebug(client_domain, "[%u] process command list", - client.num); + num); - auto &&cmd_list = client.cmd_list.Commit(); + auto &&list = cmd_list.Commit(); - ret = client_process_command_list(client, - client.cmd_list.IsOKMode(), - std::move(cmd_list)); + ret = ProcessCommandList(cmd_list.IsOKMode(), + std::move(list)); FormatDebug(client_domain, "[%u] process command " - "list returned %i", client.num, int(ret)); + "list returned %i", num, int(ret)); if (ret == CommandResult::CLOSE || - client.IsExpired()) + IsExpired()) return CommandResult::CLOSE; if (ret == CommandResult::OK) - command_success(client); + command_success(*this); - client.cmd_list.Reset(); + cmd_list.Reset(); } else { - if (!client.cmd_list.Add(line)) { + if (!cmd_list.Add(line)) { FormatWarning(client_domain, "[%u] command list size " "is larger than the max (%lu)", - client.num, + num, (unsigned long)client_max_command_list_size); return CommandResult::CLOSE; } @@ -113,10 +112,10 @@ client_process_line(Client &client, char *line) noexcept } } else { if (StringIsEqual(line, CLIENT_LIST_MODE_BEGIN)) { - client.cmd_list.Begin(false); + cmd_list.Begin(false); ret = CommandResult::OK; } else if (StringIsEqual(line, CLIENT_LIST_OK_MODE_BEGIN)) { - client.cmd_list.Begin(true); + cmd_list.Begin(true); ret = CommandResult::OK; } else if (IsUpperAlphaASCII(*line)) { /* no valid MPD command begins with an upper @@ -124,23 +123,22 @@ client_process_line(Client &client, char *line) noexcept HTTP request */ FormatWarning(client_domain, "[%u] malformed command \"%s\"", - client.num, line); + num, line); ret = CommandResult::CLOSE; } else { FormatDebug(client_domain, "[%u] process command \"%s\"", - client.num, line); - ret = command_process(client, 0, line); + num, line); + ret = command_process(*this, 0, line); FormatDebug(client_domain, "[%u] command returned %i", - client.num, int(ret)); + num, int(ret)); - if (ret == CommandResult::CLOSE || - client.IsExpired()) + if (ret == CommandResult::CLOSE || IsExpired()) return CommandResult::CLOSE; if (ret == CommandResult::OK) - command_success(client); + command_success(*this); } } diff --git a/src/client/ClientRead.cxx b/src/client/ClientRead.cxx index 5a0fb2d81..1c69b2830 100644 --- a/src/client/ClientRead.cxx +++ b/src/client/ClientRead.cxx @@ -43,7 +43,7 @@ Client::OnSocketInput(void *data, size_t length) noexcept /* terminate the string at the end of the line */ *end = 0; - CommandResult result = client_process_line(*this, p); + CommandResult result = ProcessLine(p); switch (result) { case CommandResult::OK: case CommandResult::IDLE: