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