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 2012/08/02 14:03:00 UTC

svn commit: r1368430 - in /httpcomponents/httpasyncclient/trunk: RELEASE_NOTES.txt httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java

Author: olegk
Date: Thu Aug  2 12:03:00 2012
New Revision: 1368430

URL: http://svn.apache.org/viewvc?rev=1368430&view=rev
Log:
HTTPASYNC-20: HTTP exchange can now be aborted with HttpUriRequest#abort()

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

Modified: httpcomponents/httpasyncclient/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/RELEASE_NOTES.txt?rev=1368430&r1=1368429&r2=1368430&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpasyncclient/trunk/RELEASE_NOTES.txt Thu Aug  2 12:03:00 2012
@@ -1,6 +1,9 @@
 Changes sicne release 4.0 Beta 1
 -------------------
 
+* [HTTPASYNC-20] HTTP exchange can now be aborted with HttpUriRequest#abort().
+  Contributed by Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPASYNC-17] Caching HttpAsyncClient facade.
   Contributed by Clinton Nielsen <clinton.h.nielsen at gmail.com>
 

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java?rev=1368430&r1=1368429&r2=1368430&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java Thu Aug  2 12:03:00 2012
@@ -54,6 +54,7 @@ import org.apache.http.client.NonRepeata
 import org.apache.http.client.RedirectException;
 import org.apache.http.client.RedirectStrategy;
 import org.apache.http.client.UserTokenHandler;
+import org.apache.http.client.methods.AbortableHttpRequest;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.client.params.ClientPNames;
 import org.apache.http.client.params.HttpClientParams;
@@ -61,6 +62,7 @@ import org.apache.http.client.protocol.C
 import org.apache.http.client.utils.URIUtils;
 import org.apache.http.concurrent.FutureCallback;
 import org.apache.http.conn.ConnectionKeepAliveStrategy;
+import org.apache.http.conn.ConnectionReleaseTrigger;
 import org.apache.http.conn.routing.BasicRouteDirector;
 import org.apache.http.conn.routing.HttpRoute;
 import org.apache.http.conn.routing.HttpRouteDirector;
@@ -92,7 +94,7 @@ import org.apache.http.protocol.HttpProc
 class DefaultAsyncRequestDirector<T> implements HttpAsyncRequestExecutionHandler<T> {
 
     private static final AtomicLong COUNTER = new AtomicLong(1);
-    
+
     private final Log log;
 
     private final HttpAsyncRequestProducer requestProducer;
@@ -117,7 +119,7 @@ class DefaultAsyncRequestDirector<T> imp
 
     private volatile boolean closed;
     private volatile ManagedClientAsyncConnection managedConn;
-    
+
     private RoutedRequest mainRequest;
     private RoutedRequest followup;
     private HttpResponse finalResponse;
@@ -209,6 +211,18 @@ class DefaultAsyncRequestDirector<T> imp
 
             HttpHost target = this.requestProducer.getTarget();
             HttpRequest request = this.requestProducer.generateRequest();
+            if (request instanceof AbortableHttpRequest) {
+                ((AbortableHttpRequest) request).setReleaseTrigger(new ConnectionReleaseTrigger() {
+
+                    public void releaseConnection() throws IOException {
+                    }
+
+                    public void abortConnection() throws IOException {
+                        cancel();
+                    }
+
+                });
+            }
             this.params = new ClientParamsStack(null, this.clientParams, request.getParams(), null);
             RequestWrapper wrapper = wrapRequest(request);
             wrapper.setParams(this.params);
@@ -279,7 +293,7 @@ class DefaultAsyncRequestDirector<T> imp
                 this.targetAuthState.update(
                         new BasicScheme(), new UsernamePasswordCredentials(userinfo));
             }
-            
+
             // Re-write request URI if needed
             rewriteRequestURI(this.currentRequest, route);
         }