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);
}