## 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
`TunnelPeerSelector()`

Method Summary
`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)