mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-02 02:44:15 +00:00
implement SetCustomPeerSelector and ensure locking is good
This commit is contained in:
parent
ac88c1a8f1
commit
fa8548fe34
@ -331,8 +331,12 @@ namespace tunnel
|
|||||||
int numHops = isInbound ? m_NumInboundHops : m_NumOutboundHops;
|
int numHops = isInbound ? m_NumInboundHops : m_NumOutboundHops;
|
||||||
// peers is empty
|
// peers is empty
|
||||||
if (numHops <= 0) return true;
|
if (numHops <= 0) return true;
|
||||||
// custom peer selector in use
|
// custom peer selector in use ?
|
||||||
if (m_CustomPeerSelector) return m_CustomPeerSelector->SelectPeers(peers, numHops, isInbound);
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_CustomPeerSelectorMutex);
|
||||||
|
if (m_CustomPeerSelector)
|
||||||
|
return m_CustomPeerSelector->SelectPeers(peers, numHops, isInbound);
|
||||||
|
}
|
||||||
// explicit peers in use
|
// explicit peers in use
|
||||||
if (m_ExplicitPeers) return SelectExplicitPeers (peers, isInbound);
|
if (m_ExplicitPeers) return SelectExplicitPeers (peers, isInbound);
|
||||||
|
|
||||||
@ -483,6 +487,23 @@ namespace tunnel
|
|||||||
LogPrint (eLogDebug, "Tunnels: Creating paired inbound tunnel...");
|
LogPrint (eLogDebug, "Tunnels: Creating paired inbound tunnel...");
|
||||||
auto tunnel = tunnels.CreateInboundTunnel (std::make_shared<TunnelConfig>(outboundTunnel->GetInvertedPeers ()), outboundTunnel);
|
auto tunnel = tunnels.CreateInboundTunnel (std::make_shared<TunnelConfig>(outboundTunnel->GetInvertedPeers ()), outboundTunnel);
|
||||||
tunnel->SetTunnelPool (shared_from_this ());
|
tunnel->SetTunnelPool (shared_from_this ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TunnelPool::SetCustomPeerSelector(TunnelPeerSelector selector)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_CustomPeerSelectorMutex);
|
||||||
|
m_CustomPeerSelector = selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TunnelPool::UnsetCustomPeerSelector()
|
||||||
|
{
|
||||||
|
SetCustomPeerSelector(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TunnelPool::HasCustomPeerSelector()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_CustomPeerSelectorMutex);
|
||||||
|
return m_CustomPeerSelector != nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,10 +67,10 @@ namespace tunnel
|
|||||||
int GetNumOutboundTunnels () const { return m_NumOutboundTunnels; };
|
int GetNumOutboundTunnels () const { return m_NumOutboundTunnels; };
|
||||||
|
|
||||||
void SetCustomPeerSelector(TunnelPeerSelector selector);
|
void SetCustomPeerSelector(TunnelPeerSelector selector);
|
||||||
TunnelPeerSelector GetCustomPeerSelector() const { return m_CustomPeerSelector; }
|
void UnsetCustomPeerSelector();
|
||||||
|
bool HasCustomPeerSelector();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void CreateInboundTunnel ();
|
void CreateInboundTunnel ();
|
||||||
void CreateOutboundTunnel ();
|
void CreateOutboundTunnel ();
|
||||||
void CreatePairedInboundTunnel (std::shared_ptr<OutboundTunnel> outboundTunnel);
|
void CreatePairedInboundTunnel (std::shared_ptr<OutboundTunnel> outboundTunnel);
|
||||||
@ -92,6 +92,7 @@ namespace tunnel
|
|||||||
mutable std::mutex m_TestsMutex;
|
mutable std::mutex m_TestsMutex;
|
||||||
std::map<uint32_t, std::pair<std::shared_ptr<OutboundTunnel>, std::shared_ptr<InboundTunnel> > > m_Tests;
|
std::map<uint32_t, std::pair<std::shared_ptr<OutboundTunnel>, std::shared_ptr<InboundTunnel> > > m_Tests;
|
||||||
bool m_IsActive;
|
bool m_IsActive;
|
||||||
|
std::mutex m_CustomPeerSelectorMutex;
|
||||||
TunnelPeerSelector m_CustomPeerSelector;
|
TunnelPeerSelector m_CustomPeerSelector;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user