Browse Source

don't accept tunnels if bandwidth is exceeded

pull/165/head
orignal 9 years ago
parent
commit
47c3d5ed23
  1. 3
      I2NPProtocol.cpp
  2. 2
      NetDb.cpp
  3. 1
      RouterInfo.h
  4. 5
      Transports.cpp
  5. 2
      Transports.h

3
I2NPProtocol.cpp

@ -281,7 +281,8 @@ namespace i2p @@ -281,7 +281,8 @@ namespace i2p
i2p::crypto::ElGamalDecrypt (i2p::context.GetEncryptionPrivateKey (), record + BUILD_REQUEST_RECORD_ENCRYPTED_OFFSET, clearText);
// replace record to reply
if (i2p::context.AcceptsTunnels () &&
i2p::tunnel::tunnels.GetTransitTunnels ().size () <= MAX_NUM_TRANSIT_TUNNELS)
i2p::tunnel::tunnels.GetTransitTunnels ().size () <= MAX_NUM_TRANSIT_TUNNELS &&
!i2p::transport::transports.IsBandwidthExceeded ())
{
i2p::tunnel::TransitTunnel * transitTunnel =
i2p::tunnel::CreateTransitTunnel (

2
NetDb.cpp

@ -917,7 +917,7 @@ namespace data @@ -917,7 +917,7 @@ namespace data
[compatibleWith](std::shared_ptr<const RouterInfo> router)->bool
{
return !router->IsHidden () && router != compatibleWith &&
router->IsCompatible (*compatibleWith) && (router->GetCaps () & RouterInfo::eHighBandwidth);
router->IsCompatible (*compatibleWith) && router->IsHighBandwidth ();
});
}

1
RouterInfo.h

@ -118,6 +118,7 @@ namespace data @@ -118,6 +118,7 @@ namespace data
bool IsIntroducer () const { return m_Caps & eSSUIntroducer; };
bool IsPeerTesting () const { return m_Caps & eSSUTesting; };
bool IsHidden () const { return m_Caps & eHidden; };
bool IsHighBandwidth () const { return m_Caps & RouterInfo::eHighBandwidth; };
uint8_t GetCaps () const { return m_Caps; };
void SetCaps (uint8_t caps);

5
Transports.cpp

@ -199,6 +199,11 @@ namespace transport @@ -199,6 +199,11 @@ namespace transport
m_LastOutBandwidthUpdateBytes = m_TotalSentBytes;
}
bool Transports::IsBandwidthExceeded () const
{
if (i2p::context.GetRouterInfo ().IsHighBandwidth ()) return false;
return std::max (m_InBandwidth, m_OutBandwidth) > LOW_BANDWIDTH_LIMIT;
}
void Transports::SendMessage (const i2p::data::IdentHash& ident, i2p::I2NPMessage * msg)
{

2
Transports.h

@ -68,6 +68,7 @@ namespace transport @@ -68,6 +68,7 @@ namespace transport
};
const size_t SESSION_CREATION_TIMEOUT = 10; // in seconds
const uint32_t LOW_BANDWIDTH_LIMIT = 32*1024; // 32KBs
class Transports
{
public:
@ -96,6 +97,7 @@ namespace transport @@ -96,6 +97,7 @@ namespace transport
uint64_t GetTotalReceivedBytes () const { return m_TotalReceivedBytes; };
uint32_t GetInBandwidth () const { return m_InBandwidth; }; // bytes per second
uint32_t GetOutBandwidth () const { return m_OutBandwidth; }; // bytes per second
bool IsBandwidthExceeded () const;
private:

Loading…
Cancel
Save