>>>


Here is the patch against latest remy changes ...
Index: build.properties.sample
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/http11/build.properties.sample,v
retrieving revision 1.2
diff -u -r1.2 build.properties.sample
--- build.properties.sample     15 Mar 2002 05:36:02 -0000      1.2
+++ build.properties.sample     7 Oct 2003 07:39:41 -0000
@@ -31,4 +31,7 @@
 junit.jar=/java/junit/junit.jar
 
 # commons-logging.jar -- Commons Logging 1.0 package
-commons-logging.jar=../lib/commons-logging.jar
\ No newline at end of file
+commons-logging.jar=../lib/commons-logging.jar
+
+# ----- Jakarta Regular Expressions Library, version 1.2 -----
+regexp.jar=../lib/jakarta-regexp-1.2.jar
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/http11/build.xml,v
retrieving revision 1.14
diff -u -r1.14 build.xml
--- build.xml   4 May 2003 21:12:01 -0000       1.14
+++ build.xml   7 Oct 2003 07:39:41 -0000
@@ -38,6 +38,7 @@
   <property name="jmx.jar" location="../lib/mx4j.jar" />
   <property name="commons-modeler.jar" 
location="../../jakarta-commons/modeler/dist/commons-modeler.jar" />
   <property name="commons-logging.jar" value="../lib/commons-logging.jar" />
+  <property name="regexp.jar" value="../lib/jakarta-regexp-1.2.jar" />
 
 <!-- ========== Component Declarations ==================================== -->
 
@@ -82,6 +83,7 @@
     <pathelement location="${tomcat-coyote.jar}"/>
     <pathelement location="${commons-logging.jar}"/>
     <pathelement location="${commons-modeler.jar}"/>
+    <pathelement location="${regexp.jar}"/>
     <pathelement location="${jmx.jar}"/>
   </path>
 
Index: src/java/org/apache/coyote/http11/Http11Processor.java
===================================================================
RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java,v
retrieving revision 1.81
diff -u -r1.81 Http11Processor.java
--- src/java/org/apache/coyote/http11/Http11Processor.java      1 Oct 2003 10:22:15 
-0000       1.81
+++ src/java/org/apache/coyote/http11/Http11Processor.java      7 Oct 2003 07:39:42 
-0000
@@ -81,6 +81,8 @@
 import org.apache.coyote.http11.filters.IdentityOutputFilter;
 import org.apache.coyote.http11.filters.VoidInputFilter;
 import org.apache.coyote.http11.filters.VoidOutputFilter;
+import org.apache.regexp.RE;
+import org.apache.regexp.RESyntaxException;
 import org.apache.tomcat.util.buf.Ascii;
 import org.apache.tomcat.util.buf.ByteChunk;
 import org.apache.tomcat.util.buf.HexUtils;
@@ -203,7 +205,7 @@
     /**
      * List of restricted user agents.
      */
-    protected String[] restrictedUserAgents = null;
+    protected RE[] restrictedUserAgents = null;
 
 
     /**
@@ -281,9 +283,8 @@
     /**
      * List of user agents to not use gzip with
      */
-    protected String[] noCompressionUserAgents = null;
-
-
+    protected RE       noCompressionUserAgents[]     = null;
+    
     /**
      * List of MIMES which could be gzipped
      */
@@ -364,7 +365,10 @@
      * @param userAgent user-agent string
      */
     public void addNoCompressionUserAgent(String userAgent) {
-        addStringArray(noCompressionUserAgents, userAgent);
+        try {
+            RE nRule = new RE(userAgent);
+            addREArray(noCompressionUserAgents, new RE(userAgent));
+        } catch (RESyntaxException ree) {}
     }
 
 
@@ -373,7 +377,7 @@
      * a large number of connectors, where it would be better to have all of 
      * them referenced a single array).
      */
-    public void setNoCompressionUserAgents(String[] noCompressionUserAgents) {
+    public void setNoCompressionUserAgents(RE[] noCompressionUserAgents) {
         this.noCompressionUserAgents = noCompressionUserAgents;
     }
 
@@ -394,15 +398,6 @@
         }
     }
 
-
-    /**
-     * Return the list of no compression user agents.
-     */
-    public String[] findNoCompressionUserAgents() {
-        return (noCompressionUserAgents);
-    }
-
-
     /**
      * Add a mime-type which will be compressable
      * The mime-type String will be exactly matched
@@ -483,13 +478,38 @@
      * @param value string
      */
     private void addStringArray(String sArray[], String value) {
-        if (sArray == null)
-            sArray = new String[0];
-        String[] results = new String[sArray.length + 1];
-        for (int i = 0; i < sArray.length; i++)
-            results[i] = sArray[i];
-        results[sArray.length] = value;
-        sArray = results;
+        if (sArray == null) {
+            sArray = new String[1];
+            sArray[0] = value;
+        }
+        else {
+            String[] results = new String[sArray.length + 1];
+            for (int i = 0; i < sArray.length; i++)
+                results[i] = sArray[i];
+            results[sArray.length] = value;
+            sArray = results;
+        }
+    }
+
+
+    /**
+     * General use method
+     * 
+     * @param rArray the REArray 
+     * @param value Obj
+     */
+    private void addREArray(RE rArray[], RE value) {
+        if (rArray == null) {
+            rArray = new RE[1];
+            rArray[0] = value;
+        }    
+        else {    
+            RE[] results = new RE[rArray.length + 1];
+            for (int i = 0; i < rArray.length; i++)
+                results[i] = rArray[i];
+            results[rArray.length] = value;
+            rArray = results;
+        }
     }
 
 
