mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
send ping every keealive interval for client tunnels
This commit is contained in:
parent
b10e5ce358
commit
2eded7cdd7
@ -1096,6 +1096,31 @@ namespace client
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClientDestination::SendPing (const i2p::data::IdentHash& to)
|
||||||
|
{
|
||||||
|
if (m_StreamingDestination)
|
||||||
|
{
|
||||||
|
auto leaseSet = FindLeaseSet (to);
|
||||||
|
if (leaseSet)
|
||||||
|
m_StreamingDestination->SendPing (leaseSet);
|
||||||
|
else
|
||||||
|
RequestDestination (to,
|
||||||
|
[s = m_StreamingDestination](std::shared_ptr<const i2p::data::LeaseSet> ls)
|
||||||
|
{
|
||||||
|
if (ls) s->SendPing (ls);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientDestination::SendPing (std::shared_ptr<const i2p::data::BlindedPublicKey> to)
|
||||||
|
{
|
||||||
|
RequestDestinationWithEncryptedLeaseSet (to,
|
||||||
|
[s = m_StreamingDestination](std::shared_ptr<const i2p::data::LeaseSet> ls)
|
||||||
|
{
|
||||||
|
if (ls) s->SendPing (ls);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<i2p::stream::StreamingDestination> ClientDestination::GetStreamingDestination (int port) const
|
std::shared_ptr<i2p::stream::StreamingDestination> ClientDestination::GetStreamingDestination (int port) const
|
||||||
{
|
{
|
||||||
if (port)
|
if (port)
|
||||||
|
@ -243,6 +243,8 @@ namespace client
|
|||||||
void CreateStream (StreamRequestComplete streamRequestComplete, const i2p::data::IdentHash& dest, int port = 0);
|
void CreateStream (StreamRequestComplete streamRequestComplete, const i2p::data::IdentHash& dest, int port = 0);
|
||||||
void CreateStream (StreamRequestComplete streamRequestComplete, std::shared_ptr<const i2p::data::BlindedPublicKey> dest, int port = 0);
|
void CreateStream (StreamRequestComplete streamRequestComplete, std::shared_ptr<const i2p::data::BlindedPublicKey> dest, int port = 0);
|
||||||
std::shared_ptr<i2p::stream::Stream> CreateStream (std::shared_ptr<const i2p::data::LeaseSet> remote, int port = 0);
|
std::shared_ptr<i2p::stream::Stream> CreateStream (std::shared_ptr<const i2p::data::LeaseSet> remote, int port = 0);
|
||||||
|
void SendPing (const i2p::data::IdentHash& to);
|
||||||
|
void SendPing (std::shared_ptr<const i2p::data::BlindedPublicKey> to);
|
||||||
void AcceptStreams (const i2p::stream::StreamingDestination::Acceptor& acceptor);
|
void AcceptStreams (const i2p::stream::StreamingDestination::Acceptor& acceptor);
|
||||||
void StopAcceptingStreams ();
|
void StopAcceptingStreams ();
|
||||||
bool IsAcceptingStreams () const;
|
bool IsAcceptingStreams () const;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
* Copyright (c) 2013-2021, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
@ -652,6 +652,13 @@ namespace client
|
|||||||
auto tun = std::make_shared<I2PClientTunnel> (name, dest, address, port, localDestination, destinationPort);
|
auto tun = std::make_shared<I2PClientTunnel> (name, dest, address, port, localDestination, destinationPort);
|
||||||
clientTunnel = tun;
|
clientTunnel = tun;
|
||||||
clientEndpoint = tun->GetLocalEndpoint ();
|
clientEndpoint = tun->GetLocalEndpoint ();
|
||||||
|
|
||||||
|
uint32_t keepAlive = section.second.get<uint32_t>(I2P_CLIENT_TUNNEL_KEEP_ALIVE_INTERVAL, 0);
|
||||||
|
if (keepAlive)
|
||||||
|
{
|
||||||
|
tun->SetKeepAliveInterval (keepAlive);
|
||||||
|
LogPrint(eLogInfo, "Clients: I2P Client tunnel keep alive interval set to ", keepAlive);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t timeout = section.second.get<uint32_t>(I2P_CLIENT_TUNNEL_CONNECT_TIMEOUT, 0);
|
uint32_t timeout = section.second.get<uint32_t>(I2P_CLIENT_TUNNEL_CONNECT_TIMEOUT, 0);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
* Copyright (c) 2013-2021, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
@ -48,6 +48,7 @@ namespace client
|
|||||||
const char I2P_CLIENT_TUNNEL_DESTINATION_PORT[] = "destinationport";
|
const char I2P_CLIENT_TUNNEL_DESTINATION_PORT[] = "destinationport";
|
||||||
const char I2P_CLIENT_TUNNEL_MATCH_TUNNELS[] = "matchtunnels";
|
const char I2P_CLIENT_TUNNEL_MATCH_TUNNELS[] = "matchtunnels";
|
||||||
const char I2P_CLIENT_TUNNEL_CONNECT_TIMEOUT[] = "connecttimeout";
|
const char I2P_CLIENT_TUNNEL_CONNECT_TIMEOUT[] = "connecttimeout";
|
||||||
|
const char I2P_CLIENT_TUNNEL_KEEP_ALIVE_INTERVAL[] = "keepaliveinterval";
|
||||||
const char I2P_SERVER_TUNNEL_HOST[] = "host";
|
const char I2P_SERVER_TUNNEL_HOST[] = "host";
|
||||||
const char I2P_SERVER_TUNNEL_HOST_OVERRIDE[] = "hostoverride";
|
const char I2P_SERVER_TUNNEL_HOST_OVERRIDE[] = "hostoverride";
|
||||||
const char I2P_SERVER_TUNNEL_PORT[] = "port";
|
const char I2P_SERVER_TUNNEL_PORT[] = "port";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
* Copyright (c) 2013-2021, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
@ -532,7 +532,7 @@ namespace client
|
|||||||
I2PClientTunnel::I2PClientTunnel (const std::string& name, const std::string& destination,
|
I2PClientTunnel::I2PClientTunnel (const std::string& name, const std::string& destination,
|
||||||
const std::string& address, int port, std::shared_ptr<ClientDestination> localDestination, int destinationPort):
|
const std::string& address, int port, std::shared_ptr<ClientDestination> localDestination, int destinationPort):
|
||||||
TCPIPAcceptor (address, port, localDestination), m_Name (name), m_Destination (destination),
|
TCPIPAcceptor (address, port, localDestination), m_Name (name), m_Destination (destination),
|
||||||
m_DestinationPort (destinationPort)
|
m_DestinationPort (destinationPort), m_KeepAliveInterval (0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -540,14 +540,24 @@ namespace client
|
|||||||
{
|
{
|
||||||
TCPIPAcceptor::Start ();
|
TCPIPAcceptor::Start ();
|
||||||
GetAddress ();
|
GetAddress ();
|
||||||
|
if (m_KeepAliveInterval)
|
||||||
|
ScheduleKeepAliveTimer ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void I2PClientTunnel::Stop ()
|
void I2PClientTunnel::Stop ()
|
||||||
{
|
{
|
||||||
TCPIPAcceptor::Stop();
|
TCPIPAcceptor::Stop();
|
||||||
m_Address = nullptr;
|
m_Address = nullptr;
|
||||||
|
if (m_KeepAliveTimer) m_KeepAliveTimer->cancel ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void I2PClientTunnel::SetKeepAliveInterval (uint32_t keepAliveInterval)
|
||||||
|
{
|
||||||
|
m_KeepAliveInterval = keepAliveInterval;
|
||||||
|
if (m_KeepAliveInterval)
|
||||||
|
m_KeepAliveTimer.reset (new boost::asio::deadline_timer (GetLocalDestination ()->GetService ()));
|
||||||
|
}
|
||||||
|
|
||||||
/* HACK: maybe we should create a caching IdentHash provider in AddressBook */
|
/* HACK: maybe we should create a caching IdentHash provider in AddressBook */
|
||||||
std::shared_ptr<const Address> I2PClientTunnel::GetAddress ()
|
std::shared_ptr<const Address> I2PClientTunnel::GetAddress ()
|
||||||
{
|
{
|
||||||
@ -569,6 +579,31 @@ namespace client
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void I2PClientTunnel::ScheduleKeepAliveTimer ()
|
||||||
|
{
|
||||||
|
if (m_KeepAliveTimer)
|
||||||
|
{
|
||||||
|
m_KeepAliveTimer->expires_from_now (boost::posix_time::seconds(m_KeepAliveInterval));
|
||||||
|
m_KeepAliveTimer->async_wait (std::bind (&I2PClientTunnel::HandleKeepAliveTimer,
|
||||||
|
this, std::placeholders::_1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void I2PClientTunnel::HandleKeepAliveTimer (const boost::system::error_code& ecode)
|
||||||
|
{
|
||||||
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
|
{
|
||||||
|
if (m_Address && m_Address->IsValid ())
|
||||||
|
{
|
||||||
|
if (m_Address->IsIdentHash ())
|
||||||
|
GetLocalDestination ()->SendPing (m_Address->identHash);
|
||||||
|
else
|
||||||
|
GetLocalDestination ()->SendPing (m_Address->blindedPublicKey);
|
||||||
|
}
|
||||||
|
ScheduleKeepAliveTimer ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
I2PServerTunnel::I2PServerTunnel (const std::string& name, const std::string& address,
|
I2PServerTunnel::I2PServerTunnel (const std::string& name, const std::string& address,
|
||||||
int port, std::shared_ptr<ClientDestination> localDestination, int inport, bool gzip):
|
int port, std::shared_ptr<ClientDestination> localDestination, int inport, bool gzip):
|
||||||
I2PService (localDestination), m_IsUniqueLocal(true), m_Name (name), m_Address (address), m_Port (port), m_IsAccessList (false)
|
I2PService (localDestination), m_IsUniqueLocal(true), m_Name (name), m_Address (address), m_Port (port), m_IsAccessList (false)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
* Copyright (c) 2013-2021, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
@ -153,16 +153,22 @@ namespace client
|
|||||||
void Stop ();
|
void Stop ();
|
||||||
|
|
||||||
const char* GetName() { return m_Name.c_str (); }
|
const char* GetName() { return m_Name.c_str (); }
|
||||||
|
void SetKeepAliveInterval (uint32_t keepAliveInterval);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::shared_ptr<const Address> GetAddress ();
|
std::shared_ptr<const Address> GetAddress ();
|
||||||
|
|
||||||
|
void ScheduleKeepAliveTimer ();
|
||||||
|
void HandleKeepAliveTimer (const boost::system::error_code& ecode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::string m_Name, m_Destination;
|
std::string m_Name, m_Destination;
|
||||||
std::shared_ptr<const Address> m_Address;
|
std::shared_ptr<const Address> m_Address;
|
||||||
int m_DestinationPort;
|
int m_DestinationPort;
|
||||||
|
uint32_t m_KeepAliveInterval;
|
||||||
|
std::unique_ptr<boost::asio::deadline_timer> m_KeepAliveTimer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user