From 55d169c926b3614b70ab3689726c1927ebfb5a1c Mon Sep 17 00:00:00 2001 From: 0x914409F1 Date: Sun, 19 May 2019 01:24:41 +0000 Subject: [PATCH] daemon: implement CLI option to disable UPnP (#26) Enhances local network privacy by disabling UPnP (discovery (SSDP), etc.), and also speeds up the daemon on startup if UPnP is not needed. In other words, allows the option to completely disable the use of UPnP. --- src/common/command_line.cpp | 3 ++- src/common/command_line.h | 1 + src/daemon/daemon.cpp | 12 ++++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/common/command_line.cpp b/src/common/command_line.cpp index 920423bb..73178ce8 100644 --- a/src/common/command_line.cpp +++ b/src/common/command_line.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2019 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying @@ -25,4 +25,5 @@ namespace command_line const arg_descriptor arg_show_details = { "currency-details", "Display currency details" }; const arg_descriptor arg_show_rpc_autodoc = { "show_rpc_autodoc", "Display rpc auto-generated documentation template" }; + const arg_descriptor arg_disable_upnp = { "disable-upnp", "Disable UPnP (enhances local network privacy)", false, true }; } diff --git a/src/common/command_line.h b/src/common/command_line.h index 4d7105c5..e4a9c544 100644 --- a/src/common/command_line.h +++ b/src/common/command_line.h @@ -184,4 +184,5 @@ namespace command_line extern const arg_descriptor arg_console; extern const arg_descriptor arg_show_details; extern const arg_descriptor arg_show_rpc_autodoc; + extern const arg_descriptor arg_disable_upnp; } diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 8272a08d..580f8971 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2019 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying @@ -70,6 +70,7 @@ int main(int argc, char* argv[]) // tools::get_default_data_dir() can't be called during static initialization command_line::add_arg(desc_cmd_only, command_line::arg_data_dir, tools::get_default_data_dir()); command_line::add_arg(desc_cmd_only, command_line::arg_config_file); + command_line::add_arg(desc_cmd_only, command_line::arg_disable_upnp); command_line::add_arg(desc_cmd_sett, command_line::arg_log_dir); command_line::add_arg(desc_cmd_sett, command_line::arg_log_level); @@ -162,7 +163,6 @@ int main(int argc, char* argv[]) cprotocol.set_p2p_endpoint(&p2psrv); ccore.set_currency_protocol(&cprotocol); daemon_cmmands_handler dch(p2psrv, rpc_server); - tools::miniupnp_helper upnp_helper; //ccore.get_blockchain_storage().get_attachment_services_manager().add_service(&offers_service); std::shared_ptr stratum_server_ptr; if (stratum_enabled) @@ -193,8 +193,12 @@ int main(int argc, char* argv[]) CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize p2p server."); LOG_PRINT_L0("P2p server initialized OK on port: " << p2psrv.get_this_peer_port()); - LOG_PRINT_L0("Starting UPnP"); - upnp_helper.start_regular_mapping(p2psrv.get_this_peer_port(), p2psrv.get_this_peer_port(), 20*60*1000); + if (!command_line::get_arg(vm, command_line::arg_disable_upnp)) + { + tools::miniupnp_helper upnp_helper; + LOG_PRINT_L0("Starting UPnP"); + upnp_helper.start_regular_mapping(p2psrv.get_this_peer_port(), p2psrv.get_this_peer_port(), 20*60*1000); + } LOG_PRINT_L0("Initializing currency protocol..."); res = cprotocol.init(vm);