## Uses of Interface
net.i2p.router.TunnelInfo

- Packages that use TunnelInfo
  Package | Description
  --- | ---
  net.i2p.router | The I2P router application handles I2P network communication.
  net.i2p.router.dummy | Dummy implementations and stub classes for testing purposes.
  net.i2p.router.message | Garlic message creation, parsing, and source routing for I2P communications.
  net.i2p.router.networkdb.kademlia | Kademlia DHT implementation and floodfill router functionality for I2P.
  net.i2p.router.tunnel | Core tunnel management, message processing, and encryption for I2P's anonymous routing system.
  net.i2p.router.tunnel.pool | Tunnel pool management, creation, and peer selection for I2P's anonymous routing system.

- - ### Uses of TunnelInfo in net.i2p.router

    Methods in net.i2p.router that return TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `TunnelInfo` | TunnelManagerFacade.`selectInboundExploratoryTunnel(Hash closestTo)` Pick the inbound exploratory tunnel with the gateway closest to the given hash.
    `TunnelInfo` | TunnelManagerFacade.`selectInboundTunnel()` Pick a random inbound exploratory tunnel
    `TunnelInfo` | TunnelManagerFacade.`selectInboundTunnel(Hash destination)` Pick a random inbound tunnel from the given destination's pool
    `TunnelInfo` | TunnelManagerFacade.`selectInboundTunnel(Hash destination, Hash closestTo)` Pick the inbound tunnel with the gateway closest to the given hash from the given destination's pool.
    `TunnelInfo` | TunnelManagerFacade.`selectOutboundExploratoryTunnel(Hash closestTo)` Pick the outbound exploratory tunnel with the endpoint closest to the given hash.
    `TunnelInfo` | TunnelManagerFacade.`selectOutboundTunnel()` Pick a random outbound exploratory tunnel
    `TunnelInfo` | TunnelManagerFacade.`selectOutboundTunnel(Hash destination)` Pick a random outbound tunnel from the given destination's pool
    `TunnelInfo` | TunnelManagerFacade.`selectOutboundTunnel(Hash destination, Hash closestTo)` Pick the outbound tunnel with the endpoint closest to the given hash from the given destination's pool.

    Methods in net.i2p.router with parameters of type TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | TunnelManagerFacade.`isValidTunnel(Hash client, TunnelInfo tunnel)` Is a tunnel a valid member of the pool?
    `void` | MessageHistory.`tunnelJoined(String state, TunnelInfo tunnel)` The local router has joined the given tunnel operating in the given state.
    `void` | MessageHistory.`tunnelValid(TunnelInfo tunnel, long timeToTest)` Note that we have reason to believe that the given tunnel is valid, since we could do something through it in the given amount of time

  - ### Uses of TunnelInfo in net.i2p.router.dummy

    Methods in net.i2p.router.dummy that return TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `TunnelInfo` | DummyTunnelManagerFacade.`selectInboundExploratoryTunnel(Hash closestTo)`
    `TunnelInfo` | DummyTunnelManagerFacade.`selectInboundTunnel()` Deprecated. unused
    `TunnelInfo` | DummyTunnelManagerFacade.`selectInboundTunnel(Hash destination)`
    `TunnelInfo` | DummyTunnelManagerFacade.`selectInboundTunnel(Hash destination, Hash closestTo)`
    `TunnelInfo` | DummyTunnelManagerFacade.`selectOutboundExploratoryTunnel(Hash closestTo)`
    `TunnelInfo` | DummyTunnelManagerFacade.`selectOutboundTunnel()`
    `TunnelInfo` | DummyTunnelManagerFacade.`selectOutboundTunnel(Hash destination)`
    `TunnelInfo` | DummyTunnelManagerFacade.`selectOutboundTunnel(Hash destination, Hash closestTo)`

    Methods in net.i2p.router.dummy with parameters of type TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | DummyTunnelManagerFacade.`isValidTunnel(Hash client, TunnelInfo tunnel)`

  - ### Uses of TunnelInfo in net.i2p.router.message

    Fields in net.i2p.router.message with type parameters of type TunnelInfo
    Modifier and Type | Field and Description
    --- | ---
    `(package private) ConcurrentHashMap<OutboundCache.HashPair,TunnelInfo>` | OutboundCache.`backloggedTunnelCache` Cache for backlogged tunnels per source-destination pair.
    `(package private) ConcurrentHashMap<OutboundCache.HashPair,TunnelInfo>` | OutboundCache.`tunnelCache` Cache for outbound tunnels per source-destination pair.

    Methods in net.i2p.router.message with parameters of type TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `(package private) void` | OutboundCache.`clearCaches(OutboundCache.HashPair hashPair, Lease lease, TunnelInfo inTunnel, TunnelInfo outTunnel)` Clears cache entries related to the provided key and elements upon failure, allowing retries with fresh associations.
    `(package private) static GarlicMessage` | OutboundClientMessageJobHelper.`createGarlicMessage(RouterContext ctx, long replyToken, long expiration, PublicKey recipientPK, PayloadGarlicConfig dataClove, Hash from, Destination dest, TunnelInfo replyTunnel, int tagsToSendOverride, int lowTagsOverride, SessionKey wrappedKey, Set<SessionTag> wrappedTags, boolean requireAck, LeaseSet bundledReplyLeaseSet, ReplyCallback callback)` Allow the app to specify the data clove directly, which enables OutboundClientMessage to resend the same payload (including expiration and unique id) in different garlics (down different tunnels) This is called from OCMOSJ

  - ### Uses of TunnelInfo in net.i2p.router.networkdb.kademlia

    Constructors in net.i2p.router.networkdb.kademlia with parameters of type TunnelInfo
    Constructor and Description
    `SearchUpdateReplyFoundJob(RouterContext context, RouterInfo peer, SearchState state, KademliaNetworkDatabaseFacade facade, SearchJob job, TunnelInfo outTunnel, TunnelInfo replyTunnel)`

  - ### Uses of TunnelInfo in net.i2p.router.tunnel

    Classes in net.i2p.router.tunnel that implement TunnelInfo
    Modifier and Type | Class and Description
    --- | ---
    `class` | `TunnelCreatorConfig` Coordinate the info that the tunnel creator keeps track of, including what peers are in the tunnel and what their configuration is See PooledTunnelCreatorConfig for the non-abstract class

  - ### Uses of TunnelInfo in net.i2p.router.tunnel.pool

    Classes in net.i2p.router.tunnel.pool that implement TunnelInfo
    Modifier and Type | Class and Description
    --- | ---
    `class` | `PooledTunnelCreatorConfig` Data about a tunnel we created

    Methods in net.i2p.router.tunnel.pool that return TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `TunnelInfo` | AliasedTunnelPool.`getTunnel(TunnelId gatewayId)`
    `TunnelInfo` | TunnelPool.`getTunnel(TunnelId gatewayId)` Get a tunnel by its gateway tunnel ID.
    `TunnelInfo` | TunnelPoolManager.`selectInboundExploratoryTunnel(Hash closestTo)` Pick the inbound exploratory tunnel with the gateway closest to the given hash.
    `TunnelInfo` | TunnelPoolManager.`selectInboundTunnel()` Pick a random inbound exploratory tunnel.
    `TunnelInfo` | TunnelPoolManager.`selectInboundTunnel(Hash destination)` Pick a random inbound tunnel from the given destination's pool.
    `TunnelInfo` | TunnelPoolManager.`selectInboundTunnel(Hash destination, Hash closestTo)` Pick the inbound tunnel with the gateway closest to the given hash from the given destination's pool.
    `TunnelInfo` | TunnelPoolManager.`selectOutboundExploratoryTunnel(Hash closestTo)` Pick the outbound exploratory tunnel with the endpoint closest to the given hash.
    `TunnelInfo` | TunnelPoolManager.`selectOutboundTunnel()` Pick a random outbound exploratory tunnel.
    `TunnelInfo` | TunnelPoolManager.`selectOutboundTunnel(Hash destination)` Pick a random outbound tunnel from the given destination's pool.
    `TunnelInfo` | TunnelPoolManager.`selectOutboundTunnel(Hash destination, Hash closestTo)` Pick the outbound tunnel with the endpoint closest to the given hash from the given destination's pool.
    `(package private) TunnelInfo` | AliasedTunnelPool.`selectTunnel()`
    `(package private) TunnelInfo` | TunnelPool.`selectTunnel()` Pull a random tunnel out of the pool.
    `(package private) TunnelInfo` | AliasedTunnelPool.`selectTunnel(Hash closestTo)`
    `(package private) TunnelInfo` | TunnelPool.`selectTunnel(Hash closestTo)` Return the tunnel from the pool that is XOR-closest to the target.

    Methods in net.i2p.router.tunnel.pool that return types with arguments of type TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `List<TunnelInfo>` | AliasedTunnelPool.`listTunnels()`
    `List<TunnelInfo>` | TunnelPool.`listTunnels()` Return a list of tunnels in the pool

    Methods in net.i2p.router.tunnel.pool with parameters of type TunnelInfo
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | AliasedTunnelPool.`addTunnel(TunnelInfo info)`
    `protected void` | TunnelPool.`addTunnel(TunnelInfo info)` Add a tunnel to the pool.
    `boolean` | TunnelPoolManager.`isValidTunnel(Hash client, TunnelInfo tunnel)`
    `(package private) void` | AliasedTunnelPool.`removeTunnel(TunnelInfo info)`
    `(package private) void` | TunnelPool.`removeTunnel(TunnelInfo info)` Remove a tunnel from the pool.
    `(package private) void` | AliasedTunnelPool.`tunnelFailed(TunnelInfo cfg)`
    `(package private) void` | TunnelPool.`tunnelFailed(TunnelInfo cfg)` Remove tunnel and blame all peers (not necessarily equally).
    `(package private) void` | AliasedTunnelPool.`tunnelFailed(TunnelInfo cfg, Hash blamePeer)`
    `(package private) void` | TunnelPool.`tunnelFailed(TunnelInfo cfg, Hash blamePeer)` Remove the tunnel and blame only one peer.