Author: mturk Date: Sun Nov 26 01:29:15 2006 New Revision: 479317 URL: http://svn.apache.org/viewvc?view=rev&rev=479317 Log: Compress outgoing response headers according to the AJP13 protocol specification.
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?view=diff&rev=479317&r1=479316&r2=479317 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Sun Nov 26 01:29:15 2006 @@ -960,9 +960,15 @@ // Other headers int numHeaders = headers.size(); responseHeaderMessage.appendInt(numHeaders); - for (int i = 0; i < numHeaders; i++) { + for (int i = 0; i < numHeaders; i++) { MessageBytes hN = headers.getName(i); - responseHeaderMessage.appendBytes(hN); + int hC = Constants.getResponseAjpIndex(hN.toString()); + if (hC > 0) { + responseHeaderMessage.appendInt(hC); + } + else { + responseHeaderMessage.appendBytes(hN); + } MessageBytes hV=headers.getValue(i); responseHeaderMessage.appendBytes(hV); } Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?view=diff&rev=479317&r1=479316&r2=479317 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Sun Nov 26 01:29:15 2006 @@ -929,7 +929,13 @@ responseHeaderMessage.appendInt(numHeaders); for (int i = 0; i < numHeaders; i++) { MessageBytes hN = headers.getName(i); - responseHeaderMessage.appendBytes(hN); + int hC = Constants.getResponseAjpIndex(hN.toString()); + if (hC > 0) { + responseHeaderMessage.appendInt(hC); + } + else { + responseHeaderMessage.appendBytes(hN); + } MessageBytes hV=headers.getValue(i); responseHeaderMessage.appendBytes(hV); } Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java?view=diff&rev=479317&r1=479316&r2=479317 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java Sun Nov 26 01:29:15 2006 @@ -17,6 +17,9 @@ package org.apache.coyote.ajp; +import java.lang.IndexOutOfBoundsException; +import java.util.Hashtable; +import java.util.Locale; import org.apache.tomcat.util.buf.ByteChunk; @@ -67,6 +70,7 @@ public static final int SC_RESP_SERVLET_ENGINE = 0xA009; public static final int SC_RESP_STATUS = 0xA00A; public static final int SC_RESP_WWW_AUTHENTICATE = 0xA00B; + public static final int SC_RESP_AJP13_MAX = 11; // Integer codes for common (optional) request attribute names public static final byte SC_A_CONTEXT = 1; // XXX Unused @@ -179,7 +183,47 @@ "user-agent" }; + // Translates integer codes to response header names + public static final String []responseTransArray = { + "content-type", + "content-language", + "content-length", + "date", + "last-modified", + "location", + "set-cookie", + "set-cookie2", + "servlet-engine", + "status", + "www-authenticate" + }; + + private static final Hashtable<String,Integer> responseTransHash = + new Hashtable<String,Integer>(20); + + static { + try { + int i; + for (i = 0; i < SC_RESP_AJP13_MAX; i++) { + responseTransHash.put(responseTransArray[i], + new Integer(0xA001 + i)); + } + } + catch (Exception e) { + // Do nothing + } + } + + public static final int getResponseAjpIndex(String header) + { + Integer i = responseTransHash.get(header.toLowerCase(Locale.US)); + if (i == null) + return 0; + else + return i.intValue(); + } + /** * CRLF. */ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]