Return-Path: Delivered-To: apmail-jakarta-httpcomponents-commits-archive@www.apache.org Received: (qmail 71693 invoked from network); 11 May 2007 09:30:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 May 2007 09:30:36 -0000 Received: (qmail 64009 invoked by uid 500); 11 May 2007 09:30:43 -0000 Delivered-To: apmail-jakarta-httpcomponents-commits-archive@jakarta.apache.org Received: (qmail 63995 invoked by uid 500); 11 May 2007 09:30:42 -0000 Mailing-List: contact httpcomponents-commits-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: httpcomponents-dev@jakarta.apache.org Delivered-To: mailing list httpcomponents-commits@jakarta.apache.org Received: (qmail 63986 invoked by uid 99); 11 May 2007 09:30:42 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2007 02:30:42 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2007 02:30:35 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 0C30E1A9838; Fri, 11 May 2007 02:30:15 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r537144 - in /jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http: auth/ impl/client/ Date: Fri, 11 May 2007 09:30:14 -0000 To: httpcomponents-commits@jakarta.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070511093015.0C30E1A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: olegk Date: Fri May 11 02:30:13 2007 New Revision: 537144 URL: http://svn.apache.org/viewvc?view=rev&rev=537144 Log: Implemented request URI rewriting (depending on whether the request is being routed via a proxy or not) Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScheme.java jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScope.java jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/UsernamePasswordCredentials.java jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/AbstractHttpClient.java jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultClientRequestDirector.java jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultHttpClient.java Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScheme.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScheme.java?view=diff&rev=537144&r1=537143&r2=537144 ============================================================================== --- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScheme.java (original) +++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScheme.java Fri May 11 02:30:13 2007 @@ -62,7 +62,7 @@ * challenge-response exchanges *

* - * @author Oleg Kalnichevski + * @author Oleg Kalnichevski * @author Adrian Sutton * * @since 4.0 Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScope.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScope.java?view=diff&rev=537144&r1=537143&r2=537144 ============================================================================== --- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScope.java (original) +++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthScope.java Fri May 11 02:30:13 2007 @@ -37,7 +37,7 @@ * a port number, a realm name and an authentication scheme name which * {@link Credentials Credentials} apply to. * - * @author Oleg Kalnichevski + * @author Oleg Kalnichevski * @author Adrian Sutton * * @since 3.0 Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/UsernamePasswordCredentials.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/UsernamePasswordCredentials.java?view=diff&rev=537144&r1=537143&r2=537144 ============================================================================== --- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/UsernamePasswordCredentials.java (original) +++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/UsernamePasswordCredentials.java Fri May 11 02:30:13 2007 @@ -38,7 +38,7 @@ * @author Remy Maucherat * @author Sean C. Sullivan * @author Mike Bowler - * @author Oleg Kalnichevski + * @author Oleg Kalnichevski * * @version $Revision$ $Date$ * Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/AbstractHttpClient.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/AbstractHttpClient.java?view=diff&rev=537144&r1=537143&r2=537144 ============================================================================== --- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/AbstractHttpClient.java (original) +++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/AbstractHttpClient.java Fri May 11 02:30:13 2007 @@ -64,7 +64,7 @@ * Convenience base class for HTTP client implementations. * * @author Roland Weber - * + * @author Oleg Kalnichevski * * * @version $Revision$ Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultClientRequestDirector.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultClientRequestDirector.java?view=diff&rev=537144&r1=537143&r2=537144 ============================================================================== --- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultClientRequestDirector.java (original) +++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultClientRequestDirector.java Fri May 11 02:30:13 2007 @@ -32,6 +32,7 @@ package org.apache.http.impl.client; import java.io.IOException; +import java.net.URI; import java.net.URISyntaxException; import org.apache.commons.logging.Log; @@ -40,6 +41,7 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpException; +import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; @@ -69,7 +71,7 @@ * This class replaces the HttpMethodDirector in HttpClient 3. * * @author Roland Weber - * + * @author Oleg Kalnichevski * * * @version $Revision$ @@ -145,8 +147,8 @@ } - private RequestWrapper wrapRequest(final RoutedRequest roureq) throws ProtocolException { - HttpRequest request = roureq.getRequest(); + private RequestWrapper wrapRequest( + final HttpRequest request) throws ProtocolException { try { if (request instanceof HttpEntityEnclosingRequest) { return new EntityEnclosingRequestWrapper( @@ -162,21 +164,65 @@ } + private void rewriteRequestURI( + final RequestWrapper request, + final HttpRoute route) throws ProtocolException { + try { + + URI uri = request.getURI(); + if (route.getProxyHost() != null && !route.isTunnelled()) { + // Make sure the request URI is absolute + if (!uri.isAbsolute()) { + HttpHost target = route.getTargetHost(); + uri = new URI( + target.getSchemeName(), + null, + target.getHostName(), + target.getPort(), + uri.getPath(), + uri.getQuery(), + uri.getFragment()); + request.setURI(uri); + } + } else { + // Make sure the request URI is relative + if (uri.isAbsolute()) { + uri = new URI(null, null, null, -1, + uri.getPath(), + uri.getQuery(), + uri.getFragment()); + request.setURI(uri); + } + } + + } catch (URISyntaxException ex) { + throw new ProtocolException("Invalid URI: " + + request.getRequestLine().getUri(), ex); + } + } + + // non-javadoc, see interface ClientRequestDirector public HttpResponse execute(RoutedRequest roureq, HttpContext context) throws HttpException, IOException { - RequestWrapper request = wrapRequest(roureq); + RequestWrapper request = wrapRequest(roureq.getRequest()); HttpResponse response = null; boolean done = false; try { int execCount = 0; while (!done) { + + HttpRoute route = roureq.getRoute(); + + // Re-write request URI if needed + rewriteRequestURI(request, route); + if (managedConn == null) { - managedConn = allocateConnection(roureq.getRoute()); + managedConn = allocateConnection(route); } - establishRoute(roureq.getRoute(), context); + establishRoute(route, context); context.setAttribute(HttpExecutionContext.HTTP_TARGET_HOST, roureq.getRoute().getTargetHost()); Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultHttpClient.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultHttpClient.java?view=diff&rev=537144&r1=537143&r2=537144 ============================================================================== --- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultHttpClient.java (original) +++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/impl/client/DefaultHttpClient.java Fri May 11 02:30:13 2007 @@ -82,7 +82,7 @@ * This class replaces HttpClient in HttpClient 3. * * @author Roland Weber - * + * @author Oleg Kalnichevski * * * @version $Revision$