|
|
|
@ -11,7 +11,6 @@ namespace data
@@ -11,7 +11,6 @@ namespace data
|
|
|
|
|
{ |
|
|
|
|
RouterProfile::RouterProfile (const IdentHash& identHash): |
|
|
|
|
m_IdentHash (identHash), m_LastUpdateTime (boost::posix_time::second_clock::local_time()), |
|
|
|
|
m_LastDeclinedTime (boost::posix_time::min_date_time), |
|
|
|
|
m_NumTunnelsAgreed (0), m_NumTunnelsDeclined (0), m_NumTunnelsNonReplied (0), |
|
|
|
|
m_NumTimesTaken (0), m_NumTimesRejected (0) |
|
|
|
|
{ |
|
|
|
@ -140,10 +139,7 @@ namespace data
@@ -140,10 +139,7 @@ namespace data
|
|
|
|
|
{ |
|
|
|
|
UpdateTime (); |
|
|
|
|
if (ret > 0) |
|
|
|
|
{ |
|
|
|
|
m_LastDeclinedTime = m_LastUpdateTime; |
|
|
|
|
m_NumTunnelsDeclined++; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
m_NumTunnelsAgreed++; |
|
|
|
|
} |
|
|
|
@ -167,19 +163,15 @@ namespace data
@@ -167,19 +163,15 @@ namespace data
|
|
|
|
|
|
|
|
|
|
bool RouterProfile::IsBad () |
|
|
|
|
{ |
|
|
|
|
auto t = GetTime (); |
|
|
|
|
auto elapsedTime = (t - m_LastUpdateTime).total_seconds (); |
|
|
|
|
if (elapsedTime > 1800) |
|
|
|
|
auto isBad = IsAlwaysDeclining () || IsLowPartcipationRate () /*|| IsLowReplyRate ()*/; |
|
|
|
|
if (isBad && m_NumTimesRejected > 10*(m_NumTimesTaken + 1)) |
|
|
|
|
{ |
|
|
|
|
m_NumTunnelsNonReplied = 0; // drop non-replied after 30 minutes of inactivity
|
|
|
|
|
if (elapsedTime > 14400) // drop agreed and declined after 4 hours of inactivity
|
|
|
|
|
{ |
|
|
|
|
m_NumTunnelsAgreed = 0; |
|
|
|
|
m_NumTunnelsDeclined = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
auto isBad = IsAlwaysDeclining () || IsLowPartcipationRate () || IsLowReplyRate () || |
|
|
|
|
((t - m_LastDeclinedTime).total_seconds () < 300); // declined in last 5 minutes
|
|
|
|
|
// reset profile
|
|
|
|
|
m_NumTunnelsAgreed = 0; |
|
|
|
|
m_NumTunnelsDeclined = 0; |
|
|
|
|
m_NumTunnelsNonReplied = 0; |
|
|
|
|
isBad = false; |
|
|
|
|
} |
|
|
|
|
if (isBad) m_NumTimesRejected++; else m_NumTimesTaken++; |
|
|
|
|
return isBad; |
|
|
|
|
} |
|
|
|
|