mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	pass gzip parameter to UDP tunnels
This commit is contained in:
		
							parent
							
								
									e1b1032df9
								
							
						
					
					
						commit
						d4bfeab36c
					
				
					 8 changed files with 18 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -11,8 +11,8 @@ namespace i2p
 | 
			
		|||
{
 | 
			
		||||
namespace datagram
 | 
			
		||||
{
 | 
			
		||||
	DatagramDestination::DatagramDestination (std::shared_ptr<i2p::client::ClientDestination> owner):
 | 
			
		||||
		m_Owner (owner), m_Receiver (nullptr), m_RawReceiver (nullptr)
 | 
			
		||||
	DatagramDestination::DatagramDestination (std::shared_ptr<i2p::client::ClientDestination> owner, bool gzip):
 | 
			
		||||
		m_Owner (owner), m_Receiver (nullptr), m_RawReceiver (nullptr), m_Gzip (gzip)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -127,6 +127,7 @@ namespace datagram
 | 
			
		|||
		auto msg = NewI2NPMessage ();
 | 
			
		||||
		uint8_t * buf = msg->GetPayload ();
 | 
			
		||||
		buf += 4; // reserve for length
 | 
			
		||||
		m_Deflator.SetCompressionLevel (m_Gzip ? Z_DEFAULT_COMPRESSION : Z_NO_COMPRESSION);
 | 
			
		||||
		size_t size = m_Deflator.Deflate (payloads, buf, msg->maxLen - msg->len);
 | 
			
		||||
		if (size)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ namespace datagram
 | 
			
		|||
		public:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    DatagramDestination (std::shared_ptr<i2p::client::ClientDestination> owner);
 | 
			
		||||
    		DatagramDestination (std::shared_ptr<i2p::client::ClientDestination> owner, bool gzip);
 | 
			
		||||
			~DatagramDestination ();
 | 
			
		||||
 | 
			
		||||
			void SendDatagramTo (const uint8_t * payload, size_t len, const i2p::data::IdentHash & ident, uint16_t fromPort = 0, uint16_t toPort = 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +146,7 @@ namespace datagram
 | 
			
		|||
			std::shared_ptr<i2p::client::ClientDestination> m_Owner;
 | 
			
		||||
			Receiver m_Receiver; // default
 | 
			
		||||
			RawReceiver m_RawReceiver; // default
 | 
			
		||||
			bool m_Gzip; // gzip compression of data messages
 | 
			
		||||
			std::mutex m_SessionsMutex;
 | 
			
		||||
			std::map<i2p::data::IdentHash, DatagramSession_ptr > m_Sessions;
 | 
			
		||||
			std::mutex m_ReceiversMutex;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1105,10 +1105,10 @@ namespace client
 | 
			
		|||
		return dest;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  i2p::datagram::DatagramDestination * ClientDestination::CreateDatagramDestination ()
 | 
			
		||||
  i2p::datagram::DatagramDestination * ClientDestination::CreateDatagramDestination (bool gzip)
 | 
			
		||||
	{
 | 
			
		||||
		if (m_DatagramDestination == nullptr)
 | 
			
		||||
			m_DatagramDestination = new i2p::datagram::DatagramDestination (GetSharedFromThis ());
 | 
			
		||||
			m_DatagramDestination = new i2p::datagram::DatagramDestination (GetSharedFromThis (), gzip);
 | 
			
		||||
		return m_DatagramDestination;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -236,7 +236,7 @@ namespace client
 | 
			
		|||
 | 
			
		||||
			// datagram
 | 
			
		||||
      		i2p::datagram::DatagramDestination * GetDatagramDestination () const { return m_DatagramDestination; };
 | 
			
		||||
      		i2p::datagram::DatagramDestination * CreateDatagramDestination ();
 | 
			
		||||
      		i2p::datagram::DatagramDestination * CreateDatagramDestination (bool gzip = true);
 | 
			
		||||
 | 
			
		||||
			// implements LocalDestination
 | 
			
		||||
			bool Decrypt (const uint8_t * encrypted, uint8_t * data, BN_CTX * ctx, i2p::data::CryptoKeyType preferredCrypto) const;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -569,7 +569,8 @@ namespace client
 | 
			
		|||
						if (!localDestination)
 | 
			
		||||
							localDestination = m_SharedLocalDestination;
 | 
			
		||||
 | 
			
		||||
						auto clientTunnel = std::make_shared<I2PUDPClientTunnel>(name, dest, end, localDestination, destinationPort);
 | 
			
		||||
						bool gzip = section.second.get (I2P_CLIENT_TUNNEL_GZIP, true);
 | 
			
		||||
						auto clientTunnel = std::make_shared<I2PUDPClientTunnel>(name, dest, end, localDestination, destinationPort, gzip);
 | 
			
		||||
						if(m_ClientForwards.insert(std::make_pair(end, clientTunnel)).second)
 | 
			
		||||
							clientTunnel->Start();
 | 
			
		||||
						else
 | 
			
		||||
| 
						 | 
				
			
			@ -672,7 +673,7 @@ namespace client
 | 
			
		|||
						// TODO: hostnames
 | 
			
		||||
						auto localAddress = boost::asio::ip::address::from_string(address);
 | 
			
		||||
						boost::asio::ip::udp::endpoint endpoint(boost::asio::ip::address::from_string(host), port);
 | 
			
		||||
						auto serverTunnel = std::make_shared<I2PUDPServerTunnel>(name, localDestination, localAddress, endpoint, port);
 | 
			
		||||
						auto serverTunnel = std::make_shared<I2PUDPServerTunnel>(name, localDestination, localAddress, endpoint, port, gzip);
 | 
			
		||||
						if(!isUniqueLocal)
 | 
			
		||||
						{
 | 
			
		||||
							LogPrint(eLogInfo, "Clients: disabling loopback address mapping");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,6 +33,7 @@ namespace client
 | 
			
		|||
	const char I2P_CLIENT_TUNNEL_ADDRESS[] = "address";
 | 
			
		||||
	const char I2P_CLIENT_TUNNEL_DESTINATION[] = "destination";
 | 
			
		||||
	const char I2P_CLIENT_TUNNEL_KEYS[] = "keys";
 | 
			
		||||
	const char I2P_CLIENT_TUNNEL_GZIP[] = "gzip";
 | 
			
		||||
	const char I2P_CLIENT_TUNNEL_SIGNATURE_TYPE[] = "signaturetype";
 | 
			
		||||
	const char I2P_CLIENT_TUNNEL_CRYPTO_TYPE[] = "cryptotype";
 | 
			
		||||
	const char I2P_CLIENT_TUNNEL_DESTINATION_PORT[] = "destinationport";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -696,7 +696,7 @@ namespace client
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	I2PUDPServerTunnel::I2PUDPServerTunnel(const std::string & name, std::shared_ptr<i2p::client::ClientDestination> localDestination,
 | 
			
		||||
		boost::asio::ip::address localAddress, boost::asio::ip::udp::endpoint forwardTo, uint16_t port) :
 | 
			
		||||
		boost::asio::ip::address localAddress, boost::asio::ip::udp::endpoint forwardTo, uint16_t port, bool gzip) :
 | 
			
		||||
		m_IsUniqueLocal(true),
 | 
			
		||||
		m_Name(name),
 | 
			
		||||
		m_LocalAddress(localAddress),
 | 
			
		||||
| 
						 | 
				
			
			@ -704,7 +704,7 @@ namespace client
 | 
			
		|||
	{
 | 
			
		||||
		m_LocalDest = localDestination;
 | 
			
		||||
		m_LocalDest->Start();
 | 
			
		||||
		auto dgram = m_LocalDest->CreateDatagramDestination();
 | 
			
		||||
		auto dgram = m_LocalDest->CreateDatagramDestination(gzip);
 | 
			
		||||
		dgram->SetReceiver(std::bind(&I2PUDPServerTunnel::HandleRecvFromI2P, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -745,7 +745,7 @@ namespace client
 | 
			
		|||
	I2PUDPClientTunnel::I2PUDPClientTunnel(const std::string & name, const std::string &remoteDest,
 | 
			
		||||
		boost::asio::ip::udp::endpoint localEndpoint,
 | 
			
		||||
		std::shared_ptr<i2p::client::ClientDestination> localDestination,
 | 
			
		||||
		uint16_t remotePort) :
 | 
			
		||||
		uint16_t remotePort, bool gzip) :
 | 
			
		||||
		m_Name(name),
 | 
			
		||||
		m_RemoteDest(remoteDest),
 | 
			
		||||
		m_LocalDest(localDestination),
 | 
			
		||||
| 
						 | 
				
			
			@ -756,7 +756,7 @@ namespace client
 | 
			
		|||
		RemotePort(remotePort),
 | 
			
		||||
		m_cancel_resolve(false)
 | 
			
		||||
	{
 | 
			
		||||
		auto dgram = m_LocalDest->CreateDatagramDestination();
 | 
			
		||||
		auto dgram = m_LocalDest->CreateDatagramDestination(gzip);
 | 
			
		||||
		dgram->SetReceiver(std::bind(&I2PUDPClientTunnel::HandleRecvFromI2P, this,
 | 
			
		||||
			std::placeholders::_1, std::placeholders::_2,
 | 
			
		||||
			std::placeholders::_3, std::placeholders::_4,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -198,7 +198,7 @@ namespace client
 | 
			
		|||
			I2PUDPServerTunnel(const std::string & name,
 | 
			
		||||
				std::shared_ptr<i2p::client::ClientDestination> localDestination,
 | 
			
		||||
				boost::asio::ip::address localAddress,
 | 
			
		||||
				boost::asio::ip::udp::endpoint forwardTo, uint16_t port);
 | 
			
		||||
				boost::asio::ip::udp::endpoint forwardTo, uint16_t port, bool gzip);
 | 
			
		||||
			~I2PUDPServerTunnel();
 | 
			
		||||
			/** expire stale udp conversations */
 | 
			
		||||
			void ExpireStale(const uint64_t delta=I2P_UDP_SESSION_TIMEOUT);
 | 
			
		||||
| 
						 | 
				
			
			@ -228,7 +228,7 @@ namespace client
 | 
			
		|||
		public:
 | 
			
		||||
			I2PUDPClientTunnel(const std::string & name, const std::string &remoteDest,
 | 
			
		||||
				boost::asio::ip::udp::endpoint localEndpoint, std::shared_ptr<i2p::client::ClientDestination> localDestination,
 | 
			
		||||
				uint16_t remotePort);
 | 
			
		||||
				uint16_t remotePort, bool gzip);
 | 
			
		||||
			~I2PUDPClientTunnel();
 | 
			
		||||
			void Start();
 | 
			
		||||
			const char * GetName() const { return m_Name.c_str(); }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue