Use only the necessary protocols in UPnP (#2571)
* Do not request UPnP for UDP when disabled * (unrelated) print endline on flag errors
This commit is contained in:
parent
f53811f326
commit
e87670af09
3 changed files with 8 additions and 6 deletions
|
|
@ -152,7 +152,7 @@ int main (int argc, char * const * argv)
|
||||||
auto flags_ec = nano::update_flags (flags, vm);
|
auto flags_ec = nano::update_flags (flags, vm);
|
||||||
if (flags_ec)
|
if (flags_ec)
|
||||||
{
|
{
|
||||||
std::cerr << flags_ec.message ();
|
std::cerr << flags_ec.message () << std::endl;
|
||||||
std::exit (1);
|
std::exit (1);
|
||||||
}
|
}
|
||||||
auto config (vm.find ("config"));
|
auto config (vm.find ("config"));
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
#include <nano/node/portmapping.hpp>
|
#include <nano/node/portmapping.hpp>
|
||||||
|
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
|
#include <boost/range/adaptor/filtered.hpp>
|
||||||
|
|
||||||
#include <upnpcommands.h>
|
#include <upnpcommands.h>
|
||||||
#include <upnperrors.h>
|
#include <upnperrors.h>
|
||||||
|
|
||||||
nano::port_mapping::port_mapping (nano::node & node_a) :
|
nano::port_mapping::port_mapping (nano::node & node_a) :
|
||||||
node (node_a),
|
node (node_a),
|
||||||
protocols ({ { { "TCP", 0, boost::asio::ip::address_v4::any (), 0 }, { "UDP", 0, boost::asio::ip::address_v4::any (), 0 } } })
|
protocols ({ { { "TCP", 0, boost::asio::ip::address_v4::any (), 0, true }, { "UDP", 0, boost::asio::ip::address_v4::any (), 0, !node_a.flags.disable_udp } } })
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,7 +62,7 @@ nano::endpoint nano::port_mapping::external_address ()
|
||||||
{
|
{
|
||||||
nano::endpoint result_l (boost::asio::ip::address_v6{}, 0);
|
nano::endpoint result_l (boost::asio::ip::address_v6{}, 0);
|
||||||
nano::lock_guard<std::mutex> guard_l (mutex);
|
nano::lock_guard<std::mutex> guard_l (mutex);
|
||||||
for (auto & protocol : protocols)
|
for (auto & protocol : protocols | boost::adaptors::filtered ([](auto const & p) { return p.enabled; }))
|
||||||
{
|
{
|
||||||
if (protocol.external_port != 0)
|
if (protocol.external_port != 0)
|
||||||
{
|
{
|
||||||
|
|
@ -80,7 +81,7 @@ void nano::port_mapping::refresh_mapping ()
|
||||||
auto config_port_l (get_config_port (node_port_l));
|
auto config_port_l (get_config_port (node_port_l));
|
||||||
|
|
||||||
// We don't map the RPC port because, unless RPC authentication was added, this would almost always be a security risk
|
// We don't map the RPC port because, unless RPC authentication was added, this would almost always be a security risk
|
||||||
for (auto & protocol : protocols)
|
for (auto & protocol : protocols | boost::adaptors::filtered ([](auto const & p) { return p.enabled; }))
|
||||||
{
|
{
|
||||||
auto upnp_description = std::string ("Nano Node (") + network_params.network.get_current_network_as_string () + ")";
|
auto upnp_description = std::string ("Nano Node (") + network_params.network.get_current_network_as_string () + ")";
|
||||||
auto add_port_mapping_error_l (UPNP_AddPortMapping (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), node_port_l.c_str (), address.to_string ().c_str (), upnp_description.c_str (), protocol.name, nullptr, nullptr));
|
auto add_port_mapping_error_l (UPNP_AddPortMapping (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), node_port_l.c_str (), address.to_string ().c_str (), upnp_description.c_str (), protocol.name, nullptr, nullptr));
|
||||||
|
|
@ -114,7 +115,7 @@ int nano::port_mapping::check_mapping ()
|
||||||
nano::lock_guard<std::mutex> guard_l (mutex);
|
nano::lock_guard<std::mutex> guard_l (mutex);
|
||||||
auto node_port_l (std::to_string (node.network.endpoint ().port ()));
|
auto node_port_l (std::to_string (node.network.endpoint ().port ()));
|
||||||
auto config_port_l (get_config_port (node_port_l));
|
auto config_port_l (get_config_port (node_port_l));
|
||||||
for (auto & protocol : protocols)
|
for (auto & protocol : protocols | boost::adaptors::filtered ([](auto const & p) { return p.enabled; }))
|
||||||
{
|
{
|
||||||
std::array<char, 64> int_client_l;
|
std::array<char, 64> int_client_l;
|
||||||
std::array<char, 6> int_port_l;
|
std::array<char, 6> int_port_l;
|
||||||
|
|
@ -188,7 +189,7 @@ void nano::port_mapping::stop ()
|
||||||
{
|
{
|
||||||
on = false;
|
on = false;
|
||||||
nano::lock_guard<std::mutex> guard_l (mutex);
|
nano::lock_guard<std::mutex> guard_l (mutex);
|
||||||
for (auto & protocol : protocols)
|
for (auto & protocol : protocols | boost::adaptors::filtered ([](auto const & p) { return p.enabled; }))
|
||||||
{
|
{
|
||||||
if (protocol.external_port != 0)
|
if (protocol.external_port != 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ public:
|
||||||
int remaining;
|
int remaining;
|
||||||
boost::asio::ip::address_v4 external_address;
|
boost::asio::ip::address_v4 external_address;
|
||||||
uint16_t external_port;
|
uint16_t external_port;
|
||||||
|
bool enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Collection of discovered UPnP devices and state*/
|
/** Collection of discovered UPnP devices and state*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue