c5997813b7e51e3a3d559463900e126bce739b61
[iot2.git] / benchmarks / other / PhoneInterface / SpeakerLocator / app / src / main / java / com / example / xub3 / speakerlocator / Helper.java
1 package com.example.xub3.speakerlocator;
2
3 import android.util.Log;
4
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;
24
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;
34
35
36 /**
37  * Created by xub3 on 4/14/16.
38  */
39 public class Helper {
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;
44         //Set up
45         //Set up
46         void setConnection(String destIP) {
47
48                 httpclient = createClient(destIP);
49         }
50
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);
58
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);
63
64                 return new DefaultHttpClient(conMgr, params);
65         }
66
67         private SSLSocketFactory newSslSocketFactory(String destIP) {
68                 try {
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));
73                         Certificate ca;
74                         try {
75                                 ca = cf.generateCertificate(caInput);
76                                 System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
77                         } finally {
78                                 caInput.close();
79                         }
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);
85                         return socketFactory;
86                 } catch (Exception e) {
87                         throw new AssertionError(e);
88                 }
89         }
90
91         //Make http request
92         public void  makeRequest(String destIP, Object contentStr, String methodName) {
93                 String url = "https://"+ destIP+":" + Driver_port + "/"+methodName;
94                 System.out.println("URL: " + url);
95
96                 InputStream inputStream = null;
97                 String result = "";
98                         StringBuilder sb = new StringBuilder();
99                         try {
100                                 HttpPost httpPost = new HttpPost(url);
101                                 JSONArray params = new JSONArray();
102
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();
116
117                                 // 10. convert inputstream to string
118                                 if(inputStream != null)
119                                         result = convertInputStreamToString(inputStream);
120                                 else
121                                         result = "Did not work!";
122                                 Log.v(Tag, result);
123                         } catch (Exception ex) {
124                                 if (ex.getMessage() != null) {
125                                         Log.v(Tag, ex.getMessage());
126                                 }
127                                 ex.printStackTrace();
128                         }
129                 }
130         private static String convertInputStreamToString(InputStream inputStream) throws IOException{
131                 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
132                 String line = "";
133                 String result = "";
134                 while((line = bufferedReader.readLine()) != null)
135                         result += line;
136
137                 inputStream.close();
138                 return result;
139         }
140 }
141