mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
count tunnel acceptance ratio for peer selection
This commit is contained in:
parent
d0ac6345c2
commit
de5c55160b
@ -16,9 +16,14 @@ namespace data
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::posix_time::ptime RouterProfile::GetTime () const
|
||||||
|
{
|
||||||
|
return boost::posix_time::second_clock::local_time();
|
||||||
|
}
|
||||||
|
|
||||||
void RouterProfile::UpdateTime ()
|
void RouterProfile::UpdateTime ()
|
||||||
{
|
{
|
||||||
m_LastUpdateTime = boost::posix_time::second_clock::local_time();
|
m_LastUpdateTime = GetTime ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterProfile::Save ()
|
void RouterProfile::Save ()
|
||||||
@ -90,11 +95,16 @@ namespace data
|
|||||||
auto t = pt.get (PEER_PROFILE_LAST_UPDATE_TIME, "");
|
auto t = pt.get (PEER_PROFILE_LAST_UPDATE_TIME, "");
|
||||||
if (t.length () > 0)
|
if (t.length () > 0)
|
||||||
m_LastUpdateTime = boost::posix_time::time_from_string (t);
|
m_LastUpdateTime = boost::posix_time::time_from_string (t);
|
||||||
// read participations
|
if ((GetTime () - m_LastUpdateTime).hours () < 72) // profile becomes obsolete after 3 days of inactivity
|
||||||
auto participations = pt.get_child (PEER_PROFILE_SECTION_PARTICIPATION);
|
{
|
||||||
m_NumTunnelsAgreed = participations.get (PEER_PROFILE_PARTICIPATION_AGREED, 0);
|
// read participations
|
||||||
m_NumTunnelsDeclined = participations.get (PEER_PROFILE_PARTICIPATION_DECLINED, 0);
|
auto participations = pt.get_child (PEER_PROFILE_SECTION_PARTICIPATION);
|
||||||
m_NumTunnelsNonReplied = participations.get (PEER_PROFILE_PARTICIPATION_NON_REPLIED, 0);
|
m_NumTunnelsAgreed = participations.get (PEER_PROFILE_PARTICIPATION_AGREED, 0);
|
||||||
|
m_NumTunnelsDeclined = participations.get (PEER_PROFILE_PARTICIPATION_DECLINED, 0);
|
||||||
|
m_NumTunnelsNonReplied = participations.get (PEER_PROFILE_PARTICIPATION_NON_REPLIED, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*this = RouterProfile (m_IdentHash);
|
||||||
}
|
}
|
||||||
catch (std::exception& ex)
|
catch (std::exception& ex)
|
||||||
{
|
{
|
||||||
@ -117,6 +127,19 @@ namespace data
|
|||||||
m_NumTunnelsNonReplied++;
|
m_NumTunnelsNonReplied++;
|
||||||
UpdateTime ();
|
UpdateTime ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RouterProfile::IsLowPartcipationRate () const
|
||||||
|
{
|
||||||
|
if ((GetTime () - m_LastUpdateTime).total_seconds () < 900) // if less than 15 minutes
|
||||||
|
return m_NumTunnelsAgreed < m_NumTunnelsDeclined; // 50% rate
|
||||||
|
else
|
||||||
|
return 4*m_NumTunnelsAgreed < m_NumTunnelsDeclined; // 20% rate
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RouterProfile::IsBad () const
|
||||||
|
{
|
||||||
|
return IsAlwaysDeclining () || IsNonResponding () || IsLowPartcipationRate ();
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<RouterProfile> GetRouterProfile (const IdentHash& identHash)
|
std::shared_ptr<RouterProfile> GetRouterProfile (const IdentHash& identHash)
|
||||||
{
|
{
|
||||||
|
@ -24,18 +24,24 @@ namespace data
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
RouterProfile (const IdentHash& identHash);
|
RouterProfile (const IdentHash& identHash);
|
||||||
|
RouterProfile& operator= (const RouterProfile& ) = default;
|
||||||
|
|
||||||
void Save ();
|
void Save ();
|
||||||
void Load ();
|
void Load ();
|
||||||
|
|
||||||
bool IsBad () const { return !m_NumTunnelsAgreed && m_NumTunnelsDeclined >= 5; };
|
bool IsBad () const;
|
||||||
|
|
||||||
void TunnelBuildResponse (uint8_t ret);
|
void TunnelBuildResponse (uint8_t ret);
|
||||||
void TunnelNonReplied ();
|
void TunnelNonReplied ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
boost::posix_time::ptime GetTime () const;
|
||||||
void UpdateTime ();
|
void UpdateTime ();
|
||||||
|
|
||||||
|
bool IsAlwaysDeclining () const { return !m_NumTunnelsAgreed && m_NumTunnelsDeclined >= 5; };
|
||||||
|
bool IsNonResponding () const { return m_NumTunnelsNonReplied > 20 && !(m_NumTunnelsAgreed + m_NumTunnelsDeclined); };
|
||||||
|
bool IsLowPartcipationRate () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user