|
|
@ -91,10 +91,20 @@ namespace tunnel |
|
|
|
if (tunnels.empty ()) return nullptr; |
|
|
|
if (tunnels.empty ()) return nullptr; |
|
|
|
if (suggested && tunnels.count (suggested) > 0 && suggested->IsEstablished ()) |
|
|
|
if (suggested && tunnels.count (suggested) > 0 && suggested->IsEstablished ()) |
|
|
|
return suggested; |
|
|
|
return suggested; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator (); |
|
|
|
|
|
|
|
uint32_t ind = rnd.GenerateWord32 (0, tunnels.size ()/2), i = 0; |
|
|
|
|
|
|
|
typename TTunnels::value_type tunnel = nullptr; |
|
|
|
for (auto it: tunnels) |
|
|
|
for (auto it: tunnels) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (i >= ind) break; |
|
|
|
if (it->IsEstablished ()) |
|
|
|
if (it->IsEstablished ()) |
|
|
|
return it; |
|
|
|
{ |
|
|
|
return nullptr; |
|
|
|
tunnel = it; |
|
|
|
|
|
|
|
i++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return tunnel; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void TunnelPool::CreateTunnels () |
|
|
|
void TunnelPool::CreateTunnels () |
|
|
|