net.i2p.router.tunnel.pool
Class TunnelPool

java.lang.Object
  extended by 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
protected  boolean _alive
           
protected  RouterContext _context
           
protected  Log _log
           
 
Constructor Summary
TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel)
           
 
Method Summary
(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()
           
(package private)  PooledTunnelCreatorConfig configureNewTunnel()
           
(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()
           
 TunnelPoolSettings getSettings()
           
 TunnelInfo getTunnel(TunnelId gatewayId)
           
(package private)  int getTunnelCount()
          duplicate of size(), let's pick one
 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.
 List<PooledTunnelCreatorConfig> listPending()
          list of tunnelInfo instances of tunnels currently being built
 List<TunnelInfo> listTunnels()
          Return a list of tunnels in the pool
protected  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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

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()

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:
list of TunnelInfo objects

needFallback

boolean needFallback()
Do we really need more fallbacks? Used to prevent a zillion of them


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()
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.

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()
Returns:
null on failure

buildComplete

void buildComplete(PooledTunnelCreatorConfig cfg)
Remove from the _inprogress list


toString

public String toString()
Overrides:
toString in class Object