package com.limegroup.gnutella.http;
import java.util.concurrent.ExecutorService;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.params.HttpParams;
import org.limewire.collection.Cancellable;
import org.limewire.nio.observer.Shutdownable;
/**
* Something that executes HTTP requests using the http client library.
*/
public interface HttpExecutor {
/**
* Execute an http request asynchronously. A default
* {@link org.apache.http.params.HttpParams} is used with a connection
* timeout of 5s, socket timeout of 8s, and maximum redirects of 10.
*
* @param request the request to execute
* @return a {@link Shutdownable} to allow the request to be aborted.
*/
Shutdownable execute(HttpUriRequest request);
/**
* Execute an http request asynchronously.
*
* @param request the request to execute
* @param params the {@link org.apache.http.params.HttpParams} to use
* @return a {@link Shutdownable} to allow the request to be aborted.
*/
Shutdownable execute(HttpUriRequest method, HttpParams params);
/**
* Execute an http request asynchronously.
*
* @param request the request to execute
* @param params the {@link org.apache.http.params.HttpParams} to use
* @param listener the {@link HttpClientListener} to use
* @return a {@link Shutdownable} to allow the request to be aborted.
*/
public Shutdownable execute(HttpUriRequest method, HttpParams params,
HttpClientListener listener);
/**
* Tries to execute any of the methods until the HttpClientListener
* instructs the executor to stop processing more, or the Cancellable
* returns true for isCancelled.
* <p>
* This returns a Shutdownable that can be used to shutdown the execution of
* requesting all methods, to stop the current processing.
*/
public Shutdownable executeAny(HttpClientListener listener, ExecutorService executor,
Iterable<? extends HttpUriRequest> methods, HttpParams params, Cancellable canceller);
/**
* Release any resources held by the provided method. The users of this
* class must call this method once they're done processing their HttpMethod
* object.
*/
public void releaseResources(HttpResponse method);
}