1 package com.example.xub3.speakerlocator;
3 import android.util.Log;
5 import org.apache.http.HttpResponse;
6 import org.apache.http.HttpVersion;
7 import org.apache.http.client.HttpClient;
8 import org.apache.http.client.methods.HttpPost;
9 import org.apache.http.conn.ClientConnectionManager;
10 import org.apache.http.conn.scheme.PlainSocketFactory;
11 import org.apache.http.conn.scheme.Scheme;
12 import org.apache.http.conn.scheme.SchemeRegistry;
13 import org.apache.http.conn.ssl.SSLSocketFactory;
14 import org.apache.http.entity.StringEntity;
15 import org.apache.http.impl.client.DefaultHttpClient;
16 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
17 import org.apache.http.params.BasicHttpParams;
18 import org.apache.http.params.CoreConnectionPNames;
19 import org.apache.http.params.CoreProtocolPNames;
20 import org.apache.http.params.HttpParams;
21 import org.apache.http.protocol.HTTP;
22 import org.json.JSONArray;
23 import org.json.JSONObject;
25 import java.io.BufferedInputStream;
26 import java.io.BufferedReader;
27 import java.io.IOException;
28 import java.io.InputStreamReader;
29 import java.io.InputStream;
30 import java.security.KeyStore;
31 import java.security.cert.Certificate;
32 import java.security.cert.CertificateFactory;
33 import java.security.cert.X509Certificate;
37 * Created by xub3 on 4/14/16.
40 private static final int Driver_port = 8000;
41 private static final String Tag = "CallReceiver";
42 private static final String KEYEXT = ".pem";
43 HttpClient httpclient;
46 void setConnection(String destIP) {
48 httpclient = createClient(destIP);
51 HttpClient createClient(String destIP) {
52 HttpParams params = new BasicHttpParams();
53 params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
54 params.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, HTTP.DEFAULT_CONTENT_CHARSET);
55 params.setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, true);
56 params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30 * 1000);
57 params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30 * 1000);
59 SchemeRegistry schReg = new SchemeRegistry();
60 schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), Driver_port));
61 schReg.register(new Scheme("https", newSslSocketFactory(destIP), 443));
62 ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);
64 return new DefaultHttpClient(conMgr, params);
67 private SSLSocketFactory newSslSocketFactory(String destIP) {
69 // Load CAs from an InputStream
70 CertificateFactory cf = CertificateFactory.getInstance("X.509");
71 InputStream caInput = new
72 BufferedInputStream(MainActivity.context.getAssets().open(destIP + KEYEXT));
75 ca = cf.generateCertificate(caInput);
76 System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
80 String keyStoreType = KeyStore.getDefaultType();
81 KeyStore keyStore = KeyStore.getInstance(keyStoreType);
82 keyStore.load(null, null);
83 keyStore.setCertificateEntry("ca", ca);
84 SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore);
86 } catch (Exception e) {
87 throw new AssertionError(e);
92 public void makeRequest(String destIP, Object contentStr, String methodName) {
93 String url = "https://"+ destIP+":" + Driver_port + "/"+methodName;
94 System.out.println("URL: " + url);
96 InputStream inputStream = null;
98 StringBuilder sb = new StringBuilder();
100 HttpPost httpPost = new HttpPost(url);
101 JSONArray params = new JSONArray();
103 JSONObject content = new JSONObject();
104 JSONObject parent = new JSONObject();
105 content.put("type", contentStr.getClass().getName());
106 content.put("value", contentStr);
107 params.put(0,content);
108 parent.put("params", params);
109 StringEntity se = new StringEntity(parent.toString());
110 httpPost.setEntity(se);
111 httpPost.setHeader("Accept", "application/json");
112 httpPost.setHeader("Content-type", "application/json");
113 HttpResponse httpResponse = httpclient.execute(httpPost);
114 // 9. receive response as inputStream
115 inputStream = httpResponse.getEntity().getContent();
117 // 10. convert inputstream to string
118 if(inputStream != null)
119 result = convertInputStreamToString(inputStream);
121 result = "Did not work!";
123 } catch (Exception ex) {
124 if (ex.getMessage() != null) {
125 Log.v(Tag, ex.getMessage());
127 ex.printStackTrace();
130 private static String convertInputStreamToString(InputStream inputStream) throws IOException{
131 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
134 while((line = bufferedReader.readLine()) != null)