@@ -529,13 +549,16 @@
 
     /**
      * Add restricted user-agent (which will downgrade the connector 
-     * to HTTP/1.0 mode). The user agent String given will be exactly matched
-     * to the user-agent header submitted by the client.
+     * to HTTP/1.0 mode). The user agent String given will be matched
+     * via regexp to the user-agent header submitted by the client.
      * 
      * @param userAgent user-agent string
      */
     public void addRestrictedUserAgent(String userAgent) {
-        addStringArray(restrictedUserAgents, userAgent);
+        try {
+            RE nRule = new RE(userAgent);
+            addREArray(restrictedUserAgents, new RE(userAgent));
+        } catch (RESyntaxException ree) {}
     }
 
 
@@ -544,16 +567,37 @@
      * a large number of connectors, where it would be better to have all of 
      * them referenced a single array).
      */
-    public void setRestrictedUserAgents(String[] restrictedUserAgents) {
+    public void setRestrictedUserAgents(RE[] restrictedUserAgents) {
         this.restrictedUserAgents = restrictedUserAgents;
     }
 
+    /**
+     * Set restricted user agent list (which will downgrade the connector
+     * to HTTP/1.0 mode). List contains users agents separated by ',' :
+     * 
+     * ie: "gorilla,desesplorer,tigrus"
+     */
+    public void setRestrictedUserAgents(String restrictedUserAgents) {
+        if (restrictedUserAgents != null) {
+            StringTokenizer st = new StringTokenizer(restrictedUserAgents, ",");
+        
+            while (st.hasMoreTokens()) {
+                addRestrictedUserAgent(st.nextToken().trim());
+            }
+        }
+    }
+
 
     /**
      * Return the list of restricted user agents.
      */
     public String[] findRestrictedUserAgents() {
-        return (restrictedUserAgents);
+        String[] sarr = new String [restrictedUserAgents.length];
+        
+        for (int i = 0; i < restrictedUserAgents.length; i++)
+            sarr[i] = restrictedUserAgents[i].toString();
+            
+        return (sarr);
     }
 
 
@@ -1055,9 +1099,10 @@
             // and keepAlive flags accordingly
             String userAgentValue = userAgentValueMB.toString();
             for (int i = 0; i < restrictedUserAgents.length; i++) {
-                if (restrictedUserAgents[i].equals(userAgentValue)) {
+                if (restrictedUserAgents[i].match(userAgentValue)) {
                     http11 = false;
                     keepAlive = false;
+                    break;
                 }
             }
         }
@@ -1273,9 +1318,10 @@
                 request.getMimeHeaders().getValue("user-agent");
             String userAgentValue = userAgentValueMB.toString();
 
-            // TODO: Use regexp instead of simple string compare (cf: Apache 2.x)
-            if (inStringArray(noCompressionUserAgents, userAgentValue))
-                return false;
+            // If one Regexp rule match, disable compression
+            for (int i = 0; i < noCompressionUserAgents.length; i++)
+                if (noCompressionUserAgents[i].match(userAgentValue))
+                    return false;
         }
 
         // Check if suffisant len to trig the compression        
Index: src/java/org/apache/coyote/http11/Http11Protocol.java
===================================================================
RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Protocol.java,v
retrieving revision 1.40
diff -u -r1.40 Http11Protocol.java
--- src/java/org/apache/coyote/http11/Http11Protocol.java       1 Oct 2003 10:24:47 
-0000       1.40
+++ src/java/org/apache/coyote/http11/Http11Protocol.java       7 Oct 2003 07:39:42 
-0000
@@ -103,6 +103,7 @@
         setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
         setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
         setServerSoTimeout(Constants.DEFAULT_SERVER_SOCKET_TIMEOUT);
+        setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
     }
 
     /**
@@ -256,6 +257,7 @@
      */
     private String compression = "off";
     private String noCompressionUserAgents = null;
+    private String restrictedUserAgents = null;
     private String compressableMimeTypes = "text/html,text/xml,text/plain";
     private int compressionMinSize    = 2048;
     
@@ -332,6 +334,11 @@
         setAttribute("compression", valueS);
     }
 
+    public void setRestrictedUserAgents(String valueS) {
+        restrictedUserAgents = valueS;
+        setAttribute("restrictedUserAgents", valueS);
+    }
+
     public void setNoCompressionUserAgents(String valueS) {
         noCompressionUserAgents = valueS;
         setAttribute("noCompressionUserAgents", valueS);
@@ -492,6 +499,7 @@
             processor.setCompressionMinSize( proto.compressionMinSize);         
             processor.setNoCompressionUserAgents( proto.noCompressionUserAgents);
             processor.setCompressableMimeTypes( proto.compressableMimeTypes);
+            processor.setRestrictedUserAgents( proto.restrictedUserAgents);
             processor.setSocketBuffer( proto.socketBuffer );
 
             thData[Http11Protocol.THREAD_DATA_PROCESSOR]=processor;

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to