package net.i2p.router;
import net.i2p.data.Hash;
/**
* Gatekeeper for deciding whether to throttle the further processing
* of messages through the router. This is seperate from the bandwidth
* limiting which simply makes sure the bytes transferred dont exceed the
* bytes allowed (though the router throttle should take into account the
* current bandwidth usage and limits when determining whether to accept or
* reject certain activities, such as tunnels)
*
*/
public interface RouterThrottle {
/**
* Should we accept any more data from the network for any sort of message,
* taking into account our current load, or should we simply slow down?
*
*/
public boolean acceptNetworkMessage();
/**
* Should we accept the request to participate in the given tunnel,
* taking into account our current load and bandwidth usage commitments?
*
* @return 0 if it should be accepted, higher values for more severe rejection
*/
public int acceptTunnelRequest();
/**
* Should we accept the netDb lookup message, replying either with the
* value or some closer peers, or should we simply drop it due to overload?
*
*/
public boolean acceptNetDbLookupRequest(Hash key);
/** How backed up we are at the moment processing messages (in milliseconds) */
public long getMessageDelay();
/** How backed up our tunnels are at the moment (in milliseconds) */
public long getTunnelLag();
/**
* How much faster (or if negative, slower) we are receiving data as
* opposed to our longer term averages?
*
*/
public double getInboundRateDelta();
/**
* Message on the state of participating tunnel acceptance
*/
public String getTunnelStatus();
public void setTunnelStatus(String msg);
/** @since 0.8.12 */
public void setShutdownStatus();
/** @since 0.8.12 */
public void cancelShutdownStatus();
}