--- /dev/null
+<HTML>\r
+<HEAD>\r
+ <!-- Created by GNNpress/1.2 -->\r
+ <!-- Changed by: Anselm Baird-Smith, 4-Feb-1997 -->\r
+ <TITLE>ICPFilter reference manual</TITLE>\r
+</HEAD>\r
+<BODY BGCOLOR="white">\r
+<P>\r
+<A HREF="http://www.w3.org/pub/WWW/" TARGET="_top_"><IMG ALT="W3C" BORDER="0" WIDTH="72" HEIGHT="48"\r
+ SRC="/icons/WWW/w3c_home"></A> <A HREF="http://www.w3.org/pub/WWW/Jigsaw/" TARGET="_top_">\r
+<IMG ALT="Jigsaw" BORDER="0" WIDTH="212" HEIGHT="49" SRC="/icons/jigsaw">\r
+</A> \r
+ <HR>\r
+<H1>\r
+ ICP Filter\r
+</H1>\r
+<P>\r
+The ICP client side filter add support for the\r
+<A HREF="http://www.nlanr.net/Cache/ICP/">Internet Cache Protocol</A> to\r
+the <B>Jigsaw</B> HTTP client side implementation. This support can be used\r
+both by browsers (such as HotJava, <A HREF="../FAQ.html#client-hotjava">check\r
+the FAQ</A>), or by proxies (the typical case).\r
+<P>\r
+In brief, ICP allows several proxies to cooperate by exchanging informations\r
+about what they currently have in their local cache. <B>Jigsaw</B>'s ICP\r
+implementation should be compatible with other ICP capable proxies (such\r
+as <A HREF="http://squid.nlanr.net/Squid/">Squid</A>), even though it doesn't\r
+make use of all the features of the underlying protocol (in fact, it implements\r
+what can be implemented while still remaining compliant with the HTTP/1.1\r
+protocol specification).\r
+<P>\r
+<B>Warning</B>: <B>Jigsaw</B> doesn't come with the appropriate support for\r
+editing the ICP filter properties from the <CODE>/Admin/Properties</CODE>\r
+resource; this means that you will have to manually edit your <B>Jigsaw\r
+</B>configuration file in order to set the properties relevant to that filter.\r
+This file is usually named <CODE>config/http-server.props</CODE> if not,\r
+you probably know already what we are talking about.\r
+<H3>\r
+ <A NAME="rule-file">ICP Configuration File</A>\r
+</H3>\r
+<P>\r
+This filter uses a <A HREF="#w3c.www.protocol.http.icp.config">configuration\r
+file</A>, to know about the proxies it cooperates with. The syntax for this\r
+rule file is defined by the following BNF:\r
+<PRE>rule-file := *(rules)\r
+rules := (comment|host-description)\r
+comment := '#' <chars up EOL>\r
+host-description := host SPACES port spaces url EOL\r
+host := <valid Internet host name>\r
+port := <valid UDP port number>\r
+url := <URL locating the proxy to use for that host/port>\r
+SPACES := *(' '|'\t')\r
+EOL := '\r' | '\r\n' | '\n'\r
+</PRE>\r
+<P>\r
+A sample ICP configuration file looks like:\r
+<PRE># Sample ICP configuration file\r
+# -----------------------------\r
+# First neighbour:\r
+icp.host1.com 10345 http://icp.host1.com:8080/\r
+# Second neighbour:\r
+icp.host2.com 10345 http://icp.host2.com:8080/\r
+</PRE>\r
+<P>\r
+After parsing such a configuration file, the ICP filter, will register both\r
+hosts as <I>neighbours</I>. When a request comes in for some document, the\r
+filter sends a UDP packet to both hosts (it knows about their namee, and\r
+the port they are listening on through the first two fields of the configuration\r
+file). It then waits for some positive answer, if such an answer arrives,\r
+it finally looks it up (matching the UDP sender address with one of the above\r
+declared hosts), and use the appropriate URL as a proxy address.\r
+<P>\r
+To setup a nice cache hierarchy, one can use a conjunction of the\r
+<A HREF="w3c.www.protocol.http.ProxyDispatcher.html">ProxyDispatcher</A>\r
+filter, the\r
+<A HREF="w3c.www.protocol.http.cache.CacheFilter.html">CacheFilter</A> and\r
+the ICP filter. The starting point for setting up such a config, is to set\r
+the <A HREF="w3c.www.protocol.http.HttpManager.html">HttpManager</A>\r
+<A HREF="w3c.www.protocol.http.HttpManager.html#w3c.www.protocol.http.filters">filters</A>\r
+property to:\r
+<PRE>w3c.www.protocol.http.filters=w3c.www.protocol.http.proxy.ProxyDispatcher \\r
+ |w3c.www.protocol.http.cache.CacheFilter \\r
+ |w3c.www.protocol.http.icp.ICPFilter\r
+</PRE>\r
+<P>\r
+(the \ character indicates that the line is splitted for best reading, they\r
+should not appear in the property value - which should be written as a single\r
+line). Note that in this setting the order in which you declare the filters\r
+is indeed important.\r
+<P>\r
+ <HR>\r
+<H2>\r
+ Properties\r
+</H2>\r
+<P>\r
+The <A HREF="../api/w3c.www.protocol.http.icp.ICPFilter.html">ICPFilter</A>\r
+defines the following properties:\r
+<UL>\r
+ <LI>\r
+ <A HREF="#w3c.www.protocol.http.icp.debug">w3c.www.protocol.http.icp.debug</A>\r
+ <LI>\r
+ <A HREF="#w3c.www.protocol.http.icp.config">w3c.www.protocol.http.icp.config</A>\r
+ <LI>\r
+ <A HREF="#w3c.www.protocol.http.icp.port">w3c.www.protocol.http.icp.port</A>\r
+ <LI>\r
+ <A HREF="#w3c.www.protocol.http.icp.timeout">w3c.www.protocol.http.icp.timeout</A>\r
+ <LI>\r
+ <A HREF="#w3c.www.protocol.http.icp.disable-cache">w3c.www.protocol.http.icp.disable-cache</A>\r
+</UL>\r
+<P>\r
+ <HR>\r
+<P>\r
+<CODE><A NAME="w3c.www.protocol.http.icp.debug">w3c.www.protocol.http.icp.debug</A></CODE>\r
+<DL>\r
+ <DT>\r
+ <I>semantics</I>\r
+ <DD>\r
+ When set to <B>true</B>, this property will make the ICP filter emit some\r
+ (hopefully) interesting traces.\r
+ <DT>\r
+ <I>type</I>\r
+ <DD>\r
+ A boolean property.\r
+ <DT>\r
+ <I>default value</I>\r
+ <DD>\r
+ This property defaults to <B>false</B>.\r
+</DL>\r
+<P>\r
+ <HR>\r
+<P>\r
+<CODE><A NAME="w3c.www.protocol.http.icp.config">w3c.www.protocol.http.icp.config</A></CODE>\r
+<DL>\r
+ <DT>\r
+ <I>semantics</I>\r
+ <DD>\r
+ The name of the <I><A HREF="#rule-file">rule file</A></I> for ICP\r
+ <DT>\r
+ <I>type</I>\r
+ <DD>\r
+ A File property (it's value should provide a path to an existing file)\r
+ <DT>\r
+ <I>default value</I>\r
+ <DD>\r
+ This property has no default value, and <B>must</B> be set for the ICP filter\r
+ to be activated.\r
+</DL>\r
+<P>\r
+ <HR>\r
+<P>\r
+<CODE><A NAME="w3c.www.protocol.http.icp.port">w3c.www.protocol.http.icp.port</A></CODE>\r
+<DL>\r
+ <DT>\r
+ <I>semantics</I>\r
+ <DD>\r
+ The UDP port number that filter should use to communicate with cooperating\r
+ proxies. This port number is the one the filter will be listening at for\r
+ requests from other (cooperating proxies).\r
+ <DT>\r
+ <I>type</I>\r
+ <DD>\r
+ An integer property (it's value should be a valid UDP port number)\r
+ <DT>\r
+ <I>default value</I>\r
+ <DD>\r
+ This property has no default value and <B>must</B> be set for the ICP filter\r
+ to be activated.\r
+</DL>\r
+<P>\r
+ <HR>\r
+<P>\r
+<CODE><A NAME="w3c.www.protocol.http.icp.timeout">w3c.www.protocol.http.icp.timeout</A></CODE>\r
+<DL>\r
+ <DT>\r
+ <I>semantics</I>\r
+ <DD>\r
+ The number of milliseconds the filter should wait for replies from cooperating\r
+ proxies, before estimating that none of them is available to answer its query.\r
+ <DT>\r
+ <I>type</I>\r
+ <DD>\r
+ An integer property (it's value should be a valid number of milliseconds)\r
+ <DT>\r
+ <I>default value</I>\r
+ <DD>\r
+ This property defaults to <B>500</B> ms.\r
+</DL>\r
+<P>\r
+ <HR>\r
+<P>\r
+<CODE><A NAME="w3c.www.protocol.http.icp.disable-cache">w3c.www.protocol.http.icp.disable-cache</A></CODE>\r
+<DL>\r
+ <DT>\r
+ <I>semantics</I>\r
+ <DD>\r
+ Disable the caching of documents retreived through a neighbour proxy. If\r
+ you're making a set of <I>local</I> proxies cooperate, this flag will ensure\r
+ that no two close proxy will cache the same page.\r
+ <DT>\r
+ <I>type</I>\r
+ <DD>\r
+ A boolean property.\r
+ <DT>\r
+ <I>default value</I>\r
+ <DD>\r
+ This property defaults to <B>true</B>\r
+</DL>\r
+<P>\r
+ <HR>\r
+<P>\r
+<I><A HREF="mailto:jigsaw@w3.org">Jigsaw Team</A><BR>\r
+</I>$Id: w3c.www.protocol.http.icp.ICPFilter.html,v 1.1 1997/02/11 19:46:53\r
+abaird Exp $\r
+<P>\r
+<P>\r
+<P>\r
+</BODY></HTML>\r