package com.boombuler.piraten.utils;
import java.io.InputStream;
import java.net.URI;
import java.security.KeyStore;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.ProtocolException;
import org.apache.http.client.RedirectHandler;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;
import org.apache.http.protocol.HttpContext;
import com.boombuler.piraten.map.R;
import android.content.Context;
import android.util.Log;
public class MyHttpClient extends DefaultHttpClient {
private static final String TAG = "map.boombuler.HttpClient";
private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
private static final String ENCODING_GZIP = "gzip";
private final Context mContext;
public MyHttpClient(Context context) {
super();
mContext = context;
PreventRedirection();
ActivateGZipSupport();
}
private void PreventRedirection() {
setRedirectHandler(new RedirectHandler() {
public boolean isRedirectRequested(HttpResponse response,
HttpContext context) {
return false;
}
public URI getLocationURI(HttpResponse response, HttpContext context)
throws ProtocolException {
return null;
}
});
}
private void ActivateGZipSupport() {
addRequestInterceptor(new HttpRequestInterceptor() {
public void process(HttpRequest request, HttpContext context) {
// Add header to accept gzip content
if (!request.containsHeader(HEADER_ACCEPT_ENCODING)) {
request.addHeader(HEADER_ACCEPT_ENCODING, ENCODING_GZIP);
}
}
});
addResponseInterceptor(new HttpResponseInterceptor() {
public void process(HttpResponse response, HttpContext context) {
// Inflate any responses compressed with gzip
final HttpEntity entity = response.getEntity();
final Header encoding = entity.getContentEncoding();
if (encoding != null) {
for (HeaderElement element : encoding.getElements()) {
if (element.getName().equalsIgnoreCase(ENCODING_GZIP)) {
response.setEntity(new InflatingEntity(response.getEntity()));
break;
}
}
}
}
});
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
Log.d(TAG, "creating connection manager");
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
Log.d(TAG, "http scheme registered");
try {
SSLSocketFactory factory = new AdditionalKeyStoresSSLSocketFactory(getKeyStore());
registry.register(new Scheme("https", factory, 443));
} catch (Exception e) {
e.printStackTrace();
}
return new SingleClientConnManager(getParams(), registry);
}
private KeyStore getKeyStore() {
try {
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = mContext.getResources().openRawResource(R.raw.piraten_server);
try {
trusted.load(in, "piraten".toCharArray());
} finally {
in.close();
}
return trusted;
} catch (Exception e) {
throw new AssertionError(e);
}
}
}