diff --git a/src/command_network.cc b/src/command_network.cc index 8d3168fe..5582dea5 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -165,8 +166,9 @@ apply_xmlrpc_dialect(const std::string& arg) { void initialize_command_network() { auto cm = torrent::connection_manager(); - auto fileManager = torrent::file_manager(); + auto file_manager = torrent::file_manager(); auto http_stack = torrent::net_thread::http_stack(); + auto network_config = torrent::config::network_config(); CMD2_ANY_STRING ("encoding.add", std::bind(&apply_encoding_list, std::placeholders::_2)); @@ -212,16 +214,16 @@ initialize_command_network() { CMD2_ANY_VALUE_V ("network.receive_buffer.size.set", std::bind(&torrent::ConnectionManager::set_receive_buffer_size, cm, std::placeholders::_2)); CMD2_ANY_STRING ("network.tos.set", std::bind(&apply_tos, std::placeholders::_2)); - CMD2_ANY ("network.bind_address", std::bind(&core::Manager::bind_address, control->core())); + CMD2_ANY ("network.bind_address", std::bind(&torrent::net::NetworkConfig::bind_address_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.local_address", std::bind(&core::Manager::local_address, control->core())); + 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(&core::Manager::proxy_address, control->core())); + CMD2_ANY ("network.proxy_address", std::bind(&torrent::net::NetworkConfig::proxy_address_str, network_config)); CMD2_ANY_STRING_V("network.proxy_address.set", std::bind(&core::Manager::set_proxy_address, control->core(), std::placeholders::_2)); - CMD2_ANY ("network.open_files", std::bind(&torrent::FileManager::open_files, fileManager)); - CMD2_ANY ("network.max_open_files", std::bind(&torrent::FileManager::max_open_files, fileManager)); - CMD2_ANY_VALUE_V ("network.max_open_files.set", std::bind(&torrent::FileManager::set_max_open_files, fileManager, std::placeholders::_2)); + CMD2_ANY ("network.open_files", std::bind(&torrent::FileManager::open_files, file_manager)); + CMD2_ANY ("network.max_open_files", std::bind(&torrent::FileManager::max_open_files, file_manager)); + CMD2_ANY_VALUE_V ("network.max_open_files.set", std::bind(&torrent::FileManager::set_max_open_files, file_manager, std::placeholders::_2)); CMD2_ANY ("network.total_handshakes", std::bind(&torrent::total_handshakes)); CMD2_ANY ("network.open_sockets", std::bind(&torrent::ConnectionManager::size, cm)); CMD2_ANY ("network.max_open_sockets", std::bind(&torrent::ConnectionManager::max_size, cm)); diff --git a/src/core/manager.cc b/src/core/manager.cc index 75041f22..f294979a 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include "rpc/parse_commands.h" @@ -183,11 +185,6 @@ Manager::listen_open() { throw torrent::input_error("Could not open/bind port for listening: " + std::string(rak::error_number::current().c_str())); } -std::string -Manager::bind_address() const { - return rak::socket_address::cast_from(torrent::connection_manager()->bind_address())->address_str(); -} - void Manager::set_bind_address(const std::string& addr) { int err; @@ -201,18 +198,14 @@ Manager::set_bind_address(const std::string& addr) { if (torrent::connection_manager()->listen_port() != 0) { torrent::connection_manager()->listen_close(); - torrent::connection_manager()->set_bind_address(ai->address()->c_sockaddr()); + torrent::config::network_config()->set_bind_address(ai->address()->c_sockaddr()); + listen_open(); } else { - torrent::connection_manager()->set_bind_address(ai->address()->c_sockaddr()); + torrent::config::network_config()->set_bind_address(ai->address()->c_sockaddr()); } - if (ai->address()->is_address_any()) - torrent::net_thread::http_stack()->set_bind_address(std::string()); - else - torrent::net_thread::http_stack()->set_bind_address(ai->address()->address_str()); - rak::address_info::free_address_info(ai); } catch (torrent::input_error& e) { @@ -221,11 +214,6 @@ Manager::set_bind_address(const std::string& addr) { } } -std::string -Manager::local_address() const { - return rak::socket_address::cast_from(torrent::connection_manager()->local_address())->address_str(); -} - void Manager::set_local_address(const std::string& addr) { int err; @@ -236,8 +224,8 @@ Manager::set_local_address(const std::string& addr) { 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->address()->c_sockaddr()); - torrent::connection_manager()->set_local_address(ai->address()->c_sockaddr()); rak::address_info::free_address_info(ai); } catch (torrent::input_error& e) { @@ -246,11 +234,6 @@ Manager::set_local_address(const std::string& addr) { } } -std::string -Manager::proxy_address() const { - return rak::socket_address::cast_from(torrent::connection_manager()->proxy_address())->address_str(); -} - void Manager::set_proxy_address(const std::string& addr) { int port; @@ -272,7 +255,7 @@ Manager::set_proxy_address(const std::string& addr) { try { ai->address()->set_port(port); - torrent::connection_manager()->set_proxy_address(ai->address()->c_sockaddr()); + torrent::config::network_config()->set_proxy_address(ai->address()->c_sockaddr()); rak::address_info::free_address_info(ai); diff --git a/src/core/manager.h b/src/core/manager.h index 161b98d3..0a3c313d 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -61,13 +61,8 @@ public: void listen_open(); - std::string bind_address() const; void set_bind_address(const std::string& addr); - - std::string local_address() const; void set_local_address(const std::string& addr); - - std::string proxy_address() const; 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 34e57245..179bf04f 100644 --- a/src/display/utils.cc +++ b/src/display/utils.cc @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include "control.h" @@ -384,18 +386,22 @@ print_status_info(char* first, char* last) { first = print_buffer(first, last, " [Port: %i]", (unsigned int)torrent::connection_manager()->listen_port()); - if (!rak::socket_address::cast_from(torrent::connection_manager()->local_address())->is_address_any()) { + auto local_address = torrent::config::network_config()->local_address(); + + if (!torrent::sa_is_any(local_address.get())) { first = print_buffer(first, last, " [Local "); - first = print_address(first, last, torrent::connection_manager()->local_address()); + first = print_address(first, last, local_address.get()); first = print_buffer(first, last, "]"); } if (first > last) throw torrent::internal_error("print_status_info(...) wrote past end of the buffer."); - if (!rak::socket_address::cast_from(torrent::connection_manager()->bind_address())->is_address_any()) { + auto bind_address = torrent::config::network_config()->bind_address(); + + if (!torrent::sa_is_any(bind_address.get())) { first = print_buffer(first, last, " [Bind "); - first = print_address(first, last, torrent::connection_manager()->bind_address()); + first = print_address(first, last, bind_address.get()); first = print_buffer(first, last, "]"); }