--- /dev/null
+package com.example.furt.myapplication;
+
+
+import android.content.res.Resources;
+import android.os.AsyncTask;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.net.Socket;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.concurrent.ExecutionException;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManagerFactory;
+
+public class serverComunication
+{
+
+ serverComunication(){}
+
+ public static String connessione(String parametri)
+ {
+ try {
+ return new richiestaServer().execute(parametri).get();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ static String connessioneMain(String parametri)
+ {
+ try {
+ return new richiestaServerMain().execute(parametri).get();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ static class richiestaServer extends AsyncTask<String, String, String> {
+ @Override
+ protected String doInBackground(String... params)
+ {
+ Resources risorse= aggiornamento.t.getResources();
+ try {
+// (could be from a resource or ByteArrayInputStream or ...)
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+// From https://www.washington.edu/itconnect/security/ca/load-der.crt
+ InputStream caInput = risorse.openRawResource(R.raw.halloween);
+ Certificate ca;
+ try {
+ ca = cf.generateCertificate(caInput);
+ System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
+ } finally {
+ caInput.close();
+ }
+
+// Create a KeyStore containing our trusted CAs
+ String keyStoreType = KeyStore.getDefaultType();
+ KeyStore keyStore = KeyStore.getInstance(keyStoreType);
+ keyStore.load(null, null);
+ keyStore.setCertificateEntry("ca", ca);
+
+// Create a TrustManager that trusts the CAs in our KeyStore
+ String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
+ tmf.init(keyStore);
+
+// Create an SSLContext that uses our TrustManager
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, tmf.getTrustManagers(), null);
+
+ Socket socket;
+ SSLSocketFactory sf=context.getSocketFactory();
+ socket=sf.createSocket(global.hostName,global.port);
+ OutputStream os = socket.getOutputStream();
+ OutputStreamWriter osw = new OutputStreamWriter(os);
+ BufferedWriter bw = new BufferedWriter(osw);
+ bw.write(params[0]+"\n");
+ bw.flush();
+ BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ String returnValue=r.readLine();
+ socket.close();
+ return returnValue;
+ } catch (KeyStoreException g) {
+ g.printStackTrace();
+ } catch (CertificateException a) {
+ a.printStackTrace();
+ } catch (NoSuchAlgorithmException b) {
+ b.printStackTrace();
+ } catch (IOException c) {
+ c.printStackTrace();
+ } catch (KeyManagementException f) {
+ f.printStackTrace();
+ }
+ return "error";
+ }
+ }
+
+ public static class richiestaServerMain extends AsyncTask<String, String, String> {
+ @Override
+ protected String doInBackground(String... params)
+ {
+ Resources risorse= mainActivity.t.getResources();
+ try {
+// (could be from a resource or ByteArrayInputStream or ...)
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+// From https://www.washington.edu/itconnect/security/ca/load-der.crt
+ InputStream caInput = risorse.openRawResource(R.raw.halloween);
+ Certificate ca;
+ try {
+ ca = cf.generateCertificate(caInput);
+ System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
+ } finally {
+ caInput.close();
+ }
+
+// Create a KeyStore containing our trusted CAs
+ String keyStoreType = KeyStore.getDefaultType();
+ KeyStore keyStore = KeyStore.getInstance(keyStoreType);
+ keyStore.load(null, null);
+ keyStore.setCertificateEntry("ca", ca);
+
+// Create a TrustManager that trusts the CAs in our KeyStore
+ String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
+ tmf.init(keyStore);
+
+// Create an SSLContext that uses our TrustManager
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, tmf.getTrustManagers(), null);
+
+ Socket socket;
+ SSLSocketFactory sf=context.getSocketFactory();
+ socket=sf.createSocket(global.hostName,global.port);
+ OutputStream os = socket.getOutputStream();
+ OutputStreamWriter osw = new OutputStreamWriter(os);
+ BufferedWriter bw = new BufferedWriter(osw);
+ bw.write(params[0]+"\n");
+ bw.flush();
+ BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ String returnValue=r.readLine();
+ socket.close();
+ return returnValue;
+ } catch (KeyStoreException g) {
+ g.printStackTrace();
+ } catch (CertificateException a) {
+ a.printStackTrace();
+ } catch (NoSuchAlgorithmException b) {
+ b.printStackTrace();
+ } catch (IOException c) {
+ c.printStackTrace();
+ } catch (KeyManagementException f) {
+ f.printStackTrace();
+ }
+ return "error";
+ }
+ }
+}