diff --git a/bin/SSLDroid.apk b/bin/SSLDroid.apk deleted file mode 100644 index f5083fe..0000000 Binary files a/bin/SSLDroid.apk and /dev/null differ diff --git a/bin/classes.dex b/bin/classes.dex deleted file mode 100644 index f341a25..0000000 Binary files a/bin/classes.dex and /dev/null differ diff --git a/bin/resources.ap_ b/bin/resources.ap_ deleted file mode 100644 index 842c630..0000000 Binary files a/bin/resources.ap_ and /dev/null differ diff --git a/src/hu/blint/ssldroid/SSLDroid.java b/src/hu/blint/ssldroid/SSLDroid.java index 420c9d9..42d7f29 100644 --- a/src/hu/blint/ssldroid/SSLDroid.java +++ b/src/hu/blint/ssldroid/SSLDroid.java @@ -11,7 +11,6 @@ import hu.blint.ssldroid.db.SSLDroidDbAdapter; public class SSLDroid extends Service { final String TAG = "SSLDroid"; - public static final String PREFS_NAME = "SSLDroid"; TcpProxy tp[]; private SSLDroidDbAdapter dbHelper; @@ -44,11 +43,15 @@ public class SSLDroid extends Service { String keyPass = cursor.getString(cursor .getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_PKCSPASS)); try { - tp[i] = new TcpProxy(); - tp[i].serve(listenPort, targetHost, targetPort, keyFile, keyPass); + tp[i] = new TcpProxy(listenPort, targetHost, targetPort, keyFile, keyPass); + tp[i].serve(); Log.d(TAG, "Tunnel: "+listenPort+" "+targetHost+" "+targetPort+" "+keyFile); } catch (Exception e) { Log.d(TAG, "Error:" + e.toString()); + new AlertDialog.Builder(SSLDroid.this) + .setTitle("SSLDroid encountered a fatal error: "+e.getMessage()) + .setPositiveButton(android.R.string.ok, null) + .create(); } } diff --git a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java index a78b087..9d933ea 100644 --- a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java +++ b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java @@ -129,7 +129,6 @@ public class SSLDroidTunnelDetails extends Activity { .setItems(namesList, new OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { String name = namesList[arg1]; - pkcsfile.setText(sdcard+"/"+name); } }) @@ -165,7 +164,7 @@ public class SSLDroidTunnelDetails extends Activity { @Override protected void onPause() { super.onPause(); - //saveState(); + saveState(); } @Override diff --git a/src/hu/blint/ssldroid/TcpProxy.java b/src/hu/blint/ssldroid/TcpProxy.java index 1019a65..66baddf 100644 --- a/src/hu/blint/ssldroid/TcpProxy.java +++ b/src/hu/blint/ssldroid/TcpProxy.java @@ -17,19 +17,25 @@ public class TcpProxy { Thread server = null; ServerSocket ss = null; - public TcpProxy() { + public TcpProxy(int listenPort, String targetHost, int targetPort, String keyFile, String keyPass) { + this.listenPort = listenPort; + this.tunnelHost = targetHost; + this.tunnelPort = targetPort; + this.keyFile = keyFile; + this.keyPass = keyPass; } - public void serve(int listenPort, String tunnelHost, int tunnelPort, String keyFile, String keyPass) throws IOException { + public void serve() throws IOException { try { ss = new ServerSocket(listenPort); Log.d("SSLDroid", "Listening for connections on port " - + listenPort + " ..."); + + this.listenPort + " ..."); } catch (Exception e) { Log.d("SSLDroid", "Error setting up listening socket: " + e.toString()); - System.exit(1); + return; } - server = new TcpProxyServerThread(ss, listenPort, tunnelHost, tunnelPort, keyFile, keyPass); + server = new TcpProxyServerThread(this.ss, this.listenPort, this.tunnelHost, + this.tunnelPort, this.keyFile, this.keyPass); server.start(); } @@ -43,7 +49,7 @@ public class TcpProxy { Log.d("SSLDroid", "Interrupt failure: " + e.toString()); } } - Log.d("SSLDroid", "Stopping service"); + Log.d("SSLDroid", "Stopping tunnel "+this.listenPort+":"+this.tunnelHost+":"+this.tunnelPort); } //if the listening socket is still active, we're alive diff --git a/src/hu/blint/ssldroid/TcpProxyServerThread.java b/src/hu/blint/ssldroid/TcpProxyServerThread.java index 2ed50e4..732bb0f 100644 --- a/src/hu/blint/ssldroid/TcpProxyServerThread.java +++ b/src/hu/blint/ssldroid/TcpProxyServerThread.java @@ -112,6 +112,12 @@ public class TcpProxyServerThread extends Thread { if (Thread.interrupted()) { // We've been interrupted: no more relaying Log.d("SSLDroid", "Interrupted thread"); + try { + in.close(); + out.close(); + } catch (IOException e) { + Log.d("SSLDroid", e.toString()); + } return; } out.write(buf, 0, n); @@ -149,9 +155,9 @@ public class TcpProxyServerThread extends Thread { Log.d("SSLDroid", "Interrupted server thread, closing sockets..."); ss.close(); if (fromBrowserToServer != null) - fromBrowserToServer.wait(); + fromBrowserToServer.notify(); if (fromServerToBrowser != null) - fromServerToBrowser.wait(); + fromServerToBrowser.notify(); return; } // accept the connection from my client @@ -165,22 +171,27 @@ public class TcpProxyServerThread extends Thread { Socket st = null; try { - st = (SSLSocket) getSocketFactory(keyFile, keyPass).createSocket(tunnelHost, tunnelPort); + st = (SSLSocket) getSocketFactory(this.keyFile, this.keyPass).createSocket(this.tunnelHost, this.tunnelPort); ((SSLSocket) st).startHandshake(); - } catch (Exception e) { + } catch (IOException e){ + + } + catch (Exception e) { Log.d("SSLDroid", "SSL failure: " + e.toString()); - //Thread.sleep(10000); - //continue; sc.close(); return; } + if (sc == null){ + Log.d("SSLDroid", "Trying socket operation on a null socket, returning"); + return; + } Log.d("SSLDroid", "Tunnelling port " + listenPort + " to port " + tunnelPort + " on host " + tunnelHost + " ..."); - // relay the stuff thru + // relay the stuff through fromBrowserToServer = new Relay( sc.getInputStream(), st.getOutputStream()); fromServerToBrowser = new Relay(