mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 08:00:38 +03:00
Merge pull request #600 from brain5lug/openssl
copy elimination for ranges #part4
This commit is contained in:
commit
35e8a027ad
15
Tunnel.cpp
15
Tunnel.cpp
@ -345,7 +345,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
std::shared_ptr<InboundTunnel> tunnel;
|
std::shared_ptr<InboundTunnel> tunnel;
|
||||||
size_t minReceived = 0;
|
size_t minReceived = 0;
|
||||||
for (auto it : m_InboundTunnels)
|
for (const auto& it : m_InboundTunnels)
|
||||||
{
|
{
|
||||||
if (!it->IsEstablished ()) continue;
|
if (!it->IsEstablished ()) continue;
|
||||||
if (!tunnel || it->GetNumReceivedBytes () < minReceived)
|
if (!tunnel || it->GetNumReceivedBytes () < minReceived)
|
||||||
@ -362,7 +362,7 @@ namespace tunnel
|
|||||||
if (m_OutboundTunnels.empty ()) return nullptr;
|
if (m_OutboundTunnels.empty ()) return nullptr;
|
||||||
uint32_t ind = rand () % m_OutboundTunnels.size (), i = 0;
|
uint32_t ind = rand () % m_OutboundTunnels.size (), i = 0;
|
||||||
std::shared_ptr<OutboundTunnel> tunnel;
|
std::shared_ptr<OutboundTunnel> tunnel;
|
||||||
for (auto it: m_OutboundTunnels)
|
for (const auto& it: m_OutboundTunnels)
|
||||||
{
|
{
|
||||||
if (it->IsEstablished ())
|
if (it->IsEstablished ())
|
||||||
{
|
{
|
||||||
@ -586,7 +586,7 @@ namespace tunnel
|
|||||||
m_NumFailedTunnelCreations++;
|
m_NumFailedTunnelCreations++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
it++;
|
++it;
|
||||||
break;
|
break;
|
||||||
case eTunnelStateBuildFailed:
|
case eTunnelStateBuildFailed:
|
||||||
LogPrint (eLogDebug, "Tunnel: pending build request ", it->first, " failed, deleted");
|
LogPrint (eLogDebug, "Tunnel: pending build request ", it->first, " failed, deleted");
|
||||||
@ -595,7 +595,7 @@ namespace tunnel
|
|||||||
break;
|
break;
|
||||||
case eTunnelStateBuildReplyReceived:
|
case eTunnelStateBuildReplyReceived:
|
||||||
// intermediate state, will be either established of build failed
|
// intermediate state, will be either established of build failed
|
||||||
it++;
|
++it;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// success
|
// success
|
||||||
@ -635,7 +635,7 @@ namespace tunnel
|
|||||||
if (ts + TUNNEL_EXPIRATION_THRESHOLD > tunnel->GetCreationTime () + TUNNEL_EXPIRATION_TIMEOUT)
|
if (ts + TUNNEL_EXPIRATION_THRESHOLD > tunnel->GetCreationTime () + TUNNEL_EXPIRATION_TIMEOUT)
|
||||||
tunnel->SetState (eTunnelStateExpiring);
|
tunnel->SetState (eTunnelStateExpiring);
|
||||||
}
|
}
|
||||||
it++;
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -738,9 +738,8 @@ namespace tunnel
|
|||||||
void Tunnels::ManageTunnelPools ()
|
void Tunnels::ManageTunnelPools ()
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_PoolsMutex);
|
std::unique_lock<std::mutex> l(m_PoolsMutex);
|
||||||
for (auto it: m_Pools)
|
for (auto& pool : m_Pools)
|
||||||
{
|
{
|
||||||
auto pool = it;
|
|
||||||
if (pool && pool->IsActive ())
|
if (pool && pool->IsActive ())
|
||||||
{
|
{
|
||||||
pool->CreateTunnels ();
|
pool->CreateTunnels ();
|
||||||
@ -856,7 +855,7 @@ namespace tunnel
|
|||||||
int timeout = 0;
|
int timeout = 0;
|
||||||
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
|
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
// TODO: possible race condition with I2PControl
|
// TODO: possible race condition with I2PControl
|
||||||
for (auto it: m_TransitTunnels)
|
for (const auto& it : m_TransitTunnels)
|
||||||
{
|
{
|
||||||
int t = it->GetCreationTime () + TUNNEL_EXPIRATION_TIMEOUT - ts;
|
int t = it->GetCreationTime () + TUNNEL_EXPIRATION_TIMEOUT - ts;
|
||||||
if (t > timeout) timeout = t;
|
if (t > timeout) timeout = t;
|
||||||
|
@ -197,7 +197,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
m_Buffer.CompleteCurrentTunnelDataMessage ();
|
m_Buffer.CompleteCurrentTunnelDataMessage ();
|
||||||
auto tunnelMsgs = m_Buffer.GetTunnelDataMsgs ();
|
auto tunnelMsgs = m_Buffer.GetTunnelDataMsgs ();
|
||||||
for (auto tunnelMsg : tunnelMsgs)
|
for (auto& tunnelMsg : tunnelMsgs)
|
||||||
{
|
{
|
||||||
m_Tunnel->EncryptTunnelMsg (tunnelMsg, tunnelMsg);
|
m_Tunnel->EncryptTunnelMsg (tunnelMsg, tunnelMsg);
|
||||||
tunnelMsg->FillI2NPMessageHeader (eI2NPTunnelData);
|
tunnelMsg->FillI2NPMessageHeader (eI2NPTunnelData);
|
||||||
|
@ -49,13 +49,13 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
||||||
for (auto it: m_InboundTunnels)
|
for (auto& it: m_InboundTunnels)
|
||||||
it->SetTunnelPool (nullptr);
|
it->SetTunnelPool (nullptr);
|
||||||
m_InboundTunnels.clear ();
|
m_InboundTunnels.clear ();
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
||||||
for (auto it: m_OutboundTunnels)
|
for (auto& it: m_OutboundTunnels)
|
||||||
it->SetTunnelPool (nullptr);
|
it->SetTunnelPool (nullptr);
|
||||||
m_OutboundTunnels.clear ();
|
m_OutboundTunnels.clear ();
|
||||||
}
|
}
|
||||||
@ -78,7 +78,7 @@ namespace tunnel
|
|||||||
if (expiredTunnel)
|
if (expiredTunnel)
|
||||||
{
|
{
|
||||||
expiredTunnel->SetTunnelPool (nullptr);
|
expiredTunnel->SetTunnelPool (nullptr);
|
||||||
for (auto it: m_Tests)
|
for (auto& it: m_Tests)
|
||||||
if (it.second.second == expiredTunnel) it.second.second = nullptr;
|
if (it.second.second == expiredTunnel) it.second.second = nullptr;
|
||||||
|
|
||||||
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
||||||
@ -101,7 +101,7 @@ namespace tunnel
|
|||||||
if (expiredTunnel)
|
if (expiredTunnel)
|
||||||
{
|
{
|
||||||
expiredTunnel->SetTunnelPool (nullptr);
|
expiredTunnel->SetTunnelPool (nullptr);
|
||||||
for (auto it: m_Tests)
|
for (auto& it: m_Tests)
|
||||||
if (it.second.first == expiredTunnel) it.second.first = nullptr;
|
if (it.second.first == expiredTunnel) it.second.first = nullptr;
|
||||||
|
|
||||||
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
||||||
@ -114,7 +114,7 @@ namespace tunnel
|
|||||||
std::vector<std::shared_ptr<InboundTunnel> > v;
|
std::vector<std::shared_ptr<InboundTunnel> > v;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
||||||
for (auto it : m_InboundTunnels)
|
for (const auto& it : m_InboundTunnels)
|
||||||
{
|
{
|
||||||
if (i >= num) break;
|
if (i >= num) break;
|
||||||
if (it->IsEstablished ())
|
if (it->IsEstablished ())
|
||||||
@ -144,7 +144,7 @@ namespace tunnel
|
|||||||
if (tunnels.empty ()) return nullptr;
|
if (tunnels.empty ()) return nullptr;
|
||||||
uint32_t ind = rand () % (tunnels.size ()/2 + 1), i = 0;
|
uint32_t ind = rand () % (tunnels.size ()/2 + 1), i = 0;
|
||||||
typename TTunnels::value_type tunnel = nullptr;
|
typename TTunnels::value_type tunnel = nullptr;
|
||||||
for (auto it: tunnels)
|
for (const auto& it: tunnels)
|
||||||
{
|
{
|
||||||
if (it->IsEstablished () && it != excluded)
|
if (it->IsEstablished () && it != excluded)
|
||||||
{
|
{
|
||||||
@ -164,7 +164,7 @@ namespace tunnel
|
|||||||
if (old)
|
if (old)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
||||||
for (auto it: m_OutboundTunnels)
|
for (const auto& it: m_OutboundTunnels)
|
||||||
if (it->IsEstablished () && old->GetEndpointIdentHash () == it->GetEndpointIdentHash ())
|
if (it->IsEstablished () && old->GetEndpointIdentHash () == it->GetEndpointIdentHash ())
|
||||||
{
|
{
|
||||||
tunnel = it;
|
tunnel = it;
|
||||||
@ -182,7 +182,7 @@ namespace tunnel
|
|||||||
int num = 0;
|
int num = 0;
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
||||||
for (auto it : m_InboundTunnels)
|
for (const auto& it : m_InboundTunnels)
|
||||||
if (it->IsEstablished ()) num++;
|
if (it->IsEstablished ()) num++;
|
||||||
}
|
}
|
||||||
for (int i = num; i < m_NumInboundTunnels; i++)
|
for (int i = num; i < m_NumInboundTunnels; i++)
|
||||||
@ -191,7 +191,7 @@ namespace tunnel
|
|||||||
num = 0;
|
num = 0;
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
||||||
for (auto it : m_OutboundTunnels)
|
for (const auto& it : m_OutboundTunnels)
|
||||||
if (it->IsEstablished ()) num++;
|
if (it->IsEstablished ()) num++;
|
||||||
}
|
}
|
||||||
for (int i = num; i < m_NumOutboundTunnels; i++)
|
for (int i = num; i < m_NumOutboundTunnels; i++)
|
||||||
@ -203,11 +203,10 @@ namespace tunnel
|
|||||||
decltype(m_Tests) tests;
|
decltype(m_Tests) tests;
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_TestsMutex);
|
std::unique_lock<std::mutex> l(m_TestsMutex);
|
||||||
tests = m_Tests;
|
tests.swap(m_Tests);
|
||||||
m_Tests.clear ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto it: tests)
|
for (auto& it: tests)
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "Tunnels: test of tunnel ", it.first, " failed");
|
LogPrint (eLogWarning, "Tunnels: test of tunnel ", it.first, " failed");
|
||||||
// if test failed again with another tunnel we consider it failed
|
// if test failed again with another tunnel we consider it failed
|
||||||
@ -248,12 +247,12 @@ namespace tunnel
|
|||||||
if ((*it1)->IsFailed ())
|
if ((*it1)->IsFailed ())
|
||||||
{
|
{
|
||||||
failed = true;
|
failed = true;
|
||||||
it1++;
|
++it1;
|
||||||
}
|
}
|
||||||
if ((*it2)->IsFailed ())
|
if ((*it2)->IsFailed ())
|
||||||
{
|
{
|
||||||
failed = true;
|
failed = true;
|
||||||
it2++;
|
++it2;
|
||||||
}
|
}
|
||||||
if (!failed)
|
if (!failed)
|
||||||
{
|
{
|
||||||
@ -265,7 +264,7 @@ namespace tunnel
|
|||||||
}
|
}
|
||||||
(*it1)->SendTunnelDataMsg ((*it2)->GetNextIdentHash (), (*it2)->GetNextTunnelID (),
|
(*it1)->SendTunnelDataMsg ((*it2)->GetNextIdentHash (), (*it2)->GetNextTunnelID (),
|
||||||
CreateDeliveryStatusMsg (msgID));
|
CreateDeliveryStatusMsg (msgID));
|
||||||
it1++; it2++;
|
++it1; ++it2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
UPnP.cpp
8
UPnP.cpp
@ -122,8 +122,8 @@ namespace transport
|
|||||||
|
|
||||||
void UPnP::PortMapping ()
|
void UPnP::PortMapping ()
|
||||||
{
|
{
|
||||||
auto a = context.GetRouterInfo().GetAddresses();
|
const auto& a = context.GetRouterInfo().GetAddresses();
|
||||||
for (auto address : a)
|
for (const auto& address : a)
|
||||||
{
|
{
|
||||||
if (!address->host.is_v6 ())
|
if (!address->host.is_v6 ())
|
||||||
TryPortMapping (address);
|
TryPortMapping (address);
|
||||||
@ -139,8 +139,8 @@ namespace transport
|
|||||||
|
|
||||||
void UPnP::CloseMapping ()
|
void UPnP::CloseMapping ()
|
||||||
{
|
{
|
||||||
auto a = context.GetRouterInfo().GetAddresses();
|
const auto& a = context.GetRouterInfo().GetAddresses();
|
||||||
for (auto address : a)
|
for (const auto& address : a)
|
||||||
{
|
{
|
||||||
if (!address->host.is_v6 ())
|
if (!address->host.is_v6 ())
|
||||||
CloseMapping (address);
|
CloseMapping (address);
|
||||||
|
Loading…
Reference in New Issue
Block a user