Browse Source

Added 'network.bind_address.ipv{4,6}.set' commands.

master
Jari Sundell 1 day ago
committed by GitHub
parent
commit
bf53700f97
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 7
      src/command_network.cc
  2. 38
      src/core/manager.cc
  3. 2
      src/core/manager.h
  4. 2
      src/display/utils.cc
  5. 4
      src/main.cc

7
src/command_network.cc

@ -214,8 +214,13 @@ initialize_command_network() {
CMD2_ANY_VALUE_V ("network.receive_buffer.size.set", std::bind(&torrent::net::NetworkConfig::set_receive_buffer_size, network_config, std::placeholders::_2));
CMD2_ANY_STRING ("network.tos.set", std::bind(&apply_tos, std::placeholders::_2));
CMD2_ANY ("network.bind_address", std::bind(&torrent::net::NetworkConfig::bind_address_str, network_config));
CMD2_ANY ("network.bind_address", std::bind(&torrent::net::NetworkConfig::bind_address_best_match_str, network_config));
CMD2_ANY_STRING_V("network.bind_address.set", std::bind(&core::Manager::set_bind_address, control->core(), std::placeholders::_2));
CMD2_ANY ("network.bind_address.ipv4", std::bind(&torrent::net::NetworkConfig::bind_inet_address_str, network_config));
CMD2_ANY_STRING_V("network.bind_address.ipv4.set", std::bind(&core::Manager::set_bind_inet_address, control->core(), std::placeholders::_2));
CMD2_ANY ("network.bind_address.ipv6", std::bind(&torrent::net::NetworkConfig::bind_inet6_address_str, network_config));
CMD2_ANY_STRING_V("network.bind_address.ipv6.set", std::bind(&core::Manager::set_bind_inet6_address, control->core(), std::placeholders::_2));
CMD2_ANY ("network.local_address", std::bind(&torrent::net::NetworkConfig::local_address_str, network_config));
CMD2_ANY_STRING_V("network.local_address.set", std::bind(&core::Manager::set_local_address, control->core(), std::placeholders::_2));
CMD2_ANY ("network.proxy_address", std::bind(&torrent::net::NetworkConfig::proxy_address_str, network_config));

38
src/core/manager.cc

@ -216,6 +216,44 @@ Manager::set_bind_address(const std::string& addr) {
}
}
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;

2
src/core/manager.h

@ -62,6 +62,8 @@ 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);

2
src/display/utils.cc

@ -388,7 +388,7 @@ print_status_info(char* first, char* last) {
if (first > last)
throw torrent::internal_error("print_status_info(...) wrote past end of the buffer.");
auto bind_address = torrent::config::network_config()->bind_address();
auto bind_address = torrent::config::network_config()->bind_address_best_match();
if (!torrent::sa_is_any(bind_address.get())) {
first = print_buffer(first, last, " [Bind ");

4
src/main.cc

@ -497,6 +497,8 @@ main(int argc, char** argv) {
lt_log_print_dump(torrent::LOG_CRITICAL, e.backtrace().c_str(), e.backtrace().size(),
"Caught internal_error: '%s'.", e.what());
torrent::log_cleanup();
return -1;
} catch (std::exception& e) {
@ -505,6 +507,8 @@ main(int argc, char** argv) {
std::cout << "rtorrent: caught" << typeid(e).name() << " : " << e.what() << std::endl;
lt_log_print(torrent::LOG_CRITICAL, "Caught exception: '%s'.", e.what());
torrent::log_cleanup();
return -1;
}

Loading…
Cancel
Save