mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-18 23:26:17 +00:00
Added local address commands for inet/inet6.
This commit is contained in:
+13
-8
@@ -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_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_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 ("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_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 ("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_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 ("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_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 ("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); });
|
CMD2_ANY_STRING_V("network.proxy_address.set", [](auto, auto& str) { return control->core()->set_proxy_address(str); });
|
||||||
|
|
||||||
|
|||||||
@@ -187,93 +187,6 @@ Manager::listen_open() {
|
|||||||
throw torrent::input_error("Could not open/bind port for listening: " + std::string(std::strerror(errno)));
|
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
|
void
|
||||||
Manager::set_proxy_address(const std::string& addr) {
|
Manager::set_proxy_address(const std::string& addr) {
|
||||||
int port;
|
int port;
|
||||||
|
|||||||
@@ -61,10 +61,6 @@ public:
|
|||||||
|
|
||||||
void listen_open();
|
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 set_proxy_address(const std::string& addr);
|
||||||
|
|
||||||
void shutdown(bool force);
|
void shutdown(bool force);
|
||||||
|
|||||||
@@ -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());
|
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())) {
|
if (!torrent::sa_is_any(local_address.get())) {
|
||||||
first = print_buffer(first, last, " [Local ");
|
first = print_buffer(first, last, " [Local ");
|
||||||
|
|||||||
Reference in New Issue
Block a user