package com.easydroid.services; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.conn.params.ConnManagerPNames; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.conn.params.ConnPerRouteBean; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import android.content.Context; import android.util.Log; import com.easydroid.utils.EasyDroid; import com.easydroid.utils.ResponseCodes; public class EasyRestClient { private final String TAG = getClass().getName(); private EasyServiceRequest easyServiceRequest; private HttpParams httpParameters; private HttpRequestBase httpRequest; private HttpResponse httpResponse; private Context context; public static final int MAX_CONNECTIONS = 10; public static final int MAX_CONNECTIONS_PERROUTE = 1; public static final int MAX_CONNECTION_TIMEOUT = 30000; public EasyRestClient(EasyServiceRequest request, Context context) { this.context = context; this.easyServiceRequest = request; httpParameters = new BasicHttpParams(); httpParameters.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, MAX_CONNECTIONS); httpParameters.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(MAX_CONNECTIONS_PERROUTE)); httpParameters.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE,false); httpParameters.setLongParameter(ConnManagerParams.TIMEOUT, request.getConnectionTimeout()); HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(httpParameters, "utf8"); HttpConnectionParams.setConnectionTimeout(httpParameters, request.getConnectionTimeout()); HttpConnectionParams.setSoTimeout(httpParameters, request.getConnectionTimeout()); ConnManagerParams.setTimeout(httpParameters, request.getConnectionTimeout()); } public InputStream execute() throws ClientProtocolException, IOException { this.httpRequest = easyServiceRequest.createHttpRequest(); if(EasyDroid.enableLogging) Log.d(TAG, this.httpRequest.getURI().toString()); return getInputStream(getSecuredHttpClient().execute(this.httpRequest)); } public ResponseCodes getHttpResponseCode() { return ResponseCodes.getEnum(httpResponse.getStatusLine().getStatusCode()); } private InputStream getInputStream(HttpResponse httpResponse) { this.httpResponse = httpResponse; HttpEntity entity = httpResponse.getEntity(); if (entity != null) { try { return entity.getContent(); } catch (IllegalStateException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } } else { return null; } } public void abortHttpClient() { if(httpRequest != null) httpRequest.abort(); } private HttpClient getSecuredHttpClient() { if(easyServiceRequest.isSecureConnectionRequest && EasyDroid.BOUNCY_CASTLE_KEYSTORE_ID != 0) return new EasySecureHttpClient(context); else return new DefaultHttpClient(httpParameters); } }