protocol/Result: move current_command to class Response
This commit is contained in:
@@ -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
|
|||||||
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 {
|
|||||||
*/
|
*/
|
||||||
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 @@
|
|||||||
#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 *
|
|||||||
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,
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
? 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 @@
|
|||||||
#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 @@
|
|||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
|
|
||||||
extern const char *current_command;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
command_success(Client &client);
|
command_success(Client &client);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user