package org.limewire.http.httpclient;
import java.io.IOException;
import java.net.Socket;
import org.apache.http.HttpResponse;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.AuthScope;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
import com.google.inject.Provider;
/**
* An <code>HttpClient</code> extension that supports utility methods defined
* in <code>LimeHttpClient</code> and Socket "injection" as defined in
* <code>SocketWrappingHttpClient</code>
*/
class LimeHttpClientImpl extends DefaultHttpClient implements SocketWrappingHttpClient {
private Credentials credentials;
public void setSocket(Socket socket) {
((ReapingClientConnectionManager)getConnectionManager()).setSocket(socket);
}
public void releaseConnection(HttpResponse response) {
close(response);
}
public LimeHttpClientImpl(ReapingClientConnectionManager manager, Provider<HttpParams> defaultParams) {
super(manager, defaultParams.get());
}
/**
* @return an <code>HttpRequestRetryHandler</code> that always returns
* <code>false</code>
*/
@Override
protected HttpRequestRetryHandler createHttpRequestRetryHandler() {
return new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
// when requests fail for unexpected reasons (eg., IOException), we don't
// want to blindly re-attempt
return false;
}
};
}
public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}
@Override
protected CredentialsProvider createCredentialsProvider() {
return new CredentialsProvider() {
public void setCredentials(AuthScope authscope, Credentials credentials) {
throw new UnsupportedOperationException();
}
public Credentials getCredentials(AuthScope authscope) {
return credentials;
}
public void clear() {
credentials = null;
}
};
}
private void close(HttpResponse response) {
HttpClientUtils.releaseConnection(response);
}
}