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