Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / WWW / Doc / Programmer / samples / GrepPutFilter.html
diff --git a/JMCR-Stable/real-world application/jigsaw/WWW/Doc/Programmer/samples/GrepPutFilter.html b/JMCR-Stable/real-world application/jigsaw/WWW/Doc/Programmer/samples/GrepPutFilter.html
new file mode 100644 (file)
index 0000000..23b6094
--- /dev/null
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"\r
+                      "http://www.w3.org/TR/REC-html40/strict.dtd">\r
+<html>\r
+  <head>\r
+    <title>GrepPutFilter.java</title>\r
+    <meta name="Author" content="Benoit Mahe">\r
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+    <meta name="Generator" content="*emacs: emacs-css">\r
+\r
+    <link rel="Stylesheet" media="screen" type="text/css" href="default-html.css">\r
+  </head>\r
+  <body>\r
+\r
+    <pre>\r
+<span class="comment">// PutFilter.java\r
+// $Id: GrepPutFilter.html,v 1.1 2010/06/15 12:20:01 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1996.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+</span>\r
+<span class="keyword">package</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">jigsaw</span>.<span class="type">filters</span>;\r
+\r
+<span class="keyword">import</span> <span class="reference">java</span>.<span class="reference">io</span>.*;\r
+\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">tools</span>.<span class="reference">resources</span>.*;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">www</span>.<span class="reference">http</span>.*;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">jigsaw</span>.<span class="reference">http</span>.*;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">jigsaw</span>.<span class="reference">frames</span>.*;\r
+<span class="keyword">import</span> <span class="reference">org</span>.<span class="reference">w3c</span>.<span class="reference">jigsaw</span>.<span class="reference">resources</span>.*;\r
+\r
+<span class="reference">public</span> <span class="keyword">class</span> <span class="function-name">GrepPutFilter</span> <span class="keyword">extends</span> <span class="type">PutFilter</span> {\r
+\r
+    <span class="comment">/**\r
+     * Attribute index - The string to grep.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_FORBIDSTRING</span> = -1;\r
+\r
+    <span class="comment">/**\r
+     * Attribute index - The url to redirect.\r
+     */</span>\r
+    <span class="preprocessor">protected</span> <span class="type">static</span> <span class="type">int</span> <span class="variable-name">ATTR_REDIRECT</span> = -1;\r
+\r
+    <span class="type">static</span> {\r
+       <span class="type">Class</span>     <span class="variable-name">c</span> = <span class="keyword">null</span>;\r
+       <span class="type">Attribute</span> <span class="variable-name">a</span> = <span class="keyword">null</span>;\r
+    \r
+       <span class="keyword">try</span> {\r
+           c = Class.forName("<span class="string">org.w3c.jigsaw.filters.GrepPutFilter</span>");\r
+       } <span class="keyword">catch</span> (<span class="type">Exception</span> <span class="variable-name">ex</span>) {\r
+           ex.printStackTrace();\r
+           System.exit(1);\r
+       }\r
+       a = <span class="keyword">new</span> <span class="type">StringAttribute</span>("<span class="string">forbidden-string</span>"\r
+                               , <span class="keyword">null</span>\r
+                               , Attribute.EDITABLE|Attribute.MANDATORY);\r
+       ATTR_FORBIDSTRING = AttributeRegistry.registerAttribute(c, a);\r
+\r
+       a = <span class="keyword">new</span> <span class="type">StringAttribute</span>("<span class="string">redirect-url</span>"\r
+                               , <span class="keyword">null</span>\r
+                               , Attribute.EDITABLE|Attribute.MANDATORY);\r
+       ATTR_REDIRECT = AttributeRegistry.registerAttribute(c, a);\r
+    }\r
+\r
+\r
+    <span class="preprocessor">protected</span> <span class="type">String</span> <span class="function-name">getForbiddenString</span>() {\r
+       <span class="keyword">return</span> (<span class="type">String</span>) getValue(ATTR_FORBIDSTRING, <span class="keyword">null</span>);\r
+    }\r
+\r
+    <span class="preprocessor">protected</span> <span class="type">String</span> <span class="function-name">getRedirectURL</span>() {\r
+       <span class="keyword">return</span> (<span class="type">String</span>) getValue(ATTR_REDIRECT, <span class="keyword">null</span>);\r
+    }\r
+\r
+    <span class="comment">/**\r
+     * Search the forbidden string in the body, if found return\r
+     * an ACCES FORBIDDEN Reply.\r
+     * </span><span class="keyword">@param </span><span class="variable-name">request</span><span class="comment"> The request that is about to be processsed.\r
+     */</span>\r
+  \r
+    <span class="reference">public</span> <span class="type">ReplyInterface</span> <span class="function-name">ingoingFilter</span>(<span class="type">RequestInterface</span> <span class="variable-name">req</span>) {\r
+       <span class="type">Request</span> <span class="variable-name">request</span> = (<span class="type">Request</span>) req;\r
+       <span class="type">String</span> <span class="variable-name">expect</span> = request.getExpect();\r
+       <span class="keyword">if</span> (expect != <span class="keyword">null</span>) {\r
+           <span class="keyword">if</span> (expect.startsWith("<span class="string">100</span>")) { <span class="comment">// expect 100?\r
+</span>                <span class="type">Client</span> <span class="variable-name">client</span> = request.getClient();\r
+               <span class="keyword">if</span> (client != <span class="keyword">null</span>) {\r
+                   <span class="keyword">try</span> {\r
+                       client.sendContinue();\r
+                   } <span class="keyword">catch</span> (<span class="reference">java</span>.<span class="reference">io</span>.<span class="type">IOException</span> <span class="variable-name">ex</span>) {\r
+                       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+                   }\r
+               }\r
+           }\r
+       }\r
+       <span class="keyword">if</span>(request.getMethod().equals("<span class="string">PUT</span>")) {\r
+           <span class="type">InputStream</span> <span class="variable-name">in</span> = <span class="keyword">null</span>;\r
+           <span class="keyword">try</span> {\r
+               in = request.getInputStream();\r
+               <span class="keyword">if</span> ( in == <span class="keyword">null</span> ) {\r
+                   <span class="keyword">return</span> <span class="keyword">null</span>;\r
+               }\r
+           } <span class="keyword">catch</span> (<span class="type">IOException</span> <span class="variable-name">ex</span>) {\r
+               <span class="keyword">return</span> <span class="keyword">null</span>;\r
+           }\r
+           <span class="comment">// verify that the target resource is putable\r
+</span>            <span class="type">ResourceReference</span> <span class="variable-name">rr</span> = request.getTargetResource();\r
+           <span class="keyword">if</span> (rr != <span class="keyword">null</span>) {\r
+               <span class="keyword">try</span> {\r
+                   <span class="type">FramedResource</span> <span class="variable-name">target</span> = (<span class="type">FramedResource</span>) rr.lock();\r
+                   <span class="type">HTTPFrame</span> <span class="variable-name">frame</span> = <span class="keyword">null</span>;\r
+                   <span class="keyword">try</span> {\r
+                       frame = (<span class="type">HTTPFrame</span>) target.getFrame( \r
+                          Class.forName("<span class="string">org.w3c.jigsaw.frames.HTTPFrame</span>"));\r
+                   } <span class="keyword">catch</span> (<span class="type">ClassNotFoundException</span> <span class="variable-name">cex</span>) {\r
+                       cex.printStackTrace();\r
+                       <span class="comment">//big big problem ...\r
+</span>                    }\r
+                   <span class="keyword">if</span> (frame == <span class="keyword">null</span>) <span class="comment">// can't be putable\r
+</span>                        <span class="keyword">return</span> <span class="keyword">null</span>;\r
+                   <span class="comment">// now we can verify if the target resource is putable\r
+</span>                    <span class="keyword">if</span> (! frame.getPutableFlag()) {\r
+                       <span class="keyword">return</span> <span class="keyword">null</span>;\r
+                   }\r
+               } <span class="keyword">catch</span> (<span class="type">InvalidResourceException</span> <span class="variable-name">ex</span>) {\r
+                   ex.printStackTrace();\r
+                   <span class="comment">// problem ...\r
+</span>                } <span class="keyword">finally</span> {\r
+                   rr.unlock();\r
+               }\r
+           }\r
+\r
+           <span class="keyword">if</span> (searchForbiddenString(in)) {\r
+               <span class="type">Reply</span> <span class="variable-name">error</span> = request.makeReply(HTTP.FORBIDDEN);\r
+               error.setContent ("<span class="string">&lt;p&gt;the string \"</span>"+getForbiddenString()+\r
+                                 "<span class="string">\" is forbidden.&lt;/p&gt;&lt;br&gt; click </span>"+\r
+                                 "<span class="string">&lt;A HREF=\"</span>"+getRedirectURL()+"<span class="string">\"&gt;here&lt;/A&gt;</span>"+\r
+                                 "<span class="string"> for explaination.</span>");\r
+               <span class="keyword">return</span> error;\r
+           }\r
+           <span class="keyword">return</span> <span class="keyword">null</span>;\r
+       } <span class="keyword">else</span> \r
+           <span class="keyword">return</span> <span class="keyword">null</span>;\r
+    }\r
+\r
+    <span class="preprocessor">protected</span> <span class="type">boolean</span> <span class="function-name">searchForbiddenString</span>(<span class="type">InputStream</span> <span class="variable-name">in</span>) {\r
+       <span class="keyword">try</span> {\r
+           <span class="type">int</span> <span class="variable-name">len</span> = in.available();\r
+           in.mark(len);\r
+    \r
+           <span class="type">int</span> <span class="variable-name">c</span>;\r
+           <span class="type">byte</span> <span class="variable-name">forbid</span> [] = getForbiddenString().getBytes();\r
+           <span class="type">int</span> <span class="variable-name">lenforbid</span> = forbid.length;\r
+           <span class="type">int</span> <span class="variable-name">forbididx</span> = 0;\r
+      \r
+           <span class="keyword">while</span> ((c = in.read()) != -1) {\r
+               <span class="keyword">if</span> (forbid[forbididx] == (<span class="type">byte</span>) c) {\r
+                   <span class="keyword">if</span> (++forbididx == forbid.length) {\r
+                       in.reset();\r
+                       <span class="keyword">return</span> <span class="keyword">true</span>;\r
+                   }\r
+               } <span class="keyword">else</span> \r
+                   forbididx = 0;\r
+           }\r
+           in.reset();\r
+           <span class="keyword">return</span> <span class="keyword">false</span>;\r
+       } <span class="keyword">catch</span> (<span class="type">IOException</span> <span class="variable-name">ex</span>) {\r
+           <span class="keyword">return</span> <span class="keyword">false</span>;\r
+       } \r
+    }\r
+\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+    </pre>\r
+  </body>\r
+</html>\r