net.i2p.router.tunnel.pool

## Class TunnelPeerSelector

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

Direct Known Subclasses:
  ClientPeerSelector, ExploratoryPeerSelector

    public abstract class TunnelPeerSelector
    extends Object

Coordinate the selection of peers to go into a tunnel for one particular pool. Todo: there's nothing non-static in here

### Constructor Summary

Constructors
Constructor and Description
`TunnelPeerSelector()`

### Method Summary

Methods
`protected boolean` `filterSlow(RouterContext ctx, boolean isInbound, boolean isExploratory)` do we want to skip peers that are slow?
`protected boolean` `filterUnreachable(RouterContext ctx, boolean isInbound, boolean isExploratory)` do we want to skip peers who haven't been up for long?
`protected boolean` `filterUptime(RouterContext ctx, boolean isInbound, boolean isExploratory)` do we want to skip peers who haven't been up for long?
`Set<Hash>` `getExclude(RouterContext ctx, boolean isInbound, boolean isExploratory)` Pick peers that we want to avoid
`protected int` `getLength(RouterContext ctx, TunnelPoolSettings settings)`
`protected void` `orderPeers(List rv, Hash hash)`
`protected List<Hash>` `selectExplicit(RouterContext ctx, TunnelPoolSettings settings, int length)` For debugging, also possibly for restricted routes? Needs analysis and testing
`abstract List<Hash>` `selectPeers(RouterContext ctx, TunnelPoolSettings settings)` Which peers should go into the next tunnel for the given settings?
`static boolean` `shouldExclude(RouterContext ctx, RouterInfo peer)` warning, this is also called by ProfileOrganizer.isSelectable()
`protected boolean` `shouldSelectExplicit(TunnelPoolSettings settings)` For debugging, also possibly for restricted routes? Needs analysis and testing

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

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

### Constructor Detail

#### TunnelPeerSelector

    public TunnelPeerSelector()

### Method Detail

#### selectPeers

    public abstract List<Hash> selectPeers(RouterContext ctx,
                         TunnelPoolSettings settings)

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

    protected int getLength(RouterContext ctx,
                TunnelPoolSettings settings)

Returns:
  randomized number of hops 0-7, not including ourselves

#### shouldSelectExplicit

    protected boolean shouldSelectExplicit(TunnelPoolSettings settings)

For debugging, also possibly for restricted routes? Needs analysis and testing

Returns:
  should always be false

#### selectExplicit

    protected List<Hash> selectExplicit(RouterContext ctx,
                            TunnelPoolSettings settings,
                            int length)

For debugging, also possibly for restricted routes? Needs analysis and testing

Returns:
  should always be false

#### getExclude

    public Set<Hash> getExclude(RouterContext ctx,
                       boolean isInbound,
                       boolean isExploratory)

Pick peers that we want to avoid

#### shouldExclude

    public static boolean shouldExclude(RouterContext ctx,
                        RouterInfo peer)

warning, this is also called by ProfileOrganizer.isSelectable()

#### filterUnreachable

    protected boolean filterUnreachable(RouterContext ctx,
                            boolean isInbound,
                            boolean isExploratory)

do we want to skip peers who haven't been up for long?

Returns:
  true for inbound, false for outbound, unless configured otherwise

#### filterSlow

    protected boolean filterSlow(RouterContext ctx,
                     boolean isInbound,
                     boolean isExploratory)

do we want to skip peers that are slow?

Returns:
  true unless configured otherwise

#### filterUptime

    protected boolean filterUptime(RouterContext ctx,
                       boolean isInbound,
                       boolean isExploratory)

do we want to skip peers who haven't been up for long?

Returns:
  true unless configured otherwise

#### orderPeers

    protected void orderPeers(List rv,
                  Hash hash)