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