You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2006/07/03 11:55:57 UTC

svn commit: r418728 - in /jakarta/httpcomponents/httpcore/trunk/src: java/org/apache/http/impl/ java/org/apache/http/message/ java/org/apache/http/util/ test/org/apache/http/util/

Author: olegk
Date: Mon Jul  3 02:55:56 2006
New Revision: 418728

URL: http://svn.apache.org/viewvc?rev=418728&view=rev
Log:
[HTTPCORE-6] When transmitting HTTP messages, re-use Header buffers whenever possible. 

Modified:
    jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpClientConnection.java
    jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpServerConnection.java
    jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/message/BufferedHeader.java
    jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/util/HeaderUtils.java
    jakarta/httpcomponents/httpcore/trunk/src/test/org/apache/http/util/TestHeaderUtils.java

Modified: jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpClientConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpClientConnection.java?rev=418728&r1=418727&r2=418728&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpClientConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpClientConnection.java Mon Jul  3 02:55:56 2006
@@ -55,6 +55,7 @@
 import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicRequestLine;
 import org.apache.http.message.BasicStatusLine;
+import org.apache.http.message.BufferedHeader;
 import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
 import org.apache.http.params.HttpProtocolParams;
@@ -207,9 +208,15 @@
     protected void sendRequestHeaders(final HttpRequest request) 
             throws HttpException, IOException {
         for (Iterator it = request.headerIterator(); it.hasNext(); ) {
-            this.buffer.clear();
-            BasicHeader.format(this.buffer, (Header) it.next());
-            this.datatransmitter.writeLine(this.buffer);
+            Header header = (Header) it.next();
+            if (header instanceof BufferedHeader) {
+                // If the header is backed by a buffer, re-use the buffer
+                this.datatransmitter.writeLine(((BufferedHeader)header).getBuffer());
+            } else {
+                this.buffer.clear();
+                BasicHeader.format(this.buffer, header);
+                this.datatransmitter.writeLine(this.buffer);
+            }
         }
         this.buffer.clear();
         this.datatransmitter.writeLine(this.buffer);

Modified: jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpServerConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpServerConnection.java?rev=418728&r1=418727&r2=418728&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpServerConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/impl/DefaultHttpServerConnection.java Mon Jul  3 02:55:56 2006
@@ -51,6 +51,7 @@
 import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicRequestLine;
 import org.apache.http.message.BasicStatusLine;
+import org.apache.http.message.BufferedHeader;
 import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
 import org.apache.http.util.HeaderUtils;
@@ -188,9 +189,15 @@
     protected void sendResponseHeaders(final HttpResponse response) 
             throws HttpException, IOException {
         for (Iterator it = response.headerIterator(); it.hasNext(); ) {
-            this.buffer.clear();
-            BasicHeader.format(this.buffer, (Header) it.next());
-            this.datatransmitter.writeLine(this.buffer);
+            Header header = (Header) it.next();
+            if (header instanceof BufferedHeader) {
+                // If the header is backed by a buffer, re-use the buffer
+                this.datatransmitter.writeLine(((BufferedHeader)header).getBuffer());
+            } else {
+                this.buffer.clear();
+                BasicHeader.format(this.buffer, header);
+                this.datatransmitter.writeLine(this.buffer);
+            }
         }
         this.buffer.clear();
         this.datatransmitter.writeLine(this.buffer);

Modified: jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/message/BufferedHeader.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/message/BufferedHeader.java?rev=418728&r1=418727&r2=418728&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/message/BufferedHeader.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/message/BufferedHeader.java Mon Jul  3 02:55:56 2006
@@ -31,7 +31,6 @@
 
 import org.apache.http.Header;
 import org.apache.http.HeaderElement;
-import org.apache.http.ProtocolException;
 import org.apache.http.io.CharArrayBuffer;
 
 /**
@@ -62,18 +61,18 @@
      * @param name the header name
      * @param value the header value
      */
-    public BufferedHeader(final CharArrayBuffer buffer) throws ProtocolException {
+    public BufferedHeader(final CharArrayBuffer buffer) {
         super();
         if (buffer == null) {
             throw new IllegalArgumentException("Char array buffer may not be null");
         }
         int colon = buffer.indexOf(':');
         if (colon == -1) {
-            throw new ProtocolException("Invalid header: " + buffer.toString());
+            throw new IllegalArgumentException("Invalid header: " + buffer.toString());
         }
         String s = buffer.substringTrimmed(0, colon);
         if (s.equals("")) {
-            throw new ProtocolException("Invalid header: " + buffer.toString());
+            throw new IllegalArgumentException("Invalid header: " + buffer.toString());
         }
         this.buffer = buffer;
         this.name = s;
@@ -92,6 +91,10 @@
         return BasicHeaderElement.parseAll(this.buffer, this.valuePos, this.buffer.length());
     }
 
+    public int getValuePos() {
+        return this.valuePos;
+    }
+    
     public CharArrayBuffer getBuffer() {
         return this.buffer;
     }

Modified: jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/util/HeaderUtils.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/util/HeaderUtils.java?rev=418728&r1=418727&r2=418728&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/util/HeaderUtils.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/src/java/org/apache/http/util/HeaderUtils.java Mon Jul  3 02:55:56 2006
@@ -34,6 +34,7 @@
 
 import org.apache.http.Header;
 import org.apache.http.HttpException;
+import org.apache.http.ProtocolException;
 import org.apache.http.io.CharArrayBuffer;
 import org.apache.http.io.HttpDataReceiver;
 import org.apache.http.message.BufferedHeader;
@@ -111,7 +112,11 @@
         Header[] headers = new Header[headerLines.size()];
         for (int i = 0; i < headerLines.size(); i++) {
             CharArrayBuffer buffer = (CharArrayBuffer) headerLines.get(i);
-            headers[i] = new BufferedHeader(buffer);
+            try {
+                headers[i] = new BufferedHeader(buffer);
+            } catch (IllegalArgumentException ex) {
+                throw new ProtocolException(ex.getMessage());
+            }
         }
         return headers;
     }

Modified: jakarta/httpcomponents/httpcore/trunk/src/test/org/apache/http/util/TestHeaderUtils.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/src/test/org/apache/http/util/TestHeaderUtils.java?rev=418728&r1=418727&r2=418728&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/src/test/org/apache/http/util/TestHeaderUtils.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/src/test/org/apache/http/util/TestHeaderUtils.java Mon Jul  3 02:55:56 2006
@@ -103,6 +103,7 @@
         assertTrue(h instanceof BufferedHeader);
         assertNotNull(((BufferedHeader)h).getBuffer());
         assertEquals("header1: stuff", ((BufferedHeader)h).toString());
+        assertEquals(8, ((BufferedHeader)h).getValuePos());
     }
 
     public void testBufferedHeader() throws Exception {