net.i2p.router.tunnel.pool
Class TunnelPeerSelector

java.lang.Object
  extended by 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)