From 8e408725e98f1f5dc0cc9299c70d22fcacfdb3a6 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 14 Aug 2015 19:02:08 +0200 Subject: protocol/Result: move current_command to class Response --- src/client/Response.cxx | 3 +-- src/client/Response.hxx | 11 ++++++++++- src/command/AllCommands.cxx | 16 ++-------------- src/protocol/Result.cxx | 2 -- src/protocol/Result.hxx | 2 -- 5 files changed, 13 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/client/Response.cxx b/src/client/Response.cxx index 9af3c74ed..d443e66a5 100644 --- a/src/client/Response.cxx +++ b/src/client/Response.cxx @@ -20,7 +20,6 @@ #include "config.h" #include "Response.hxx" #include "Client.hxx" -#include "protocol/Result.hxx" #include "util/FormatString.hxx" #include @@ -66,7 +65,7 @@ void Response::FormatError(enum ack code, const char *fmt, ...) { Format("ACK [%i@%u] {%s} ", - (int)code, list_index, current_command); + (int)code, list_index, command); va_list args; va_start(args, fmt); diff --git a/src/client/Response.hxx b/src/client/Response.hxx index 044bdf307..5841e7f61 100644 --- a/src/client/Response.hxx +++ b/src/client/Response.hxx @@ -37,13 +37,22 @@ class Response { */ const unsigned list_index; + /** + * This command's name. Used to generate error messages. + */ + const char *command; + public: Response(Client &_client, unsigned _list_index) - :client(_client), list_index(_list_index) {} + :client(_client), list_index(_list_index), command("") {} Response(const Response &) = delete; Response &operator=(const Response &) = delete; + void SetCommand(const char *_command) { + command = _command; + } + bool Write(const void *data, size_t length); bool Write(const char *data); bool FormatV(const char *fmt, va_list args); diff --git a/src/command/AllCommands.cxx b/src/command/AllCommands.cxx index f98018f88..66d10ef1b 100644 --- a/src/command/AllCommands.cxx +++ b/src/command/AllCommands.cxx @@ -33,7 +33,6 @@ #include "OtherCommands.hxx" #include "Permission.hxx" #include "tag/TagType.h" -#include "protocol/Result.hxx" #include "Partition.hxx" #include "client/Client.hxx" #include "client/Response.hxx" @@ -343,8 +342,6 @@ static const struct command * command_checked_lookup(Response &r, unsigned permission, const char *cmd_name, Request args) { - current_command = ""; - const struct command *cmd = command_lookup(cmd_name); if (cmd == nullptr) { r.FormatError(ACK_ERROR_UNKNOWN, @@ -352,7 +349,7 @@ command_checked_lookup(Response &r, unsigned permission, return nullptr; } - current_command = cmd->cmd; + r.SetCommand(cmd->cmd); if (!command_check_request(cmd, r, permission, args)) return nullptr; @@ -372,18 +369,13 @@ command_process(Client &client, unsigned num, char *line) Tokenizer tokenizer(line); - const char *const cmd_name = current_command = - tokenizer.NextWord(error); + const char *const cmd_name = tokenizer.NextWord(error); if (cmd_name == nullptr) { - current_command = ""; - if (tokenizer.IsEnd()) r.FormatError(ACK_ERROR_UNKNOWN, "No command given"); else r.Error(ACK_ERROR_UNKNOWN, error.GetMessage()); - current_command = nullptr; - /* this client does not speak the MPD protocol; kick the connection */ return CommandResult::FINISH; @@ -397,7 +389,6 @@ command_process(Client &client, unsigned num, char *line) while (true) { if (args.size == COMMAND_ARGV_MAX) { r.Error(ACK_ERROR_ARG, "Too many arguments"); - current_command = nullptr; return CommandResult::ERROR; } @@ -407,7 +398,6 @@ command_process(Client &client, unsigned num, char *line) break; r.Error(ACK_ERROR_UNKNOWN, error.GetMessage()); - current_command = nullptr; return CommandResult::ERROR; } @@ -424,7 +414,5 @@ command_process(Client &client, unsigned num, char *line) ? cmd->handler(client, args, r) : CommandResult::ERROR; - current_command = nullptr; - return ret; } diff --git a/src/protocol/Result.cxx b/src/protocol/Result.cxx index 7d8dfb759..6a0da1665 100644 --- a/src/protocol/Result.cxx +++ b/src/protocol/Result.cxx @@ -21,8 +21,6 @@ #include "Result.hxx" #include "client/Client.hxx" -const char *current_command; - void command_success(Client &client) { diff --git a/src/protocol/Result.hxx b/src/protocol/Result.hxx index 7dcb969e1..d75bbe51b 100644 --- a/src/protocol/Result.hxx +++ b/src/protocol/Result.hxx @@ -24,8 +24,6 @@ class Client; -extern const char *current_command; - void command_success(Client &client); -- cgit v1.2.3