From 677f8f45c841d308df7c77b0b23ce4fd7a8a7a16 Mon Sep 17 00:00:00 2001 From: Jari Sundell Date: Sat, 13 Sep 2025 10:51:04 +0200 Subject: [PATCH] Improved listen/dht port handling and added 'dht.override_port.set' command. --- src/command_network.cc | 4 ++-- src/command_tracker.cc | 20 +++++++++++++------- src/control.cc | 2 -- src/core/dht_manager.cc | 19 +------------------ src/core/dht_manager.h | 5 ----- src/core/manager.cc | 2 +- src/display/utils.cc | 2 +- src/main.cc | 1 - 8 files changed, 18 insertions(+), 37 deletions(-) diff --git a/src/command_network.cc b/src/command_network.cc index 5582dea5..e4d5fdd5 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -177,8 +177,8 @@ initialize_command_network() { CMD2_VAR_BOOL ("network.port_random", true); CMD2_VAR_STRING ("network.port_range", "6881-6999"); - CMD2_ANY ("network.listen.port", std::bind(&torrent::ConnectionManager::listen_port, cm)); - CMD2_ANY ("network.listen.backlog", std::bind(&torrent::ConnectionManager::listen_backlog, cm)); + CMD2_ANY ("network.listen.port", std::bind(&torrent::net::NetworkConfig::listen_port, network_config)); + CMD2_ANY ("network.listen.backlog", std::bind(&torrent::net::NetworkConfig::listen_backlog, network_config)); CMD2_ANY_VALUE_V ("network.listen.backlog.set", std::bind(&torrent::ConnectionManager::set_listen_backlog, cm, std::placeholders::_2)); CMD2_VAR_BOOL ("protocol.pex", true); diff --git a/src/command_tracker.cc b/src/command_tracker.cc index 0d6b621f..8aa99d69 100644 --- a/src/command_tracker.cc +++ b/src/command_tracker.cc @@ -3,8 +3,7 @@ #include #include #include -#include -#include +#include #include #include #include @@ -142,11 +141,18 @@ initialize_command_tracker() { CMD2_VAR_VALUE ("trackers.numwant", -1); CMD2_VAR_BOOL ("trackers.use_udp", true); + auto dht_manager = control->dht_manager(); + CMD2_ANY_STRING_V ("dht.mode.set", std::bind(&core::DhtManager::set_mode, control->dht_manager(), std::placeholders::_2)); - // TODO: This should query DhtController. - CMD2_VAR_VALUE ("dht.port", int64_t(6881)); + CMD2_ANY ("dht.port", std::bind(&torrent::tracker::DhtController::port, torrent::dht_controller())); + CMD2_ANY_VALUE_V ("dht.port.set", [](auto, auto) { + lt_log_print(torrent::LOG_DHT_ERROR, "dht.port.set is no longer supported, use dht.override_port.set", 0); + }); + CMD2_ANY ("dht.override_port", std::bind(&torrent::net::NetworkConfig::override_dht_port, torrent::config::network_config())); + CMD2_ANY_VALUE_V ("dht.override_port.set", std::bind(&torrent::net::NetworkConfig::set_override_dht_port, torrent::config::network_config(), std::placeholders::_2)); + CMD2_ANY_STRING ("dht.add_node", std::bind(&apply_dht_add_node, std::placeholders::_2)); - CMD2_ANY ("dht.statistics", std::bind(&core::DhtManager::dht_statistics, control->dht_manager())); - CMD2_ANY ("dht.throttle.name", std::bind(&core::DhtManager::throttle_name, control->dht_manager())); - CMD2_ANY_STRING_V ("dht.throttle.name.set", std::bind(&core::DhtManager::set_throttle_name, control->dht_manager(), std::placeholders::_2)); + CMD2_ANY ("dht.statistics", std::bind(&core::DhtManager::dht_statistics, dht_manager)); + CMD2_ANY ("dht.throttle.name", std::bind(&core::DhtManager::throttle_name, dht_manager)); + CMD2_ANY_STRING_V ("dht.throttle.name.set", std::bind(&core::DhtManager::set_throttle_name, dht_manager, std::placeholders::_2)); } diff --git a/src/control.cc b/src/control.cc index f5c31b5c..3547f4b2 100644 --- a/src/control.cc +++ b/src/control.cc @@ -69,8 +69,6 @@ Control::initialize() { m_core->download_store()->enable(rpc::call_command_value("session.use_lock")); m_core->set_hashing_view(*m_viewManager->find_throw("hashing")); - m_dhtManager->set_port(torrent::connection_manager()->listen_port()); - m_ui->init(this); if(!display::Canvas::daemon()) diff --git a/src/core/dht_manager.cc b/src/core/dht_manager.cc index ec38a800..80a29868 100644 --- a/src/core/dht_manager.cc +++ b/src/core/dht_manager.cc @@ -33,16 +33,6 @@ DhtManager::~DhtManager() { torrent::this_thread::scheduler()->erase(&m_stop_timeout); } -void -DhtManager::set_port(uint16_t port) { - if (torrent::dht_controller()->is_active()) { - LT_LOG_ERROR("cannot change port while DHT is active", 0); - throw torrent::input_error("cannot change port while DHT is active"); - } - - m_port = port; -} - void DhtManager::load_dht_cache() { if (m_start == dht_disable || !control->core()->download_store()->is_enabled()) { @@ -95,14 +85,7 @@ DhtManager::start_dht() { torrent::dht_controller()->set_upload_throttle(throttles.first); torrent::dht_controller()->set_download_throttle(throttles.second); - if (m_port <= 0) { - LT_LOG("server start skipped, port not set", 0); - return; - } - - LT_LOG("starting server : port=%" PRIu16, m_port); - - if (!torrent::dht_controller()->start(m_port)) { + if (!torrent::dht_controller()->start()) { m_start = dht_off; return; } diff --git a/src/core/dht_manager.h b/src/core/dht_manager.h index 32edb8e0..62ad0acd 100644 --- a/src/core/dht_manager.h +++ b/src/core/dht_manager.h @@ -10,9 +10,6 @@ class DhtManager { public: ~DhtManager(); - uint16_t port() const { return m_port; } - void set_port(uint16_t port); - void load_dht_cache(); void save_dht_cache(); torrent::Object dht_statistics(); @@ -49,9 +46,7 @@ private: torrent::utils::SchedulerEntry m_stop_timeout; bool m_warned{}; - int m_start{dht_off}; - uint16_t m_port{0}; std::string m_throttleName; }; diff --git a/src/core/manager.cc b/src/core/manager.cc index f294979a..81ea6f9b 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -196,7 +196,7 @@ Manager::set_bind_address(const std::string& addr) { try { - if (torrent::connection_manager()->listen_port() != 0) { + if (torrent::connection_manager()->is_listen_open()) { torrent::connection_manager()->listen_close(); torrent::config::network_config()->set_bind_address(ai->address()->c_sockaddr()); diff --git a/src/display/utils.cc b/src/display/utils.cc index 179bf04f..7547eb7c 100644 --- a/src/display/utils.cc +++ b/src/display/utils.cc @@ -384,7 +384,7 @@ print_status_info(char* first, char* last) { first = print_buffer(first, last, " KB]"); - first = print_buffer(first, last, " [Port: %i]", (unsigned int)torrent::connection_manager()->listen_port()); + first = print_buffer(first, last, " [Port: %i]", (unsigned int)torrent::config::network_config()->listen_port()); auto local_address = torrent::config::network_config()->local_address(); diff --git a/src/main.cc b/src/main.cc index 80bca3a6..6c7ec6d5 100644 --- a/src/main.cc +++ b/src/main.cc @@ -392,7 +392,6 @@ main(int argc, char** argv) { CMD2_REDIRECT ("port_range", "network.port_range.set"); CMD2_REDIRECT_GENERIC("dht", "dht.mode.set"); - CMD2_REDIRECT_GENERIC("dht_port", "dht.port.set"); CMD2_REDIRECT ("port_random", "network.port_random.set"); CMD2_REDIRECT ("proxy_address", "network.proxy_address.set");