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 2007/08/04 15:11:36 UTC

svn commit: r562713 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-main/src/main/java/org/apache/http/impl/ module-main/src/main/java/org/apache/http/impl/io/ module-main/src/main/java/org/apache/http/params/

Author: olegk
Date: Sat Aug  4 06:11:35 2007
New Revision: 562713

URL: http://svn.apache.org/viewvc?view=rev&rev=562713
Log:
HTTPCORE-106: Moved garbage tolerant HTTP response parser to HttpClient

Modified:
    jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseParser.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/HttpConnectionParams.java

Modified: jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt?view=diff&rev=562713&r1=562712&r2=562713
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt Sat Aug  4 06:11:35 2007
@@ -1,5 +1,8 @@
 Changes since release 4.0 Alpha 5
 
+* [HTTPCORE-106] Pluggable HTTP message parsers and message writers
+  Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPCORE-105] Consistent class names in base and NIO modules
   Oleg Kalnichevski <olegk at apache.org>
 

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java?view=diff&rev=562713&r1=562712&r2=562713
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java Sat Aug  4 06:11:35 2007
@@ -72,8 +72,7 @@
     private SessionOutputBuffer outbuffer = null;
     private HttpMessageParser responseParser = null;
     private HttpMessageWriter requestWriter = null;
-
-    private HttpConnectionMetricsImpl metrics;
+    private HttpConnectionMetricsImpl metrics = null;
     
     public AbstractHttpClientConnection() {
         super();
@@ -121,7 +120,9 @@
         this.inbuffer = inbuffer;
         this.outbuffer = outbuffer;
         this.responseParser = createResponseParser(
-                inbuffer, createHttpResponseFactory(), params);
+                inbuffer, 
+                createHttpResponseFactory(), 
+                params);
         this.requestWriter = createRequestWriter(
                 outbuffer, params);
         this.metrics = new HttpConnectionMetricsImpl(

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java?view=diff&rev=562713&r1=562712&r2=562713
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java Sat Aug  4 06:11:35 2007
@@ -72,8 +72,7 @@
     private SessionOutputBuffer outbuffer = null;
     private HttpMessageParser requestParser = null;
     private HttpMessageWriter responseWriter = null;
-
-    private HttpConnectionMetricsImpl metrics;
+    private HttpConnectionMetricsImpl metrics = null;
     
     public AbstractHttpServerConnection() {
         super();
@@ -120,8 +119,10 @@
         }
         this.inbuffer = inbuffer;
         this.outbuffer = outbuffer;
-        this.requestParser = createRequestParser(inbuffer, 
-                createHttpRequestFactory(), params);
+        this.requestParser = createRequestParser(
+                inbuffer, 
+                createHttpRequestFactory(), 
+                params);
         this.responseWriter = createResponseWriter(
                 outbuffer, params);
         this.metrics = new HttpConnectionMetricsImpl(

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseParser.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseParser.java?view=diff&rev=562713&r1=562712&r2=562713
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseParser.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/HttpResponseParser.java Sat Aug  4 06:11:35 2007
@@ -37,20 +37,16 @@
 import org.apache.http.HttpMessage;
 import org.apache.http.HttpResponseFactory;
 import org.apache.http.NoHttpResponseException;
-import org.apache.http.ProtocolException;
 import org.apache.http.StatusLine;
 import org.apache.http.io.SessionInputBuffer;
 import org.apache.http.message.BasicStatusLine;
-import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HTTP;
 import org.apache.http.util.CharArrayBuffer;
 
 public class HttpResponseParser extends AbstractMessageParser {
     
     private final HttpResponseFactory responseFactory;
     private final CharArrayBuffer lineBuf;
-    private final int maxGarbageLines;
     
     public HttpResponseParser(
             final SessionInputBuffer buffer,
@@ -62,53 +58,15 @@
         }
         this.responseFactory = responseFactory;
         this.lineBuf = new CharArrayBuffer(128);
-        this.maxGarbageLines = params.getIntParameter(
-                HttpConnectionParams.MAX_STATUS_LINE_GARBAGE, Integer.MAX_VALUE);
     }
 
-    /**
-     * Tests if the string starts with 'HTTP' signature.
-     * @param buffer buffer to test
-     * @return <tt>true</tt> if the line starts with 'HTTP' 
-     *   signature, <tt>false</tt> otherwise.
-     */
-    protected static boolean startsWithHTTP(final CharArrayBuffer buffer) {
-        try {
-            int i = 0;
-            while (HTTP.isWhitespace(buffer.charAt(i))) {
-                ++i;
-            }
-            return buffer.charAt(i) == 'H' 
-                && buffer.charAt(i + 1) == 'T'
-                && buffer.charAt(i + 2) == 'T'
-                && buffer.charAt(i + 3) == 'P';
-        } catch (IndexOutOfBoundsException e) {
-            return false;
-        }
-    }
-    
     protected HttpMessage parseHead(
             final SessionInputBuffer sessionBuffer) throws IOException, HttpException {
-        // clear the buffer
         this.lineBuf.clear();
-        //read out the HTTP status string
-        int count = 0;
-        do {
-            int i = sessionBuffer.readLine(this.lineBuf);
-            if (i == -1 && count == 0) {
-                // The server just dropped connection on us
-                throw new NoHttpResponseException("The target server failed to respond");
-            }
-            if (startsWithHTTP(this.lineBuf)) {
-                // Got one
-                break;
-            } else if (i == -1 || count >= this.maxGarbageLines) {
-                // Giving up
-                throw new ProtocolException("The server failed to respond with a " +
-                        "valid HTTP response");
-            }
-            count++;
-        } while(true);
+        int i = sessionBuffer.readLine(this.lineBuf);
+        if (i == -1) {
+            throw new NoHttpResponseException("The target server failed to respond");
+        }
         //create the status line from the status string
         StatusLine statusline = BasicStatusLine.parse(this.lineBuf, 0, this.lineBuf.length());
         return this.responseFactory.newHttpResponse(statusline, null);

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/HttpConnectionParams.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/HttpConnectionParams.java?view=diff&rev=562713&r1=562712&r2=562713
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/HttpConnectionParams.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/HttpConnectionParams.java Sat Aug  4 06:11:35 2007
@@ -130,26 +130,6 @@
     public static final String MAX_HEADER_COUNT = "http.connection.max-header-count";
     
     /**
-     * Defines the maximum number of ignorable lines before we expect
-     * a HTTP response's status code.
-     * <p>
-     * With HTTP/1.1 persistent connections, the problem arises that
-     * broken scripts could return a wrong Content-Length
-     * (there are more bytes sent than specified).<br />
-     * Unfortunately, in some cases, this is not possible after the bad response,
-     * but only before the next one. <br />
-     * So, HttpClient must be able to skip those surplus lines this way.
-     * </p>
-     * <p>
-     * Set this to 0 to disallow any garbage/empty lines before the status line.<br />
-     * To specify no limit, use {@link java.lang.Integer#MAX_VALUE} (default in lenient mode).
-     * </p>
-     *  
-     * This parameter expects a value of type {@link Integer}.
-     */
-    public static final String MAX_STATUS_LINE_GARBAGE = "http.connection.max-status-line-garbage";
-
-    /**
      */
     private HttpConnectionParams() {
         super();