From f6b3ad0efd558df6dd7722d8f2afff6fa4348754 Mon Sep 17 00:00:00 2001 From: Jari Sundell Date: Wed, 15 Jul 2026 12:40:13 +0200 Subject: [PATCH] Minor cleanup of pex and other commands. --- src/command_local.cc | 4 ---- src/command_network.cc | 9 +++++--- src/core/download_factory.cc | 3 ++- src/rpc/rpc_manager.cc | 43 +++++------------------------------- src/rpc/rpc_manager.h | 17 ++++++++++---- 5 files changed, 27 insertions(+), 49 deletions(-) diff --git a/src/command_local.cc b/src/command_local.cc index c2bba678..053d69ec 100644 --- a/src/command_local.cc +++ b/src/command_local.cc @@ -190,10 +190,6 @@ initialize_command_local() { core::DownloadList* dList = control->core()->download_list(); torrent::FileManager* fileManager = torrent::file_manager(); - if (rpc::call_command_value("method.use_deprecated") == 1) { - CMD_ANY_LIST ("file.append", std::bind(&cmd_file_append, std::placeholders::_2)); - } - CMD_ANY ("system.hostname", std::bind(&system_hostname)); CMD_ANY ("system.pid", std::bind(&getpid)); diff --git a/src/command_network.cc b/src/command_network.cc index 9d37df2f..a8c6b027 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -325,7 +325,8 @@ initialize_command_network() { CMD_ANY ("network.listen.backlog", [](auto, auto) { return torrent::runtime::network_config()->listen_backlog(); }); CMD_ANY_VALUE_V ("network.listen.backlog.set", [](auto, auto& value) { return torrent::runtime::network_config()->set_listen_backlog(value); }); - CMD_VAR_BOOL ("protocol.pex", true); + CMD_ANY ("protocol.pex", [](auto, auto) { return torrent::runtime::client_config()->is_pex_enabled(); }); + CMD_ANY_VALUE_V ("protocol.pex.set", [](auto, auto& value) { return torrent::runtime::client_config()->set_pex_enabled(value); }); CMD_ANY_LIST ("protocol.encryption", [](auto, auto) { return get_encryption(); }); CMD_ANY_LIST ("protocol.encryption.set", [](auto, auto& args) { return apply_encryption(args); }); @@ -401,8 +402,10 @@ initialize_command_network() { CMD_ANY ("network.xmlrpc.size_limit", [](auto, auto) { return rpc::rpc.size_limit(); }); CMD_ANY_VALUE_V ("network.xmlrpc.size_limit.set", [](auto, auto& arg) { return rpc::rpc.set_size_limit(arg); }); - CMD_VAR_BOOL ("network.rpc.use_xmlrpc", true); - CMD_VAR_BOOL ("network.rpc.use_jsonrpc", true); + CMD_ANY ("network.rpc.use_xmlrpc", [](auto, auto) { return rpc::rpc.use_xmlrpc(); }); + CMD_ANY_VALUE_V ("network.rpc.use_xmlrpc.set", [](auto, auto& arg) { return rpc::rpc.set_use_xmlrpc(arg); }); + CMD_ANY ("network.rpc.use_jsonrpc", [](auto, auto) { return rpc::rpc.use_jsonrpc(); }); + CMD_ANY_VALUE_V ("network.rpc.use_jsonrpc.set", [](auto, auto& arg) { return rpc::rpc.set_use_jsonrpc(arg); }); CMD_ANY ("network.block.ipv4", [nw_config](auto, auto) { return nw_config->is_block_ipv4(); }); CMD_ANY_VALUE_V ("network.block.ipv4.set", [nw_config](auto, auto& value) { return nw_config->set_block_ipv4(value); }); diff --git a/src/core/download_factory.cc b/src/core/download_factory.cc index cb082bdc..2d030042 100644 --- a/src/core/download_factory.cc +++ b/src/core/download_factory.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include "control.h" @@ -271,7 +272,7 @@ DownloadFactory::receive_success() { if (!m_session && m_variables["tied_to_file"].as_value()) rpc::call_command("d.tied_to_file.set", m_uri.empty() ? m_variables["tied_file"] : m_uri, rpc::make_target(download)); - rpc::call_command("d.peer_exchange.set", rpc::call_command_value("protocol.pex"), rpc::make_target(download)); + rpc::call_command("d.peer_exchange.set", torrent::runtime::client_config()->is_pex_enabled(), rpc::make_target(download)); torrent::resume_load_addresses(*download->download(), resumeObject); torrent::resume_load_file_priorities(*download->download(), resumeObject); diff --git a/src/rpc/rpc_manager.cc b/src/rpc/rpc_manager.cc index 72516511..6e9cd5c5 100644 --- a/src/rpc/rpc_manager.cc +++ b/src/rpc/rpc_manager.cc @@ -113,25 +113,20 @@ bool RpcManager::process(RPCType type, const char* in_buffer, uint32_t length, slot_response_callback callback) { switch (type) { case RPCType::XML: - // TODO: 'network.rpc.use_xmlrpc' should be a bool in RpcManager, not a command variable. - if (m_xmlrpc.is_valid() && rpc::call_command_value("network.rpc.use_xmlrpc")) { - return m_xmlrpc.process(in_buffer, length, callback); - - } else { + if (!m_xmlrpc.is_valid() || !m_use_xmlrpc) { const std::string response = "faultCode-501faultStringXML-RPC not supported"; return callback(response.c_str(), response.size()); } - break; + + return m_xmlrpc.process(in_buffer, length, callback); case RPCType::JSON: - if (rpc::call_command_value("network.rpc.use_jsonrpc")) { - return m_jsonrpc.process(in_buffer, length, callback); - - } else { + if (!m_use_jsonrpc) { const std::string response = "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32601,\"message\":\"JSON-RPC not supported\"},\"id\":null}"; return callback(response.c_str(), response.size()); } - break; + + return m_jsonrpc.process(in_buffer, length, callback); default: throw torrent::input_error("invalid parameters: unknown RPC type"); @@ -172,32 +167,6 @@ RpcManager::cleanup() { m_jsonrpc.cleanup(); } -bool -RpcManager::is_type_enabled(RPCType type) const { - switch (type) { - case RPCType::XML: - return m_is_xmlrpc_enabled; - case RPCType::JSON: - return m_is_jsonrpc_enabled; - default: - throw torrent::input_error("invalid parameters: unknown RPC type"); - } -} - -void -RpcManager::set_type_enabled(RPCType type, bool enabled) { - switch (type) { - case RPCType::XML: - m_is_xmlrpc_enabled = enabled; - break; - case RPCType::JSON: - m_is_jsonrpc_enabled = enabled; - break; - default: - throw torrent::input_error("invalid parameters: unknown RPC type"); - } -} - void RpcManager::insert_command(const char* name, const char* parm, const char* doc) { m_xmlrpc.insert_command(name, parm, doc); diff --git a/src/rpc/rpc_manager.h b/src/rpc/rpc_manager.h index 425ff061..beb99647 100644 --- a/src/rpc/rpc_manager.h +++ b/src/rpc/rpc_manager.h @@ -67,8 +67,11 @@ public: int dialect() { return m_xmlrpc.dialect(); } void set_dialect(int dialect) { m_xmlrpc.set_dialect(dialect); } - bool is_type_enabled(RPCType type) const; - void set_type_enabled(RPCType type, bool enabled); + bool use_xmlrpc() const; + void set_use_xmlrpc(bool v); + + bool use_jsonrpc() const; + void set_use_jsonrpc(bool v); bool process(RPCType type, const char* in_buffer, uint32_t length, slot_response_callback callback); bool process_untrusted(RPCType type, const char* in_buffer, uint32_t length, slot_response_callback callback); @@ -102,8 +105,9 @@ private: JsonRpc m_jsonrpc; bool m_handlers_initialized{}; - bool m_is_jsonrpc_enabled{true}; - bool m_is_xmlrpc_enabled{true}; + + bool m_use_jsonrpc{true}; + bool m_use_xmlrpc{true}; std::atomic m_scgi_allow_compression{true}; std::atomic m_scgi_min_compress_size{1000}; @@ -116,6 +120,11 @@ private: extern RpcManager rpc; +inline bool RpcManager::use_xmlrpc() const { return m_use_xmlrpc; } +inline void RpcManager::set_use_xmlrpc(bool v) { m_use_xmlrpc = v; } +inline bool RpcManager::use_jsonrpc() const { return m_use_jsonrpc; } +inline void RpcManager::set_use_jsonrpc(bool v) { m_use_jsonrpc = v; } + } // namespace rpc #endif