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 2013/10/02 09:44:41 UTC

svn commit: r1528328 - /httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java

Author: olegk
Date: Wed Oct  2 07:44:40 2013
New Revision: 1528328

URL: http://svn.apache.org/r1528328
Log:
HTTPCLIENT-1405: CONNECT HTTP/1.1 requests lack mandatory 'Host' header

Modified:
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java?rev=1528328&r1=1528327&r2=1528328&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java Wed Oct  2 07:44:40 2013
@@ -60,6 +60,7 @@ import org.apache.http.client.methods.Co
 import org.apache.http.client.methods.HttpRequestWrapper;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.client.protocol.RequestClientConnControl;
 import org.apache.http.client.utils.URIUtils;
 import org.apache.http.conn.ConnectionKeepAliveStrategy;
 import org.apache.http.conn.routing.BasicRouteDirector;
@@ -77,6 +78,8 @@ import org.apache.http.nio.conn.NHttpCli
 import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
 import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
 import org.apache.http.protocol.HttpProcessor;
+import org.apache.http.protocol.ImmutableHttpProcessor;
+import org.apache.http.protocol.RequestTargetHost;
 
 class MainClientExec implements InternalClientExec {
 
@@ -84,6 +87,7 @@ class MainClientExec implements Internal
 
     private final NHttpClientConnectionManager connmgr;
     private final HttpProcessor httpProcessor;
+    private final HttpProcessor proxyHttpProcessor;
     private final HttpRoutePlanner routePlanner;
     private final ConnectionReuseStrategy connReuseStrategy;
     private final ConnectionKeepAliveStrategy keepaliveStrategy;
@@ -107,6 +111,8 @@ class MainClientExec implements Internal
         super();
         this.connmgr = connmgr;
         this.httpProcessor = httpProcessor;
+        this.proxyHttpProcessor = new ImmutableHttpProcessor(
+                new RequestTargetHost(), new RequestClientConnControl());
         this.routePlanner = routePlanner;
         this.connReuseStrategy = connReuseStrategy;
         this.keepaliveStrategy = keepaliveStrategy;
@@ -177,7 +183,7 @@ class MainClientExec implements Internal
                     if (this.log.isDebugEnabled()) {
                         this.log.debug("[exchange: " + state.getId() + "] Tunnel required");
                     }
-                    final HttpRequest connect = createConnectRequest(route);
+                    final HttpRequest connect = createConnectRequest(route, state);
                     state.setCurrentRequest(HttpRequestWrapper.wrap(connect));
                     break loop;
                 case HttpRouteDirector.TUNNEL_PROXY:
@@ -521,7 +527,8 @@ class MainClientExec implements Internal
         this.httpProcessor.process(currentRequest, localContext);
     }
 
-    private HttpRequest createConnectRequest(final HttpRoute route) {
+    private HttpRequest createConnectRequest(
+            final HttpRoute route, final InternalState state) throws IOException, HttpException {
         // see RFC 2817, section 5.2 and
         // INTERNET-DRAFT: Tunneling TCP based protocols through
         // Web proxy servers
@@ -532,7 +539,10 @@ class MainClientExec implements Internal
         buffer.append(host);
         buffer.append(':');
         buffer.append(Integer.toString(port));
-        return new BasicHttpRequest("CONNECT", buffer.toString(), HttpVersion.HTTP_1_1);
+        final HttpRequest request = new BasicHttpRequest("CONNECT", buffer.toString(), HttpVersion.HTTP_1_1);
+        final HttpClientContext localContext = state.getLocalContext();
+        this.proxyHttpProcessor.process(request, localContext);
+        return request;
     }
 
     private boolean handleConnectResponse(final InternalState state) throws HttpException {