From 891a6ba69dda39ad69593908cc1cf3341e03ddb5 Mon Sep 17 00:00:00 2001 From: Jari Sundell Date: Mon, 13 Oct 2025 12:09:20 +0200 Subject: [PATCH] Added local address commands for inet/inet6. --- src/command_network.cc | 21 ++++++---- src/core/manager.cc | 87 ------------------------------------------ src/core/manager.h | 4 -- src/display/utils.cc | 2 +- 4 files changed, 14 insertions(+), 100 deletions(-) diff --git a/src/command_network.cc b/src/command_network.cc index e4a2b2da..dd084860 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -218,15 +218,20 @@ initialize_command_network() { CMD2_ANY_VALUE_V ("network.receive_buffer.size.set", [network_config](auto, auto& value) { return network_config->set_receive_buffer_size(value); }); CMD2_ANY_STRING ("network.tos.set", [](auto, auto& str) { return apply_tos(str); }); - CMD2_ANY ("network.bind_address", [network_config](auto, auto) { return network_config->bind_address_best_match_str(); }); - CMD2_ANY_STRING_V("network.bind_address.set", [](auto, auto& str) { return control->core()->set_bind_address(str); }); - CMD2_ANY ("network.bind_address.ipv4", [network_config](auto, auto) { return network_config->bind_inet_address_str(); }); - CMD2_ANY_STRING_V("network.bind_address.ipv4.set", [](auto, auto& str) { return control->core()->set_bind_inet_address(str); }); - CMD2_ANY ("network.bind_address.ipv6", [network_config](auto, auto) { return network_config->bind_inet6_address_str(); }); - CMD2_ANY_STRING_V("network.bind_address.ipv6.set", [](auto, auto& str) { return control->core()->set_bind_inet6_address(str); }); + CMD2_ANY ("network.bind_address", [network_config](auto, auto) { return network_config->bind_address_best_match_str(); }); + CMD2_ANY_STRING_V("network.bind_address.set", [network_config](auto, auto& str) { return network_config->set_bind_address_str(str); }); + CMD2_ANY ("network.bind_address.ipv4", [network_config](auto, auto) { return network_config->bind_inet_address_str(); }); + CMD2_ANY_STRING_V("network.bind_address.ipv4.set", [network_config](auto, auto& str) { return network_config->set_bind_inet_address_str(str); }); + CMD2_ANY ("network.bind_address.ipv6", [network_config](auto, auto) { return network_config->bind_inet6_address_str(); }); + CMD2_ANY_STRING_V("network.bind_address.ipv6.set", [network_config](auto, auto& str) { return network_config->set_bind_inet6_address_str(str); }); + + CMD2_ANY ("network.local_address", [network_config](auto, auto) { return network_config->local_address_best_match_str(); }); + CMD2_ANY_STRING_V("network.local_address.set", [network_config](auto, auto& str) { return network_config->set_local_address_str(str); }); + CMD2_ANY ("network.local_address.ipv4", [network_config](auto, auto) { return network_config->local_inet_address_str(); }); + CMD2_ANY_STRING_V("network.local_address.ipv4.set", [network_config](auto, auto& str) { return network_config->set_local_inet_address_str(str); }); + CMD2_ANY ("network.local_address.ipv6", [network_config](auto, auto) { return network_config->local_inet6_address_str(); }); + CMD2_ANY_STRING_V("network.local_address.ipv6.set", [network_config](auto, auto& str) { return network_config->set_local_inet6_address_str(str); }); - CMD2_ANY ("network.local_address", [network_config](auto, auto) { return network_config->local_address_str(); }); - CMD2_ANY_STRING_V("network.local_address.set", [](auto, auto& str) { return control->core()->set_local_address(str); }); CMD2_ANY ("network.proxy_address", [network_config](auto, auto) { return network_config->proxy_address_str(); }); CMD2_ANY_STRING_V("network.proxy_address.set", [](auto, auto& str) { return control->core()->set_proxy_address(str); }); diff --git a/src/core/manager.cc b/src/core/manager.cc index ff968f58..59cfad19 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -187,93 +187,6 @@ Manager::listen_open() { throw torrent::input_error("Could not open/bind port for listening: " + std::string(std::strerror(errno))); } -void -Manager::set_bind_address(const std::string& addr) { - int err; - rak::address_info* ai; - - if ((err = rak::address_info::get_address_info(addr.c_str(), PF_INET, SOCK_STREAM, &ai)) != 0 && - (err = rak::address_info::get_address_info(addr.c_str(), PF_INET6, SOCK_STREAM, &ai)) != 0) - throw torrent::input_error("Could not set bind address: " + std::string(rak::address_info::strerror(err)) + "."); - - try { - - if (torrent::connection_manager()->is_listen_open()) { - torrent::connection_manager()->listen_close(); - torrent::config::network_config()->set_bind_address(ai->c_addrinfo()->ai_addr); - - listen_open(); - - } else { - torrent::config::network_config()->set_bind_address(ai->c_addrinfo()->ai_addr); - } - - rak::address_info::free_address_info(ai); - - } catch (torrent::input_error& e) { - rak::address_info::free_address_info(ai); - throw e; - } -} - -void -Manager::set_bind_inet_address(const std::string& addr) { - int err; - rak::address_info* ai; - - if ((err = rak::address_info::get_address_info(addr.c_str(), PF_INET, SOCK_STREAM, &ai)) != 0) - throw torrent::input_error("Could not set bind inet6 address: " + std::string(rak::address_info::strerror(err)) + "."); - - try { - torrent::config::network_config()->set_bind_inet_address(ai->c_addrinfo()->ai_addr); - - rak::address_info::free_address_info(ai); - - } catch (torrent::input_error& e) { - rak::address_info::free_address_info(ai); - throw e; - } -} - -void -Manager::set_bind_inet6_address(const std::string& addr) { - int err; - rak::address_info* ai; - - if ((err = rak::address_info::get_address_info(addr.c_str(), PF_INET6, SOCK_STREAM, &ai)) != 0) - throw torrent::input_error("Could not set bind inet6 address: " + std::string(rak::address_info::strerror(err)) + "."); - - try { - torrent::config::network_config()->set_bind_inet6_address(ai->c_addrinfo()->ai_addr); - - rak::address_info::free_address_info(ai); - - } catch (torrent::input_error& e) { - rak::address_info::free_address_info(ai); - throw e; - } -} - -void -Manager::set_local_address(const std::string& addr) { - int err; - rak::address_info* ai; - - if ((err = rak::address_info::get_address_info(addr.c_str(), PF_INET, SOCK_STREAM, &ai)) != 0 && - (err = rak::address_info::get_address_info(addr.c_str(), PF_INET6, SOCK_STREAM, &ai)) != 0) - throw torrent::input_error("Could not set local address: " + std::string(rak::address_info::strerror(err)) + "."); - - try { - torrent::config::network_config()->set_local_address(ai->c_addrinfo()->ai_addr); - - rak::address_info::free_address_info(ai); - - } catch (torrent::input_error& e) { - rak::address_info::free_address_info(ai); - throw e; - } -} - void Manager::set_proxy_address(const std::string& addr) { int port; diff --git a/src/core/manager.h b/src/core/manager.h index ea3d2947..89c2bcdc 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -61,10 +61,6 @@ public: void listen_open(); - void set_bind_address(const std::string& addr); - void set_bind_inet_address(const std::string& addr); - void set_bind_inet6_address(const std::string& addr); - void set_local_address(const std::string& addr); void set_proxy_address(const std::string& addr); void shutdown(bool force); diff --git a/src/display/utils.cc b/src/display/utils.cc index ecb5eab9..fa177060 100644 --- a/src/display/utils.cc +++ b/src/display/utils.cc @@ -377,7 +377,7 @@ print_status_info(char* first, char* last) { first = print_buffer(first, last, " [Port: %i]", (unsigned int)torrent::config::network_config()->listen_port()); - auto local_address = torrent::config::network_config()->local_address(); + auto local_address = torrent::config::network_config()->local_address_best_match(); if (!torrent::sa_is_any(local_address.get())) { first = print_buffer(first, last, " [Local ");