Package net.i2p.router.tunnel.pool
Class TunnelPeerSelector
java.lang.Object
net.i2p.router.tunnel.pool.ConnectChecker
net.i2p.router.tunnel.pool.TunnelPeerSelector
- Direct Known Subclasses:
ClientPeerSelector
,ExploratoryPeerSelector
Coordinate the selection of peers to go into a tunnel for one particular
pool.
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
A Set of Hashes that automatically adds to the Set in the contains() check. -
Field Summary
Fields inherited from class net.i2p.router.tunnel.pool.ConnectChecker
ANY_V4, ctx, log
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
allowAsIBGW
(Hash h) Should we allow as IBGW? This just checks for the "R" capability and IPv4 support.protected boolean
allowAsOBEP
(Hash h) Should we allow as OBEP? This just checks for IPv4 support.protected boolean
checkTunnel
(boolean isInbound, boolean isExploratory, List<Hash> tunnel) Connectivity check.protected boolean
filterSlow
(boolean isInbound, boolean isExploratory) do we want to skip peers that are slow?getClosestHopExclude
(boolean isInbound, Set<Hash> toAdd) Pick peers that we want to avoid for the first OB hop or last IB hop.getExclude
(boolean isInbound, boolean isExploratory) As of 0.9.58, this returns a set populated only by TunnelManager.selectPeersInTooManyTunnels(), for passing to ProfileOrganizer.protected int
getLength
(TunnelPoolSettings settings) protected boolean
Are we IPv6 only?protected void
orderPeers
(List<Hash> rv, SessionKey key) see HashComparatorselectExplicit
(TunnelPoolSettings settings, int length) For debugging, also possibly for restricted routes? Needs analysis and testingselectPeers
(TunnelPoolSettings settings) Which peers should go into the next tunnel for the given settings?static boolean
shouldExclude
(RouterContext ctx, RouterInfo peer) Should the peer be excluded based on its published caps? Warning, this is also called by ProfileOrganizer.isSelectable()protected boolean
shouldSelectExplicit
(TunnelPoolSettings settings) For debugging, also possibly for restricted routes? Needs analysis and testingMethods inherited from class net.i2p.router.tunnel.pool.ConnectChecker
canConnect, canConnect, canConnect, getInboundMask, getOutboundMask, isNTCPDisabled, isSSUDisabled
-
Constructor Details
-
TunnelPeerSelector
-
-
Method Details
-
selectPeers
Which peers should go into the next tunnel for the given settings?- Returns:
- ordered list of Hash objects (one per peer) specifying what order they should appear in a tunnel (ENDPOINT FIRST). This includes the local router in the list. If there are no tunnels or peers to build through, and the settings reject 0 hop tunnels, this will return null.
-
getLength
- Returns:
- randomized number of hops 0-7, not including ourselves
-
shouldSelectExplicit
For debugging, also possibly for restricted routes? Needs analysis and testing- Returns:
- usually false
-
selectExplicit
For debugging, also possibly for restricted routes? Needs analysis and testing- Returns:
- the peers
-
getExclude
As of 0.9.58, this returns a set populated only by TunnelManager.selectPeersInTooManyTunnels(), for passing to ProfileOrganizer. The set will be populated via the contains() calls. -
isIPv6Only
protected boolean isIPv6Only()Are we IPv6 only?- Since:
- 0.9.34
-
allowAsOBEP
Should we allow as OBEP? This just checks for IPv4 support. Will return false for IPv6-only. This is intended for tunnel candidates, where we already have the RI. Will not force RI lookups. Default true.- Since:
- 0.9.34, protected since 0.9.58 for ClientPeerSelector
-
allowAsIBGW
Should we allow as IBGW? This just checks for the "R" capability and IPv4 support. Will return false for hidden or IPv6-only. This is intended for tunnel candidates, where we already have the RI. Will not force RI lookups. Default true.- Since:
- 0.9.34, protected since 0.9.58 for ClientPeerSelector
-
getClosestHopExclude
Pick peers that we want to avoid for the first OB hop or last IB hop. There's several cases of importance:- Inbound and we are hidden - Exclude all unless connected. This is taken care of in ClientPeerSelector and TunnelPeerSelector selectPeers(), not here.
- We are IPv6-only. Exclude all v4-only peers, unless connected This is taken care of here.
- We have NTCP or SSU disabled. Exclude all incompatible peers, unless connected This is taken care of here.
- Minimum version check, if we are some brand-new sig type, or are using some new tunnel build method. Not currently used, but this is where to implement the checks if needed. Make sure that ClientPeerSelector and TunnelPeerSelector selectPeers() call this when needed.
- Parameters:
isInbound
-- Returns:
- non-null
- Since:
- 0.9.17
-
shouldExclude
Should the peer be excluded based on its published caps? Warning, this is also called by ProfileOrganizer.isSelectable() -
filterSlow
protected boolean filterSlow(boolean isInbound, boolean isExploratory) do we want to skip peers that are slow?- Returns:
- true unless configured otherwise
-
orderPeers
see HashComparator -
checkTunnel
Connectivity check. Check that each hop can connect to the next, including us. Check that the OBEP is not IPv6-only, and the IBGW is reachable and not hidden or IPv6-only. Tells the profile manager to blame the hop, and returns false on failure.- Parameters:
tunnel
- ENDPOINT FIRST, GATEWAY LAST!!!!, length 2 or greater- Returns:
- ok
- Since:
- 0.9.34
-