Browse Source

don't include unconfirmed floodfill to the list if we have enough floodfills already

pull/1925/head
orignal 2 years ago
parent
commit
b6de474fda
  1. 1
      libi2pd/NTCP2.cpp
  2. 6
      libi2pd/NetDb.cpp
  3. 1
      libi2pd/NetDb.hpp
  4. 10
      libi2pd/Profiling.cpp
  5. 6
      libi2pd/Profiling.h
  6. 1
      libi2pd/SSU2Session.cpp

1
libi2pd/NTCP2.cpp

@ -718,6 +718,7 @@ namespace transport @@ -718,6 +718,7 @@ namespace transport
Terminate ();
return;
}
ri.GetProfile ()->Connected ();
i2p::data::UpdateStaticKey (addr->s, ri.GetIdentHash ()); // good static key
i2p::data::netdb.PostI2NPMsg (CreateI2NPMessage (eI2NPDummyMsg, buf.data () + 3, size)); // TODO: should insert ri and not parse it twice
// TODO: process options

6
libi2pd/NetDb.cpp

@ -290,8 +290,10 @@ namespace data @@ -290,8 +290,10 @@ namespace data
if (inserted)
{
LogPrint (eLogInfo, "NetDb: RouterInfo added: ", ident.ToBase64());
if (r->IsFloodfill () && r->IsEligibleFloodfill ())
{
if (r->IsFloodfill () && r->IsEligibleFloodfill () &&
(m_Floodfills.GetSize () < NETDB_NUM_FLOODFILLS_THRESHOLD ||
r->GetProfile ()->IsReal ())) // don't insert floodfill until it's known real if we have enough
{
std::unique_lock<std::mutex> l(m_FloodfillsMutex);
m_Floodfills.Insert (r);
}

1
libi2pd/NetDb.hpp

@ -38,6 +38,7 @@ namespace data @@ -38,6 +38,7 @@ namespace data
{
const int NETDB_MIN_ROUTERS = 90;
const int NETDB_MIN_FLOODFILLS = 5;
const int NETDB_NUM_FLOODFILLS_THRESHOLD = 1000;
const int NETDB_FLOODFILL_EXPIRATION_TIMEOUT = 60 * 60; // 1 hour, in seconds
const int NETDB_MIN_EXPIRATION_TIMEOUT = 90 * 60; // 1.5 hours
const int NETDB_MAX_EXPIRATION_TIMEOUT = 27 * 60 * 60; // 27 hours

10
libi2pd/Profiling.cpp

@ -35,7 +35,7 @@ namespace data @@ -35,7 +35,7 @@ namespace data
m_LastUpdateTime (GetTime ()), m_IsUpdated (false),
m_LastDeclineTime (0), m_LastUnreachableTime (0),
m_NumTunnelsAgreed (0), m_NumTunnelsDeclined (0), m_NumTunnelsNonReplied (0),
m_NumTimesTaken (0), m_NumTimesRejected (0)
m_NumTimesTaken (0), m_NumTimesRejected (0), m_HasConnected (false)
{
}
@ -52,6 +52,7 @@ namespace data @@ -52,6 +52,7 @@ namespace data
participation.put (PEER_PROFILE_PARTICIPATION_AGREED, m_NumTunnelsAgreed);
participation.put (PEER_PROFILE_PARTICIPATION_DECLINED, m_NumTunnelsDeclined);
participation.put (PEER_PROFILE_PARTICIPATION_NON_REPLIED, m_NumTunnelsNonReplied);
participation.put (PEER_PROFILE_USAGE_CONNECTED, m_HasConnected);
boost::property_tree::ptree usage;
usage.put (PEER_PROFILE_USAGE_TAKEN, m_NumTimesTaken);
usage.put (PEER_PROFILE_USAGE_REJECTED, m_NumTimesRejected);
@ -112,6 +113,7 @@ namespace data @@ -112,6 +113,7 @@ namespace data
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);
m_HasConnected = participations.get (PEER_PROFILE_USAGE_CONNECTED, false);
}
catch (boost::property_tree::ptree_bad_path& ex)
{
@ -167,6 +169,12 @@ namespace data @@ -167,6 +169,12 @@ namespace data
UpdateTime ();
}
void RouterProfile::Connected ()
{
m_HasConnected = true;
UpdateTime ();
}
bool RouterProfile::IsLowPartcipationRate () const
{
return 4*m_NumTunnelsAgreed < m_NumTunnelsDeclined; // < 20% rate

6
libi2pd/Profiling.h

@ -28,7 +28,8 @@ namespace data @@ -28,7 +28,8 @@ namespace data
const char PEER_PROFILE_PARTICIPATION_NON_REPLIED[] = "nonreplied";
const char PEER_PROFILE_USAGE_TAKEN[] = "taken";
const char PEER_PROFILE_USAGE_REJECTED[] = "rejected";
const char PEER_PROFILE_USAGE_CONNECTED[] = "connected";
const int PEER_PROFILE_EXPIRATION_TIMEOUT = 36; // in hours (1.5 days)
const int PEER_PROFILE_AUTOCLEAN_TIMEOUT = 6 * 3600; // in seconds (6 hours)
const int PEER_PROFILE_AUTOCLEAN_VARIANCE = 3600; // in seconds (1 hour)
@ -48,11 +49,13 @@ namespace data @@ -48,11 +49,13 @@ namespace data
bool IsBad ();
bool IsUnreachable ();
bool IsReal () const { return m_HasConnected || m_NumTunnelsAgreed > 0 || m_NumTunnelsDeclined > 0; }
void TunnelBuildResponse (uint8_t ret);
void TunnelNonReplied ();
void Unreachable ();
void Connected ();
boost::posix_time::ptime GetLastUpdateTime () const { return m_LastUpdateTime; };
bool IsUpdated () const { return m_IsUpdated; };
@ -78,6 +81,7 @@ namespace data @@ -78,6 +81,7 @@ namespace data
// usage
uint32_t m_NumTimesTaken;
uint32_t m_NumTimesRejected;
bool m_HasConnected; // incoming connection received
};
std::shared_ptr<RouterProfile> GetRouterProfile (const IdentHash& identHash);

1
libi2pd/SSU2Session.cpp

@ -1075,6 +1075,7 @@ namespace transport @@ -1075,6 +1075,7 @@ namespace transport
return false;
}
SetRemoteIdentity (ri->GetRouterIdentity ());
ri->GetProfile ()->Connected ();
i2p::data::UpdateStaticKey (m_Address->s, ri->GetIdentHash ()); // good static key
AdjustMaxPayloadSize ();
m_Server.AddSessionByRouterHash (shared_from_this ()); // we know remote router now

Loading…
Cancel
Save