Commit 8e408725 authored by Max Kellermann's avatar Max Kellermann

protocol/Result: move current_command to class Response

parent d0537973
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "config.h" #include "config.h"
#include "Response.hxx" #include "Response.hxx"
#include "Client.hxx" #include "Client.hxx"
#include "protocol/Result.hxx"
#include "util/FormatString.hxx" #include "util/FormatString.hxx"
#include <string.h> #include <string.h>
...@@ -66,7 +65,7 @@ void ...@@ -66,7 +65,7 @@ void
Response::FormatError(enum ack code, const char *fmt, ...) Response::FormatError(enum ack code, const char *fmt, ...)
{ {
Format("ACK [%i@%u] {%s} ", Format("ACK [%i@%u] {%s} ",
(int)code, list_index, current_command); (int)code, list_index, command);
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
......
...@@ -37,13 +37,22 @@ class Response { ...@@ -37,13 +37,22 @@ class Response {
*/ */
const unsigned list_index; const unsigned list_index;
/**
* This command's name. Used to generate error messages.
*/
const char *command;
public: public:
Response(Client &_client, unsigned _list_index) Response(Client &_client, unsigned _list_index)
:client(_client), list_index(_list_index) {} :client(_client), list_index(_list_index), command("") {}
Response(const Response &) = delete; Response(const Response &) = delete;
Response &operator=(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 void *data, size_t length);
bool Write(const char *data); bool Write(const char *data);
bool FormatV(const char *fmt, va_list args); bool FormatV(const char *fmt, va_list args);
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include "OtherCommands.hxx" #include "OtherCommands.hxx"
#include "Permission.hxx" #include "Permission.hxx"
#include "tag/TagType.h" #include "tag/TagType.h"
#include "protocol/Result.hxx"
#include "Partition.hxx" #include "Partition.hxx"
#include "client/Client.hxx" #include "client/Client.hxx"
#include "client/Response.hxx" #include "client/Response.hxx"
...@@ -343,8 +342,6 @@ static const struct command * ...@@ -343,8 +342,6 @@ static const struct command *
command_checked_lookup(Response &r, unsigned permission, command_checked_lookup(Response &r, unsigned permission,
const char *cmd_name, Request args) const char *cmd_name, Request args)
{ {
current_command = "";
const struct command *cmd = command_lookup(cmd_name); const struct command *cmd = command_lookup(cmd_name);
if (cmd == nullptr) { if (cmd == nullptr) {
r.FormatError(ACK_ERROR_UNKNOWN, r.FormatError(ACK_ERROR_UNKNOWN,
...@@ -352,7 +349,7 @@ command_checked_lookup(Response &r, unsigned permission, ...@@ -352,7 +349,7 @@ command_checked_lookup(Response &r, unsigned permission,
return nullptr; return nullptr;
} }
current_command = cmd->cmd; r.SetCommand(cmd->cmd);
if (!command_check_request(cmd, r, permission, args)) if (!command_check_request(cmd, r, permission, args))
return nullptr; return nullptr;
...@@ -372,18 +369,13 @@ command_process(Client &client, unsigned num, char *line) ...@@ -372,18 +369,13 @@ command_process(Client &client, unsigned num, char *line)
Tokenizer tokenizer(line); Tokenizer tokenizer(line);
const char *const cmd_name = current_command = const char *const cmd_name = tokenizer.NextWord(error);
tokenizer.NextWord(error);
if (cmd_name == nullptr) { if (cmd_name == nullptr) {
current_command = "";
if (tokenizer.IsEnd()) if (tokenizer.IsEnd())
r.FormatError(ACK_ERROR_UNKNOWN, "No command given"); r.FormatError(ACK_ERROR_UNKNOWN, "No command given");
else else
r.Error(ACK_ERROR_UNKNOWN, error.GetMessage()); r.Error(ACK_ERROR_UNKNOWN, error.GetMessage());
current_command = nullptr;
/* this client does not speak the MPD protocol; kick /* this client does not speak the MPD protocol; kick
the connection */ the connection */
return CommandResult::FINISH; return CommandResult::FINISH;
...@@ -397,7 +389,6 @@ command_process(Client &client, unsigned num, char *line) ...@@ -397,7 +389,6 @@ command_process(Client &client, unsigned num, char *line)
while (true) { while (true) {
if (args.size == COMMAND_ARGV_MAX) { if (args.size == COMMAND_ARGV_MAX) {
r.Error(ACK_ERROR_ARG, "Too many arguments"); r.Error(ACK_ERROR_ARG, "Too many arguments");
current_command = nullptr;
return CommandResult::ERROR; return CommandResult::ERROR;
} }
...@@ -407,7 +398,6 @@ command_process(Client &client, unsigned num, char *line) ...@@ -407,7 +398,6 @@ command_process(Client &client, unsigned num, char *line)
break; break;
r.Error(ACK_ERROR_UNKNOWN, error.GetMessage()); r.Error(ACK_ERROR_UNKNOWN, error.GetMessage());
current_command = nullptr;
return CommandResult::ERROR; return CommandResult::ERROR;
} }
...@@ -424,7 +414,5 @@ command_process(Client &client, unsigned num, char *line) ...@@ -424,7 +414,5 @@ command_process(Client &client, unsigned num, char *line)
? cmd->handler(client, args, r) ? cmd->handler(client, args, r)
: CommandResult::ERROR; : CommandResult::ERROR;
current_command = nullptr;
return ret; return ret;
} }
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#include "Result.hxx" #include "Result.hxx"
#include "client/Client.hxx" #include "client/Client.hxx"
const char *current_command;
void void
command_success(Client &client) command_success(Client &client)
{ {
......
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
class Client; class Client;
extern const char *current_command;
void void
command_success(Client &client); command_success(Client &client);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment