Package net.i2p.router.tunnel.pool
Class TunnelPool
- java.lang.Object
-
- net.i2p.router.tunnel.pool.TunnelPool
-
- Direct Known Subclasses:
AliasedTunnelPool
public class TunnelPool extends Object
A group of tunnels for the router or a particular client, in a single direction. Public only for TunnelRenderer in router console.
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
_alive
protected RouterContext
_context
protected Log
_log
-
Constructor Summary
Constructors Constructor Description TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
addTunnel(TunnelInfo info)
Add to the pool.(package private) void
buildComplete(PooledTunnelCreatorConfig cfg)
Remove from the _inprogress list(package private) boolean
buildFallback()
This will build a fallback (zero-hop) tunnel ONLY if this pool is exploratory, or the settings allow it.(package private) PooledTunnelCreatorConfig
configureNewTunnel()
This only sets the peers and creation/expiration times in the configuration.(package private) int
countHowManyToBuild()
Gather the data to see how many tunnels to build, and then actually compute that value (delegated to the countHowManyToBuild function below)long
getLifetimeProcessed()
String
getRateName()
RateStat name for the bandwidth graphTunnelPoolSettings
getSettings()
TunnelInfo
getTunnel(TunnelId gatewayId)
(package private) int
getTunnelCount()
duplicate of size(), let's pick oneboolean
isAlive()
Is this pool running AND either exploratory, or tracked by the client manager? A pool will be alive but not tracked after the client manager removes it but before all the tunnels have expired.List<PooledTunnelCreatorConfig>
listPending()
list of tunnelInfo instances of tunnels currently being builtList<TunnelInfo>
listTunnels()
Return a list of tunnels in the poolprotected LeaseSet
locked_buildNewLeaseSet()
Build a leaseSet with the required tunnels that aren't about to expire.(package private) boolean
needFallback()
Do we really need more fallbacks? Used to prevent a zillion of them.(package private) void
refreshLeaseSet()
noop for outbound and exploratory(package private) void
removeTunnel(TunnelInfo info)
Remove from the pool.(package private) TunnelInfo
selectTunnel()
Pull a random tunnel out of the pool.(package private) TunnelInfo
selectTunnel(Hash closestTo)
Return the tunnel from the pool that is XOR-closet to the target.(package private) void
setSettings(TunnelPoolSettings settings)
(package private) void
shutdown()
int
size()
duplicate of getTunnelCount(), let's pick one(package private) void
startup()
Warning, this may be called more than once (without an intervening shutdown()) if the tunnel is stopped and then restarted by the client manager with the same Destination (i.e.String
toString()
(package private) void
tunnelFailed(TunnelInfo cfg)
Remove the tunnel and blame all the peers (not necessarily equally).(package private) void
tunnelFailed(TunnelInfo cfg, Hash blamePeer)
Remove the tunnel and blame only one peer.
-
-
-
Field Detail
-
_context
protected final RouterContext _context
-
_log
protected final Log _log
-
_alive
protected volatile boolean _alive
-
-
Constructor Detail
-
TunnelPool
TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel)
-
-
Method Detail
-
startup
void startup()
Warning, this may be called more than once (without an intervening shutdown()) if the tunnel is stopped and then restarted by the client manager with the same Destination (i.e. for servers or clients w/ persistent key, or restarting close-on-idle clients)
-
shutdown
void shutdown()
-
getRateName
public String getRateName()
RateStat name for the bandwidth graph- Returns:
- non-null
- Since:
- 0.9.35
-
selectTunnel
TunnelInfo selectTunnel()
Pull a random tunnel out of the pool. If there are none available but the pool is configured to allow 0hop tunnels, this builds a fake one and returns it.- Returns:
- null on failure, but it should always build and return a fallback
-
selectTunnel
TunnelInfo selectTunnel(Hash closestTo)
Return the tunnel from the pool that is XOR-closet to the target. By using this instead of the random selectTunnel(), we force some locality in OBEP-IBGW connections to minimize those connections network-wide. Does not check for backlogged next peer. Does not return an expired tunnel.- Returns:
- null on failure
- Since:
- 0.8.10
-
getTunnel
public TunnelInfo getTunnel(TunnelId gatewayId)
-
listTunnels
public List<TunnelInfo> listTunnels()
Return a list of tunnels in the pool- Returns:
- A copy of the list of TunnelInfo objects
-
needFallback
boolean needFallback()
Do we really need more fallbacks? Used to prevent a zillion of them. Does not check config, only call if config allows zero hop.
-
listPending
public List<PooledTunnelCreatorConfig> listPending()
list of tunnelInfo instances of tunnels currently being built
-
getTunnelCount
int getTunnelCount()
duplicate of size(), let's pick one
-
getSettings
public TunnelPoolSettings getSettings()
-
setSettings
void setSettings(TunnelPoolSettings settings)
-
isAlive
public boolean isAlive()
Is this pool running AND either exploratory, or tracked by the client manager? A pool will be alive but not tracked after the client manager removes it but before all the tunnels have expired.
-
size
public int size()
duplicate of getTunnelCount(), let's pick one
-
addTunnel
void addTunnel(TunnelInfo info)
Add to the pool.
-
removeTunnel
void removeTunnel(TunnelInfo info)
Remove from the pool.
-
tunnelFailed
void tunnelFailed(TunnelInfo cfg)
Remove the tunnel and blame all the peers (not necessarily equally). This may be called multiple times from TestJob.
-
tunnelFailed
void tunnelFailed(TunnelInfo cfg, Hash blamePeer)
Remove the tunnel and blame only one peer. This may be called multiple times.- Since:
- 0.8.13
-
refreshLeaseSet
void refreshLeaseSet()
noop for outbound and exploratory
-
buildFallback
boolean buildFallback()
This will build a fallback (zero-hop) tunnel ONLY if this pool is exploratory, or the settings allow it.- Returns:
- true if a fallback tunnel is built
-
locked_buildNewLeaseSet
protected LeaseSet locked_buildNewLeaseSet()
Build a leaseSet with the required tunnels that aren't about to expire. Caller must synchronize on _tunnels. The returned LeaseSet will be incomplete; it will not have the destination set and will not be signed. Only the leases will be included.- Returns:
- null on failure
-
getLifetimeProcessed
public long getLifetimeProcessed()
-
countHowManyToBuild
int countHowManyToBuild()
Gather the data to see how many tunnels to build, and then actually compute that value (delegated to the countHowManyToBuild function below)
-
configureNewTunnel
PooledTunnelCreatorConfig configureNewTunnel()
This only sets the peers and creation/expiration times in the configuration. For the crypto, see BuildRequestor and BuildMessageGenerator.- Returns:
- null on failure
-
buildComplete
void buildComplete(PooledTunnelCreatorConfig cfg)
Remove from the _inprogress list
-
-