net.i2p.router.tunnel.pool

## Class TunnelPool

- java.lang.Object
- - net.i2p.router.tunnel.pool.TunnelPool

-     public class TunnelPool
      extends Object

  A group of tunnels for the router or a particular client, in a single direction.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and 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()`
    `(package private) PooledTunnelCreatorConfig` | `configureNewTunnel()`
    `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()`
    `(package private) TunnelPoolManager` | `getManager()`
    `TunnelPeerSelector` | `getSelector()`
    `TunnelPoolSettings` | `getSettings()`
    `TunnelInfo` | `getTunnel(TunnelId gatewayId)`
    `(package private) int` | `getTunnelCount()` duplicate of size(), let's pick one
    `boolean` | `isAlive()`
    `List` | `listPending()` list of tunnelInfo instances of tunnels currently being built
    `List<TunnelInfo>` | `listTunnels()` Return a list of tunnels in the pool
    `boolean` | `needFallback()` Do we really need more fallbacks? Used to prevent a zillion of them
    `(package private) void` | `refreshLeaseSet()` noop for outbound
    `(package private) void` | `refreshSettings()`
    `(package private) void` | `removeTunnel(TunnelInfo info)` Remove from the pool.
    `TunnelInfo` | `selectTunnel()` Pull a random tunnel out of the pool.
    `void` | `setSettings(TunnelPoolSettings settings)`
    `void` | `shutdown()`
    `int` | `size()` duplicate of getTunnelCount(), let's pick one
    `void` | `startup()`
    `String` | `toString()`
    `void` | `tunnelFailed(PooledTunnelCreatorConfig cfg)` This may be called multiple times from TestJob
    `(package private) void` | `updateRate()`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### TunnelPool

          public TunnelPool(RouterContext ctx,
                    TunnelPoolManager mgr,
                    TunnelPoolSettings settings,
                    TunnelPeerSelector sel)

  - ### Method Detail

    - #### startup

          public void startup()

    - #### shutdown

          public void shutdown()

    - #### getManager

          TunnelPoolManager getManager()

    - #### refreshSettings

          void refreshSettings()

    - #### selectTunnel

          public 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.

    - #### 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

          public boolean needFallback()

      Do we really need more fallbacks? Used to prevent a zillion of them

    - #### listPending

          public List 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

          public void setSettings(TunnelPoolSettings settings)

    - #### getSelector

          public TunnelPeerSelector getSelector()

    - #### isAlive

          public boolean isAlive()

    - #### 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

          public void tunnelFailed(PooledTunnelCreatorConfig cfg)

      This may be called multiple times from TestJob

    - #### updateRate

          void updateRate()

    - #### refreshLeaseSet

          void refreshLeaseSet()

      noop for outbound

    - #### buildFallback

          boolean buildFallback()

      Returns:
        true if a fallback tunnel is built

    - #### getLifetimeProcessed

          public long getLifetimeProcessed()

    - #### countHowManyToBuild

          public 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`