    All Packages  Class Hierarchy  This Package  Previous  Next  Index

# Class w3c.www.protocol.http.micp.MICPFilter

    java.lang.Object
       |
       +----java.lang.Thread
               |
               +----w3c.www.protocol.http.micp.MICPFilter

public class MICPFilter
extends Thread
implements PropRequestFilter, PropertyMonitoring, MICP

##

addr
  Our multicast group address.
ADDRESS_P
  Properties - Our multicast group address.
cache
  The CacheFilter we are working for.
debug
  Our we in debug mode ?
DEBUG_P
  Properties - Our debug flag.
DISABLE_CACHE_P
  Properties - disable caching when fetching from a neighbour proxy.
disableCache
  Should we disablecaching when fetching through a proxy ?
localaddr
  Our local internet address as a byte array.
localproxy
  Our local proxy address, in a byte array.
localsrc
  Our local internet address, as a long.
PORT_P
  Properties - Our own UDP port number.
props
  The properties we are initialized from.
PROXY_P
  Properties - location of proxy to redirect to (if success)
socket
  Our socket to the group.
STATE_HOW
  State - To mark requests that have been redirected.
TIMEOUT_P
  Properties - Our default timeout value.
timeoutValue
  Our default timeout value for waiting for replies (in ms).
ttl
  Our TTL for writing packets.
waiters
  Queue of threads waiting for some replies.

##

MICPFilter()

##

addWaiter(int)
exceptionFilter(Request, HttpException)
  This filter doesn't handle exceptions.
handle(byte[], int)
  Parse and handle the given MICP packet.
ingoingFilter(Request)
  Our ingoingFilter method.
initialize(HttpManager)
  Initialize the ICP filter.
locateProxy(URL)
  Locate some proxy for the given URL.
lookupWaiter(int)
outgoingFilter(Request, Reply)
  Our outgoingFilter does nothing (at all).
propertyChanged(String)
removeWaiter(ReplyWaiter)
run()
sync()
  This filter doesn't maintain dynamic state.
waitOn(int)
  Wait for the reply on this reqiest identifier.

##

STATE_HOW

     public static final String STATE_HOW

  State - To mark requests that have been redirected. This state is set to the URL of the proxy that has been used to run the request, if any.

DEBUG_P

     public static final String DEBUG_P

  Properties - Our debug flag.

ADDRESS_P

     public static final String ADDRESS_P

  Properties - Our multicast group address.

PORT_P

     public static final String PORT_P

  Properties - Our own UDP port number.

TIMEOUT_P

     public static final String TIMEOUT_P

  Properties - Our default timeout value.

DISABLE_CACHE_P

     public static final String DISABLE_CACHE_P

  Properties - disable caching when fetching from a neighbour proxy.

PROXY_P

     public static final String PROXY_P

  Properties - location of proxy to redirect to (if success)

props

     protected ObservableProperties props

  The properties we are initialized from.

cache

     protected CacheFilter cache

  The CacheFilter we are working for.

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 ?

waiters

     protected Vector waiters

  Queue of threads waiting for some replies.

addr

     protected InetAddress addr

  Our multicast group address.

localproxy

     protected byte localproxy[]

  Our local proxy address, in a byte array.

localsrc

     protected long localsrc

  Our local internet address, as a long.

localaddr

     protected byte localaddr[]

  Our local internet address as a byte array.

socket

     protected MulticastSocket socket

  Our socket to the group.

ttl

     protected int ttl

  Our TTL for writing packets.

##

MICPFilter

     public MICPFilter()

##

lookupWaiter

     protected final synchronized ReplyWaiter lookupWaiter(int id)

removeWaiter

     protected final synchronized void removeWaiter(ReplyWaiter w)

addWaiter

     protected final synchronized ReplyWaiter addWaiter(int id)

waitOn

     public URL waitOn(int id)

  Wait for the reply on this reqiest identifier. Don't wait for more than the timeout value.

  Returns:
    The replied URL if any, or null.

handle

     protected void handle(byte buf[],
                           int len) throws IOException

  Parse and handle the given MICP packet. This method does not use (currently) the reader/writer. The point is that on queries, it tries to reuse the receive buffer for output (which allows to handle queries without nearly zero allocations).

  Parameters:
    buf - The packet.
    len - Total length of packet.

locateProxy

     protected int locateProxy(URL u) throws IOException

  Locate some proxy for the given URL. Synchronizing this method allows to reuse the emit buffer (kind of nice), and anyway, there will be a synchronized point when writting to the network (see, I am not convinced)

  Parameters:
    u - The URL to locate.
  Returns:
    An integer reply identifier to wait on for the reply.
  Throws: IOException
    If the multicast group wasn't available.

propertyChanged

     public boolean propertyChanged(String name)

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.

run

     public void run()

  Overrides:
    run in class Thread

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.

  Parameters:
    manager - The HTTP manager.
  Throws: FilterInitException
    If the filter cannot launch its server part (listening for incomming ICP requests)

    All Packages  Class Hierarchy  This Package  Previous  Next  Index