mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-02 02:44:15 +00:00
limit session to introducer by 1 hour
This commit is contained in:
parent
5435d20199
commit
5cb691fb0b
10
SSU.cpp
10
SSU.cpp
@ -22,6 +22,7 @@ namespace ssu
|
|||||||
m_IsSessionKey (false), m_RelayTag (0), m_Data (*this),
|
m_IsSessionKey (false), m_RelayTag (0), m_Data (*this),
|
||||||
m_NumSentBytes (0), m_NumReceivedBytes (0)
|
m_NumSentBytes (0), m_NumReceivedBytes (0)
|
||||||
{
|
{
|
||||||
|
m_CreationTime = i2p::util::GetSecondsSinceEpoch ();
|
||||||
m_DHKeysPair = i2p::transports.GetNextDHKeysPair ();
|
m_DHKeysPair = i2p::transports.GetNextDHKeysPair ();
|
||||||
if (!router) // incoming session
|
if (!router) // incoming session
|
||||||
ScheduleConnectTimer ();
|
ScheduleConnectTimer ();
|
||||||
@ -1124,14 +1125,16 @@ namespace ssu
|
|||||||
|
|
||||||
std::set<SSUSession *> SSUServer::FindIntroducers (int maxNumIntroducers)
|
std::set<SSUSession *> SSUServer::FindIntroducers (int maxNumIntroducers)
|
||||||
{
|
{
|
||||||
|
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
std::set<SSUSession *> ret;
|
std::set<SSUSession *> ret;
|
||||||
for (int i = 0; i < maxNumIntroducers; i++)
|
for (int i = 0; i < maxNumIntroducers; i++)
|
||||||
{
|
{
|
||||||
auto session = GetRandomSession (
|
auto session = GetRandomSession (
|
||||||
[&ret](SSUSession * session)->bool
|
[&ret, ts](SSUSession * session)->bool
|
||||||
{
|
{
|
||||||
return session->GetRelayTag () && !ret.count (session) &&
|
return session->GetRelayTag () && !ret.count (session) &&
|
||||||
session->GetState () == eSessionStateEstablished;
|
session->GetState () == eSessionStateEstablished &&
|
||||||
|
ts < session->GetCreationTime () + SSU_TO_INTRODUCER_SESSION_DURATION;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
if (session)
|
if (session)
|
||||||
@ -1157,10 +1160,11 @@ namespace ssu
|
|||||||
// timeout expired
|
// timeout expired
|
||||||
std::list<boost::asio::ip::udp::endpoint> newList;
|
std::list<boost::asio::ip::udp::endpoint> newList;
|
||||||
size_t numIntroducers = 0;
|
size_t numIntroducers = 0;
|
||||||
|
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
for (auto it :m_Introducers)
|
for (auto it :m_Introducers)
|
||||||
{
|
{
|
||||||
auto session = FindSession (it);
|
auto session = FindSession (it);
|
||||||
if (session)
|
if (session && ts < session->GetCreationTime () + SSU_TO_INTRODUCER_SESSION_DURATION)
|
||||||
{
|
{
|
||||||
session->SendKeepAlive ();
|
session->SendKeepAlive ();
|
||||||
newList.push_back (it);
|
newList.push_back (it);
|
||||||
|
2
SSU.h
2
SSU.h
@ -81,6 +81,7 @@ namespace ssu
|
|||||||
|
|
||||||
void SendKeepAlive ();
|
void SendKeepAlive ();
|
||||||
uint32_t GetRelayTag () const { return m_RelayTag; };
|
uint32_t GetRelayTag () const { return m_RelayTag; };
|
||||||
|
uint32_t GetCreationTime () const { return m_CreationTime; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -141,6 +142,7 @@ namespace ssu
|
|||||||
std::list<i2p::I2NPMessage *> m_DelayedMessages;
|
std::list<i2p::I2NPMessage *> m_DelayedMessages;
|
||||||
SSUData m_Data;
|
SSUData m_Data;
|
||||||
size_t m_NumSentBytes, m_NumReceivedBytes;
|
size_t m_NumSentBytes, m_NumReceivedBytes;
|
||||||
|
uint32_t m_CreationTime; // seconds since epoch
|
||||||
};
|
};
|
||||||
|
|
||||||
class SSUServer
|
class SSUServer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user