Added local address commands for inet/inet6.

This commit is contained in:
Jari Sundell
2025-10-13 12:09:20 +02:00
committed by GitHub
parent 2be730e4b3
commit 891a6ba69d
4 changed files with 14 additions and 100 deletions
+13 -8
View File
@@ -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); });
-87
View File
@@ -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;
-4
View File
@@ -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);
+1 -1
View File
@@ -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 ");