diff --git a/src/control.cc b/src/control.cc index a76bafb7..4b35c5a5 100644 --- a/src/control.cc +++ b/src/control.cc @@ -70,9 +70,6 @@ Control::initialize() { display::Window::slot_unschedule([this](display::Window* w) { m_display->unschedule(w); }); display::Window::slot_adjust([this]() { m_display->adjust_layout(); }); - torrent::net_thread::http_stack()->set_user_agent(USER_AGENT); - - m_core->listen_open(); m_core->set_hashing_view(*m_view_manager->find_throw("hashing")); m_ui->init(this); diff --git a/src/core/dht_manager.cc b/src/core/dht_manager.cc index 027d1c26..3f683363 100644 --- a/src/core/dht_manager.cc +++ b/src/core/dht_manager.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -141,18 +142,29 @@ DhtManager::save_dht_cache() { void DhtManager::set_mode_by_user(const std::string& arg) { - for (int i = 0; i < dht_settings_num; i++) { - if (arg == dht_settings[i]) { - m_set_by_user = true; - return set_mode_directly(i); - } + unsigned int mode = [arg]() { + for (int i = 0; i < dht_settings_num; i++) { + if (arg == dht_settings[i]) + return i; + } + + throw torrent::input_error("Invalid dht mode: " + arg); + }(); + + m_set_by_user = true; + + if (!torrent::runtime::is_network_initialized()) { + m_start = mode; + return; } + + set_mode_directly(mode); } void DhtManager::set_mode_directly(unsigned int mode) { if (mode >= dht_settings_num) - throw torrent::input_error("Invalid argument."); + throw torrent::input_error("Invalid dht mode."); m_start = mode; @@ -164,8 +176,10 @@ DhtManager::set_mode_directly(unsigned int mode) { void DhtManager::set_auto_if_untouched_and_has_session() { - if (m_set_by_user) + if (m_set_by_user) { + set_mode_directly(m_start); return; + } if (rpc::call_command_string("session.path").empty()) { LT_LOG("DHT auto-start disabled, session path not set.", 0); diff --git a/src/main.cc b/src/main.cc index 4863d4d5..388ee005 100644 --- a/src/main.cc +++ b/src/main.cc @@ -11,7 +11,9 @@ #include #include #include +#include #include +#include #include #include @@ -450,6 +452,11 @@ main(int argc, char** argv) { control->initialize(); control->ui()->load_input_history(); + torrent::net_thread::http_stack()->set_user_agent(USER_AGENT); + torrent::runtime::initialize_network(); + + control->core()->listen_open(); + // Load session torrents and perform scheduled tasks to ensure session torrents are loaded // before arg torrents. control->dht_manager()->set_auto_if_untouched_and_has_session();