summaryrefslogtreecommitdiffstats
path: root/java/RequestNetworkController.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/RequestNetworkController.java')
-rw-r--r--java/RequestNetworkController.java180
1 files changed, 180 insertions, 0 deletions
diff --git a/java/RequestNetworkController.java b/java/RequestNetworkController.java
new file mode 100644
index 0000000..718d537
--- /dev/null
+++ b/java/RequestNetworkController.java
@@ -0,0 +1,180 @@
+package com.xc3fff0e.xmanager;
+
+import com.google.gson.Gson;
+
+import java.io.IOException;
+import java.security.cert.CertificateException;
+import java.util.HashMap;
+import java.util.concurrent.TimeUnit;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.FormBody;
+import okhttp3.Headers;
+import okhttp3.HttpUrl;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+
+public class RequestNetworkController {
+public static final String GET = "GET";
+public static final String POST = "POST";
+public static final String PUT = "PUT";
+public static final String DELETE = "DELETE";
+
+public static final int REQUEST_PARAM = 0;
+public static final int REQUEST_BODY = 1;
+
+private static final int SOCKET_TIMEOUT = 15000;
+private static final int READ_TIMEOUT = 25000;
+
+protected OkHttpClient client;
+
+private static RequestNetworkController mInstance;
+
+public static synchronized RequestNetworkController getInstance() {
+if(mInstance == null) {
+mInstance = new RequestNetworkController();
+}
+return mInstance;
+}
+
+private OkHttpClient getClient() {
+if (client == null) {
+OkHttpClient.Builder builder = new OkHttpClient.Builder();
+
+try {
+final TrustManager[] trustAllCerts = new TrustManager[]{
+new X509TrustManager() {
+@Override
+public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)
+throws CertificateException {
+}
+
+@Override
+public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
+throws CertificateException {
+}
+
+@Override
+public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+return new java.security.cert.X509Certificate[]{};
+}
+}
+};
+
+final SSLContext sslContext = SSLContext.getInstance("TLS");
+sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
+builder.connectTimeout(SOCKET_TIMEOUT, TimeUnit.MILLISECONDS);
+builder.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS);
+builder.writeTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS);
+builder.hostnameVerifier(new HostnameVerifier() {
+@Override
+public boolean verify(String hostname, SSLSession session) {
+return true;
+}
+});
+} catch (Exception e) {
+}
+
+client = builder.build();
+}
+
+return client;
+}
+
+public void execute(final RequestNetwork requestNetwork, String method, String url, final String tag, final RequestNetwork.RequestListener requestListener) {
+Request.Builder reqBuilder = new Request.Builder();
+Headers.Builder headerBuilder = new Headers.Builder();
+
+if(requestNetwork.getHeaders().size() > 0) {
+HashMap<String, Object> headers = requestNetwork.getHeaders();
+
+for(HashMap.Entry<String, Object> header : headers.entrySet()) {
+headerBuilder.add(header.getKey(), String.valueOf(header.getValue()));
+}
+}
+
+try {
+if (requestNetwork.getRequestType() == REQUEST_PARAM) {
+if (method.equals(GET)) {
+HttpUrl.Builder httpBuilder;
+
+try {
+httpBuilder = HttpUrl.parse(url).newBuilder();
+} catch (NullPointerException ne) {
+throw new NullPointerException("unexpected url: " + url);
+}
+
+if (requestNetwork.getParams().size() > 0) {
+HashMap<String, Object> params = requestNetwork.getParams();
+
+for (HashMap.Entry<String, Object> param : params.entrySet()) {
+httpBuilder.addQueryParameter(param.getKey(), String.valueOf(param.getValue()));
+}
+}
+
+reqBuilder.url(httpBuilder.build()).headers(headerBuilder.build()).get();
+} else {
+FormBody.Builder formBuilder = new FormBody.Builder();
+if (requestNetwork.getParams().size() > 0) {
+HashMap<String, Object> params = requestNetwork.getParams();
+
+for (HashMap.Entry<String, Object> param : params.entrySet()) {
+formBuilder.add(param.getKey(), String.valueOf(param.getValue()));
+}
+}
+
+RequestBody reqBody = formBuilder.build();
+
+reqBuilder.url(url).headers(headerBuilder.build()).method(method, reqBody);
+}
+} else {
+RequestBody reqBody = RequestBody.create(okhttp3.MediaType.parse("application/json"), new Gson().toJson(requestNetwork.getParams()));
+
+if (method.equals(GET)) {
+reqBuilder.url(url).headers(headerBuilder.build()).get();
+} else {
+reqBuilder.url(url).headers(headerBuilder.build()).method(method, reqBody);
+}
+}
+
+Request req = reqBuilder.build();
+
+getClient().newCall(req).enqueue(new Callback() {
+@Override
+public void onFailure(Call call, final IOException e) {
+requestNetwork.getActivity().runOnUiThread(new Runnable() {
+@Override
+public void run() {
+requestListener.onErrorResponse(tag, e.getMessage());
+}
+});
+}
+
+@Override
+public void onResponse(Call call, final Response response) throws IOException {
+final String responseBody = response.body().string().trim();
+requestNetwork.getActivity().runOnUiThread(new Runnable() {
+@Override
+public void run() {
+requestListener.onResponse(tag, responseBody);
+}
+});
+}
+});
+} catch (Exception e) {
+requestListener.onErrorResponse(tag, e.getMessage());
+}
+}
+} \ No newline at end of file