aboutsummaryrefslogtreecommitdiff
path: root/src/p2p
diff options
context:
space:
mode:
authortobtoht <tob@featherwallet.org>2026-04-26 13:32:06 +0200
committertobtoht <tob@featherwallet.org>2026-04-26 13:32:06 +0200
commit987e6d29133a493914a19b660051ca634fbed1d6 (patch)
treed62bd2686df5a2b284a3206611cbdace63803c05 /src/p2p
parent0f09b7518621044597d4953c8732101b46f3f42e (diff)
downloadmonzero-core-987e6d29133a493914a19b660051ca634fbed1d6.tar.gz
monzero-core-987e6d29133a493914a19b660051ca634fbed1d6.tar.xz
monzero-core-987e6d29133a493914a19b660051ca634fbed1d6.zip
daemon: remove miniupnp
Diffstat (limited to 'src/p2p')
-rw-r--r--src/p2p/CMakeLists.txt1
-rw-r--r--src/p2p/net_node.cpp2
-rw-r--r--src/p2p/net_node.h16
-rw-r--r--src/p2p/net_node.inl192
4 files changed, 5 insertions, 206 deletions
diff --git a/src/p2p/CMakeLists.txt b/src/p2p/CMakeLists.txt
index cc408cc3b..cdb440550 100644
--- a/src/p2p/CMakeLists.txt
+++ b/src/p2p/CMakeLists.txt
@@ -38,7 +38,6 @@ target_link_libraries(p2p
version
cryptonote_core
net
- ${UPNP_LIBRARIES}
${Boost_CHRONO_LIBRARY}
${Boost_PROGRAM_OPTIONS_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
diff --git a/src/p2p/net_node.cpp b/src/p2p/net_node.cpp
index a06511785..9f0e49f52 100644
--- a/src/p2p/net_node.cpp
+++ b/src/p2p/net_node.cpp
@@ -162,7 +162,7 @@ namespace nodetool
const command_line::arg_descriptor<bool> arg_enable_dns_blocklist = {"enable-dns-blocklist", "Apply realtime blocklist from DNS", false};
const command_line::arg_descriptor<bool> arg_no_igd = {"no-igd", "Disable UPnP port mapping"};
- const command_line::arg_descriptor<std::string> arg_igd = {"igd", "UPnP port mapping (disabled, enabled, delayed)", "delayed"};
+ const command_line::arg_descriptor<std::string> arg_igd = {"igd", "UPnP port mapping (disabled)", "disabled"};
const command_line::arg_descriptor<bool> arg_p2p_use_ipv6 = {"p2p-use-ipv6", "Enable IPv6 for p2p", false};
const command_line::arg_descriptor<bool> arg_p2p_ignore_ipv4 = {"p2p-ignore-ipv4", "Ignore unsuccessful IPv4 bind for p2p", false};
const command_line::arg_descriptor<int64_t> arg_out_peers = {"out-peers", "set max number of out peers", -1};
diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h
index edd3e31fa..8e3312f29 100644
--- a/src/p2p/net_node.h
+++ b/src/p2p/net_node.h
@@ -237,12 +237,6 @@ namespace nodetool
}
};
- enum igd_t
- {
- no_igd,
- igd,
- delayed_igd,
- };
public:
typedef t_payload_net_handler payload_net_handler;
@@ -254,7 +248,6 @@ namespace nodetool
m_rpc_credits_per_hash(0),
m_allow_local_ip(false),
m_hide_my_port(false),
- m_igd(no_igd),
m_offline(false),
is_closing(false),
m_network_id(),
@@ -382,14 +375,6 @@ namespace nodetool
bool is_peer_used(const peerlist_entry& peer);
bool is_peer_used(const anchor_peerlist_entry& peer);
bool is_addr_connected(const epee::net_utils::network_address& peer);
- void add_upnp_port_mapping_impl(uint32_t port, bool ipv6=false);
- void add_upnp_port_mapping_v4(uint32_t port);
- void add_upnp_port_mapping_v6(uint32_t port);
- void add_upnp_port_mapping(uint32_t port, bool ipv4=true, bool ipv6=false);
- void delete_upnp_port_mapping_impl(uint32_t port, bool ipv6=false);
- void delete_upnp_port_mapping_v4(uint32_t port);
- void delete_upnp_port_mapping_v6(uint32_t port);
- void delete_upnp_port_mapping(uint32_t port);
template<class t_callback>
bool try_ping(basic_node_data& node_data, p2p_connection_context& context, const t_callback &cb);
bool try_get_support_flags(const p2p_connection_context& context, std::function<void(p2p_connection_context&, const uint32_t&)> f);
@@ -462,7 +447,6 @@ namespace nodetool
uint32_t m_rpc_credits_per_hash;
bool m_allow_local_ip;
bool m_hide_my_port;
- igd_t m_igd;
bool m_offline;
bool m_use_ipv6;
bool m_require_ipv4;
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
index fd5271270..3dd3c4af6 100644
--- a/src/p2p/net_node.inl
+++ b/src/p2p/net_node.inl
@@ -60,9 +60,6 @@
#include "cryptonote_core/cryptonote_core.h"
#include "net/parse.h"
-#include <miniupnp/miniupnpc/miniupnpc.h>
-#include <miniupnp/miniupnpc/upnpcommands.h>
-#include <miniupnp/miniupnpc/upnperrors.h>
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "net.p2p"
@@ -444,34 +441,8 @@ namespace nodetool
public_zone.m_can_pingback = true;
m_external_port = command_line::get_arg(vm, arg_p2p_external_port);
m_allow_local_ip = command_line::get_arg(vm, arg_p2p_allow_local_ip);
- const bool has_no_igd = command_line::get_arg(vm, arg_no_igd);
- const std::string sigd = command_line::get_arg(vm, arg_igd);
- if (sigd == "enabled")
- {
- if (has_no_igd)
- {
- MFATAL("Cannot have both --" << arg_no_igd.name << " and --" << arg_igd.name << " enabled");
- return false;
- }
- m_igd = igd;
- }
- else if (sigd == "disabled")
- {
- m_igd = no_igd;
- }
- else if (sigd == "delayed")
- {
- if (has_no_igd && !command_line::is_arg_defaulted(vm, arg_igd))
- {
- MFATAL("Cannot have both --" << arg_no_igd.name << " and --" << arg_igd.name << " delayed");
- return false;
- }
- m_igd = has_no_igd ? no_igd : delayed_igd;
- }
- else
- {
- MFATAL("Invalid value for --" << arg_igd.name << ", expected enabled, disabled or delayed");
- return false;
+ if (!command_line::is_arg_defaulted(vm, arg_igd)) {
+ MWARNING("UPnP port mapping support was removed. The --igd option is currently non-functional.");
}
m_offline = command_line::get_arg(vm, cryptonote::arg_offline);
m_use_ipv6 = command_line::get_arg(vm, arg_p2p_use_ipv6);
@@ -1023,16 +994,6 @@ namespace nodetool
if(m_external_port)
MDEBUG("External port defined as " << m_external_port);
- // add UPnP port mapping
- if(m_igd == igd)
- {
- add_upnp_port_mapping_v4(m_listening_port);
- if (m_use_ipv6)
- {
- add_upnp_port_mapping_v6(m_listening_port_ipv6);
- }
- }
-
return res;
}
//-----------------------------------------------------------------------------------
@@ -1114,9 +1075,6 @@ namespace nodetool
{
for(auto& zone : m_network_zones)
zone.second.m_net_server.deinit_server();
- // remove UPnP port mapping
- if(m_igd == igd)
- delete_upnp_port_mapping(m_listening_port);
}
return store_config();
}
@@ -2212,17 +2170,8 @@ namespace nodetool
}
else
{
- if (m_igd == delayed_igd)
- {
- MWARNING("No incoming connections, trying to setup IGD");
- add_upnp_port_mapping(m_listening_port);
- m_igd = igd;
- }
- else
- {
- const el::Level level = el::Level::Warning;
- MCLOG_RED(level, "global", "No incoming connections - check firewalls/routers allow port " << get_this_peer_port());
- }
+ const el::Level level = el::Level::Warning;
+ MCLOG_RED(level, "global", "No incoming connections - check firewalls/routers allow port " << get_this_peer_port());
}
}
return true;
@@ -3081,139 +3030,6 @@ namespace nodetool
e.clear();
}
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::add_upnp_port_mapping_impl(uint32_t port, bool ipv6) // if ipv6 false, do ipv4
- {
- std::string ipversion = ipv6 ? "(IPv6)" : "(IPv4)";
- MDEBUG("Attempting to add IGD port mapping " << ipversion << ".");
- int result;
- const int ipv6_arg = ipv6 ? 1 : 0;
-
-#if MINIUPNPC_API_VERSION > 13
- // default according to miniupnpc.h
- unsigned char ttl = 2;
- UPNPDev* deviceList = upnpDiscover(1000, NULL, NULL, 0, ipv6_arg, ttl, &result);
-#else
- UPNPDev* deviceList = upnpDiscover(1000, NULL, NULL, 0, ipv6_arg, &result);
-#endif
- UPNPUrls urls;
- IGDdatas igdData;
- char lanAddress[64];
- result = UPNP_GetValidIGD(deviceList, &urls, &igdData, lanAddress, sizeof lanAddress);
- freeUPNPDevlist(deviceList);
- if (result > 0) {
- if (result == 1) {
- std::ostringstream portString;
- portString << port;
-
- // Delete the port mapping before we create it, just in case we have dangling port mapping from the daemon not being shut down correctly
- UPNP_DeletePortMapping(urls.controlURL, igdData.first.servicetype, portString.str().c_str(), "TCP", 0);
-
- int portMappingResult;
- portMappingResult = UPNP_AddPortMapping(urls.controlURL, igdData.first.servicetype, portString.str().c_str(), portString.str().c_str(), lanAddress, CRYPTONOTE_NAME, "TCP", 0, "0");
- if (portMappingResult != 0) {
- LOG_ERROR("UPNP_AddPortMapping failed, error: " << strupnperror(portMappingResult));
- } else {
- MLOG_GREEN(el::Level::Info, "Added IGD port mapping.");
- }
- } else if (result == 2) {
- MWARNING("IGD was found but reported as not connected.");
- } else if (result == 3) {
- MWARNING("UPnP device was found but not recognized as IGD.");
- } else {
- MWARNING("UPNP_GetValidIGD returned an unknown result code.");
- }
-
- FreeUPNPUrls(&urls);
- } else {
- MINFO("No IGD was found.");
- }
- }
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::add_upnp_port_mapping_v4(uint32_t port)
- {
- add_upnp_port_mapping_impl(port, false);
- }
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::add_upnp_port_mapping_v6(uint32_t port)
- {
- add_upnp_port_mapping_impl(port, true);
- }
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::add_upnp_port_mapping(uint32_t port, bool ipv4, bool ipv6)
- {
- if (ipv4) add_upnp_port_mapping_v4(port);
- if (ipv6) add_upnp_port_mapping_v6(port);
- }
-
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::delete_upnp_port_mapping_impl(uint32_t port, bool ipv6)
- {
- std::string ipversion = ipv6 ? "(IPv6)" : "(IPv4)";
- MDEBUG("Attempting to delete IGD port mapping " << ipversion << ".");
- int result;
- const int ipv6_arg = ipv6 ? 1 : 0;
-#if MINIUPNPC_API_VERSION > 13
- // default according to miniupnpc.h
- unsigned char ttl = 2;
- UPNPDev* deviceList = upnpDiscover(1000, NULL, NULL, 0, ipv6_arg, ttl, &result);
-#else
- UPNPDev* deviceList = upnpDiscover(1000, NULL, NULL, 0, ipv6_arg, &result);
-#endif
- UPNPUrls urls;
- IGDdatas igdData;
- char lanAddress[64];
- result = UPNP_GetValidIGD(deviceList, &urls, &igdData, lanAddress, sizeof lanAddress);
- freeUPNPDevlist(deviceList);
- if (result > 0) {
- if (result == 1) {
- std::ostringstream portString;
- portString << port;
-
- int portMappingResult;
- portMappingResult = UPNP_DeletePortMapping(urls.controlURL, igdData.first.servicetype, portString.str().c_str(), "TCP", 0);
- if (portMappingResult != 0) {
- LOG_ERROR("UPNP_DeletePortMapping failed, error: " << strupnperror(portMappingResult));
- } else {
- MLOG_GREEN(el::Level::Info, "Deleted IGD port mapping.");
- }
- } else if (result == 2) {
- MWARNING("IGD was found but reported as not connected.");
- } else if (result == 3) {
- MWARNING("UPnP device was found but not recognized as IGD.");
- } else {
- MWARNING("UPNP_GetValidIGD returned an unknown result code.");
- }
-
- FreeUPNPUrls(&urls);
- } else {
- MINFO("No IGD was found.");
- }
- }
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::delete_upnp_port_mapping_v4(uint32_t port)
- {
- delete_upnp_port_mapping_impl(port, false);
- }
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::delete_upnp_port_mapping_v6(uint32_t port)
- {
- delete_upnp_port_mapping_impl(port, true);
- }
-
- template<class t_payload_net_handler>
- void node_server<t_payload_net_handler>::delete_upnp_port_mapping(uint32_t port)
- {
- delete_upnp_port_mapping_v4(port);
- delete_upnp_port_mapping_v6(port);
- }
-
template<typename t_payload_net_handler>
boost::optional<p2p_connection_context_t<typename t_payload_net_handler::connection_context>>
node_server<t_payload_net_handler>::socks_connect(network_zone& zone, const epee::net_utils::network_address& remote, epee::net_utils::ssl_support_t ssl_support)