## org.w3c.www.protocol.http.icp
Class ICPFilter

    java.lang.Object
      |
      +--org.w3c.www.protocol.http.icp.ICPFilter

public class ICPFilter
extends java.lang.Object
implements PropRequestFilter, PropertyMonitoring

Field Summary
`static java.lang.String` | `CONFIG_P` Properties - Our configuration file.
`protected boolean` | `debug` Our we in debug mode ?
`static java.lang.String` | `DEBUG_P` Properties - Our debug flag.
`static java.lang.String` | `DISABLE_CACHE_P` Properties - disable caching when fetching from a neighbour proxy.
`protected boolean` | `disableCache` Should we disablecaching when fetching through a proxy ?
`protected java.util.Hashtable` | `friends` Our senders, indexed by InetAddress.
`protected org.w3c.www.protocol.http.icp.ICPReceiver` | `icp` Our ICP engine.
`static java.lang.String` | `PORT_P` Properties - Our own UDP port number.
`protected ObservableProperties` | `props` The properties we are initialized from.
`static java.lang.String` | `TIMEOUT_P` Properties - Our default timeout value.
`protected long` | `timeoutValue` Our default timeout value for waiting for replies (in ms).

Constructor Summary
`ICPFilter()`

Method Summary
`protected void` | `createICPSender(java.lang.String host, int dstport, java.lang.String http)`
`boolean` | `exceptionFilter(Request request, HttpException ex)` This filter doesn't handle exceptions.
`org.w3c.www.protocol.http.icp.ICPSender` | `getSender(java.net.InetAddress addr, int port)` Get the sender object for the given InetAddress instance.
`protected java.net.DatagramSocket` | `getSocket()`
`Reply` | `ingoingFilter(Request request)` Our ingoingFilter method.
`void` | `initialize(HttpManager manager)` Initialize the ICP filter.
`protected java.net.URL` | `locateProxy(org.w3c.www.protocol.http.icp.ICPReply reply)` Locate the HTTP service of the proxy that has emitted that reply.
`Reply` | `outgoingFilter(Request request, Reply reply)` Our outgoingFilter does nothing (at all).
`protected void` | `parseConfiguration()` Parse the configuration file.
`boolean` | `propertyChanged(java.lang.String name)`
`protected java.net.URL` | `runQuery(org.w3c.www.protocol.http.icp.ICPQuery query)` Run the ICP query, and return the proxy we should go to.
`protected int` | `sendQuery(org.w3c.www.protocol.http.icp.ICPQuery query)` Send the given query to all our neighbors.
`void` | `sync()` This filter doesn't maintain dynamic state.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### DEBUG_P

    public static final java.lang.String DEBUG_P

  Properties - Our debug flag.

### CONFIG_P

    public static final java.lang.String CONFIG_P

  Properties - Our configuration file.

### PORT_P

    public static final java.lang.String PORT_P

  Properties - Our own UDP port number.

### TIMEOUT_P

    public static final java.lang.String TIMEOUT_P

  Properties - Our default timeout value.

### DISABLE_CACHE_P

    public static final java.lang.String DISABLE_CACHE_P

  Properties - disable caching when fetching from a neighbour proxy.

### props

    protected ObservableProperties props

  The properties we are initialized from.

### icp

    protected org.w3c.www.protocol.http.icp.ICPReceiver icp

  Our ICP engine.

### friends

    protected java.util.Hashtable friends

  Our senders, indexed by InetAddress.

### timeoutValue

    protected long timeoutValue

  Our default timeout value for waiting for replies (in ms).

### debug

    protected boolean debug

  Our we in debug mode ?

### disableCache

    protected boolean disableCache

  Should we disablecaching when fetching through a proxy ?

Constructor Detail

### ICPFilter

    public ICPFilter()

Method Detail

### propertyChanged

    public boolean propertyChanged(java.lang.String name)

  Specified by:
    propertyChanged in interface PropertyMonitoring

### getSocket

    protected java.net.DatagramSocket getSocket()

### createICPSender

    protected void createICPSender(java.lang.String host,
                                   int dstport,
                                   java.lang.String http)
                            throws java.net.UnknownHostException,
                                   java.net.MalformedURLException,
                                   java.net.SocketException

### parseConfiguration

    protected void parseConfiguration()

  Parse the configuration file.

### getSender

    public org.w3c.www.protocol.http.icp.ICPSender getSender(java.net.InetAddress addr,
                                                             int port)

  Get the sender object for the given InetAddress instance.
  Parameters:
    `addr` - The InetAddress of the sender.
  Returns:
    An ICPSender instance, if available, null otherwise.

### locateProxy

    protected java.net.URL locateProxy(org.w3c.www.protocol.http.icp.ICPReply reply)

  Locate the HTTP service of the proxy that has emitted that reply.
  Parameters:
    `reply` - The reply emitted by the host that alos host the HTTP service we are looking for.
  Returns:
    The URL of the proxy, or null if no matching proxy was found.

### sendQuery

    protected int sendQuery(org.w3c.www.protocol.http.icp.ICPQuery query)

  Send the given query to all our neighbors.
  Returns:
    The number of times we emitted the query.

### runQuery

    protected java.net.URL runQuery(org.w3c.www.protocol.http.icp.ICPQuery query)

  Run the ICP query, and return the proxy we should go to.
  Parameters:
    `url` - The URL we are looking for.
  Returns:
    The URL of the proxy we should go to for that URL, or null if none was found.

### exceptionFilter

    public boolean exceptionFilter(Request request,
                                   HttpException ex)

  This filter doesn't handle exceptions.
  Parameters:
    `request` - The request that triggered the exception.
    `ex` - The triggered exception.
  Returns:
    Always false.

### ingoingFilter

    public Reply ingoingFilter(Request request)

  Our ingoingFilter method. This method emits (only for GET requestst currently) an ICP query to all our neighbors, and wait for either one of them to reply with a hit, or, our timeout value to expire.

  If a hit reply is received, we then use the corresponding proxy to fullfill the request.

  Parameters:
    `request` - The request that is about to be emitted.
  Returns:
    Always null.

### outgoingFilter

    public Reply outgoingFilter(Request request,
                                Reply reply)

  Our outgoingFilter does nothing (at all).
  Parameters:
    `request` - The request that has been processed.
    `reply` - The original reply (from origin server)
  Returns:
    Always null.

### sync

    public void sync()

  This filter doesn't maintain dynamic state.

### initialize

    public void initialize(HttpManager manager)
                    throws PropRequestFilterException

  Initialize the ICP filter. This is where we parse the configuration file in order to know about our neighbors. We then register ourself to the HTTP manager.
  Specified by:
    initialize in interface PropRequestFilter
  Parameters:
    `manager` - The HTTP manager.
  Throws:
    PropRequestFilterException - If the filter cannot launch its server part (listening for incomming ICP requests)