]> matita.cs.unibo.it Git - logicplayer.git/blob - mainActivity/src/com/example/furt/myapplication/serverComunication.java
9ac2c79818b5609960d2abd0cae0124b6fd573af
[logicplayer.git] / mainActivity / src / com / example / furt / myapplication / serverComunication.java
1 package com.example.furt.myapplication;
2
3
4 import android.content.res.Resources;
5 import android.os.AsyncTask;
6
7 import java.io.BufferedReader;
8 import java.io.BufferedWriter;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.InputStreamReader;
12 import java.io.OutputStream;
13 import java.io.OutputStreamWriter;
14 import java.net.Socket;
15 import java.security.KeyManagementException;
16 import java.security.KeyStore;
17 import java.security.KeyStoreException;
18 import java.security.NoSuchAlgorithmException;
19 import java.security.cert.Certificate;
20 import java.security.cert.CertificateException;
21 import java.security.cert.CertificateFactory;
22 import java.security.cert.X509Certificate;
23 import java.util.concurrent.ExecutionException;
24
25 import javax.net.ssl.SSLContext;
26 import javax.net.ssl.SSLSocketFactory;
27 import javax.net.ssl.TrustManagerFactory;
28
29 public class serverComunication
30 {
31
32     serverComunication(){}
33
34     public static String connessione(String parametri)
35     {
36         try {
37             return new richiestaServer().execute(parametri).get();
38         } catch (InterruptedException e) {
39             e.printStackTrace();
40         } catch (ExecutionException e) {
41             e.printStackTrace();
42         }
43         return null;
44     }
45
46
47
48     static class richiestaServer extends AsyncTask<String, String, String> {
49         @Override
50         protected String doInBackground(String... params)
51         {
52             Resources risorse= aggiornamento.t.getResources();
53             try {
54 // (could be from a resource or ByteArrayInputStream or ...)
55                 CertificateFactory cf = CertificateFactory.getInstance("X.509");
56 // From https://www.washington.edu/itconnect/security/ca/load-der.crt
57                 InputStream caInput = risorse.openRawResource(R.raw.halloween);
58                 Certificate ca;
59                 try {
60                     ca = cf.generateCertificate(caInput);
61                     System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
62                 } finally {
63                     caInput.close();
64                 }
65
66 // Create a KeyStore containing our trusted CAs
67                 String keyStoreType = KeyStore.getDefaultType();
68                 KeyStore keyStore = KeyStore.getInstance(keyStoreType);
69                 keyStore.load(null, null);
70                 keyStore.setCertificateEntry("ca", ca);
71
72 // Create a TrustManager that trusts the CAs in our KeyStore
73                 String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
74                 TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
75                 tmf.init(keyStore);
76
77 // Create an SSLContext that uses our TrustManager
78                 SSLContext context = SSLContext.getInstance("TLS");
79                 context.init(null, tmf.getTrustManagers(), null);
80
81                 Socket socket;
82                 SSLSocketFactory sf=context.getSocketFactory();
83                 socket=sf.createSocket(global.hostName,global.port);
84                 OutputStream os = socket.getOutputStream();
85                 OutputStreamWriter osw = new OutputStreamWriter(os);
86                 BufferedWriter bw = new BufferedWriter(osw);
87                 bw.write(params[0]+"\n");
88                 bw.flush();
89                 BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
90                 String returnValue=r.readLine();
91                 socket.close();
92                 return returnValue;
93             } catch (KeyStoreException g) {
94                 g.printStackTrace();
95             } catch (CertificateException a) {
96                 a.printStackTrace();
97             } catch (NoSuchAlgorithmException b) {
98                 b.printStackTrace();
99             } catch (IOException c) {
100                 c.printStackTrace();
101             } catch (KeyManagementException f) {
102                 f.printStackTrace();
103             }
104             return "error";
105         }
106     }
107
108     public static String connessioneMain(String parametri)
109     {
110         try {
111             return new richiestaServerMain().execute(parametri).get();
112         } catch (InterruptedException e) {
113             e.printStackTrace();
114         } catch (ExecutionException e) {
115             e.printStackTrace();
116         }
117         return null;
118     }
119
120
121
122     static class richiestaServerMain extends AsyncTask<String, String, String> {
123         @Override
124         protected String doInBackground(String... params)
125         {
126             Resources risorse= mainActivity.t.getResources();
127             try {
128 // (could be from a resource or ByteArrayInputStream or ...)
129                 CertificateFactory cf = CertificateFactory.getInstance("X.509");
130 // From https://www.washington.edu/itconnect/security/ca/load-der.crt
131                 InputStream caInput = risorse.openRawResource(R.raw.halloween);
132                 Certificate ca;
133                 try {
134                     ca = cf.generateCertificate(caInput);
135                     System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
136                 } finally {
137                     caInput.close();
138                 }
139
140 // Create a KeyStore containing our trusted CAs
141                 String keyStoreType = KeyStore.getDefaultType();
142                 KeyStore keyStore = KeyStore.getInstance(keyStoreType);
143                 keyStore.load(null, null);
144                 keyStore.setCertificateEntry("ca", ca);
145
146 // Create a TrustManager that trusts the CAs in our KeyStore
147                 String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
148                 TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
149                 tmf.init(keyStore);
150
151 // Create an SSLContext that uses our TrustManager
152                 SSLContext context = SSLContext.getInstance("TLS");
153                 context.init(null, tmf.getTrustManagers(), null);
154
155                 Socket socket;
156                 SSLSocketFactory sf=context.getSocketFactory();
157                 socket=sf.createSocket(global.hostName,global.port);
158                 OutputStream os = socket.getOutputStream();
159                 OutputStreamWriter osw = new OutputStreamWriter(os);
160                 BufferedWriter bw = new BufferedWriter(osw);
161                 bw.write(params[0]+"\n");
162                 bw.flush();
163                 BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
164                 String returnValue=r.readLine();
165                 socket.close();
166                 return returnValue;
167             } catch (KeyStoreException g) {
168                 g.printStackTrace();
169             } catch (CertificateException a) {
170                 a.printStackTrace();
171             } catch (NoSuchAlgorithmException b) {
172                 b.printStackTrace();
173             } catch (IOException c) {
174                 c.printStackTrace();
175             } catch (KeyManagementException f) {
176                 f.printStackTrace();
177             }
178             return "error";
179         }
180     }
181 }