1
0
mirror of https://github.com/moparisthebest/SSLDroid synced 2024-11-30 04:42:17 -05:00

Added log tags and session ID to the stream related error messages

Signed-off-by: Balint Kovacs <blint@blint.hu>
This commit is contained in:
Balint Kovacs 2011-04-26 15:42:11 +02:00
parent a094fa8be1
commit de7a264296
3 changed files with 40 additions and 29 deletions

View File

@ -32,6 +32,8 @@ public class SSLDroid extends Service {
int i; int i;
for (i=0; i<tunnelcount; i++){ for (i=0; i<tunnelcount; i++){
cursor.moveToPosition(i); cursor.moveToPosition(i);
String tunnelName = cursor.getString(cursor
.getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_NAME));
int listenPort = cursor.getInt(cursor int listenPort = cursor.getInt(cursor
.getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_LOCALPORT)); .getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_LOCALPORT));
int targetPort = cursor.getInt(cursor int targetPort = cursor.getInt(cursor
@ -43,9 +45,9 @@ public class SSLDroid extends Service {
String keyPass = cursor.getString(cursor String keyPass = cursor.getString(cursor
.getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_PKCSPASS)); .getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_PKCSPASS));
try { try {
tp[i] = new TcpProxy(listenPort, targetHost, targetPort, keyFile, keyPass); tp[i] = new TcpProxy(tunnelName, listenPort, targetHost, targetPort, keyFile, keyPass);
tp[i].serve(); tp[i].serve();
Log.d(TAG, "Tunnel: "+listenPort+" "+targetHost+" "+targetPort+" "+keyFile); Log.d(TAG, "Tunnel: "+tunnelName+" "+listenPort+" "+targetHost+" "+targetPort+" "+keyFile);
} catch (Exception e) { } catch (Exception e) {
Log.d(TAG, "Error:" + e.toString()); Log.d(TAG, "Error:" + e.toString());
new AlertDialog.Builder(SSLDroid.this) new AlertDialog.Builder(SSLDroid.this)

View File

@ -11,6 +11,7 @@ import android.util.Log;
* xml.apache.org project. * xml.apache.org project.
*/ */
public class TcpProxy { public class TcpProxy {
String tunnelName;
int listenPort; int listenPort;
String tunnelHost; String tunnelHost;
int tunnelPort; int tunnelPort;
@ -18,7 +19,8 @@ public class TcpProxy {
Thread server = null; Thread server = null;
ServerSocket ss = null; ServerSocket ss = null;
public TcpProxy(int listenPort, String targetHost, int targetPort, String keyFile, String keyPass) { public TcpProxy(String tunnelName, int listenPort, String targetHost, int targetPort, String keyFile, String keyPass) {
this.tunnelName = tunnelName;
this.listenPort = listenPort; this.listenPort = listenPort;
this.tunnelHost = targetHost; this.tunnelHost = targetHost;
this.tunnelPort = targetPort; this.tunnelPort = targetPort;
@ -35,7 +37,7 @@ public class TcpProxy {
Log.d("SSLDroid", "Error setting up listening socket: " + e.toString()); Log.d("SSLDroid", "Error setting up listening socket: " + e.toString());
return; return;
} }
server = new TcpProxyServerThread(this.ss, this.listenPort, this.tunnelHost, server = new TcpProxyServerThread(this.ss, this.tunnelName, this.listenPort, this.tunnelHost,
this.tunnelPort, this.keyFile, this.keyPass); this.tunnelPort, this.keyFile, this.keyPass);
server.start(); server.start();
} }

View File

@ -26,14 +26,17 @@ import android.util.Log;
public class TcpProxyServerThread extends Thread { public class TcpProxyServerThread extends Thread {
String tunnelName;
int listenPort; int listenPort;
String tunnelHost; String tunnelHost;
int tunnelPort; int tunnelPort;
String keyFile, keyPass; String keyFile, keyPass;
Relay inRelay, outRelay; Relay inRelay, outRelay;
ServerSocket ss = null; ServerSocket ss = null;
int sessionid = 0;
public TcpProxyServerThread(ServerSocket ss, int listenPort, String tunnelHost, int tunnelPort, String keyFile, String keyPass) { public TcpProxyServerThread(ServerSocket ss,String tunnelName, int listenPort, String tunnelHost, int tunnelPort, String keyFile, String keyPass) {
this.tunnelName = tunnelName;
this.listenPort = listenPort; this.listenPort = listenPort;
this.tunnelHost = tunnelHost; this.tunnelHost = tunnelHost;
this.tunnelPort = tunnelPort; this.tunnelPort = tunnelPort;
@ -61,7 +64,7 @@ public class TcpProxyServerThread extends Thread {
private static SSLSocketFactory sslSocketFactory; private static SSLSocketFactory sslSocketFactory;
public final SSLSocketFactory getSocketFactory(String pkcsFile, public final SSLSocketFactory getSocketFactory(String pkcsFile,
String pwd) { String pwd, int sessionid) {
if (sslSocketFactory == null) { if (sslSocketFactory == null) {
try { try {
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509"); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");
@ -74,20 +77,20 @@ public class TcpProxyServerThread extends Thread {
sslSocketFactory = (SSLSocketFactory) context.getSocketFactory(); sslSocketFactory = (SSLSocketFactory) context.getSocketFactory();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.d("SSLDroid", "Error loading the client certificate file:" Log.d("SSLDroid", tunnelName+"/"+sessionid+": Error loading the client certificate file:"
+ e.toString()); + e.toString());
} catch (KeyManagementException e) { } catch (KeyManagementException e) {
Log.d("SSLDroid", "No SSL algorithm support: " + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": No SSL algorithm support: " + e.toString());
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
Log.d("SSLDroid", "No common SSL algorithm found: " + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": No common SSL algorithm found: " + e.toString());
} catch (KeyStoreException e) { } catch (KeyStoreException e) {
Log.d("SSLDroid", "Error setting up keystore:" + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Error setting up keystore:" + e.toString());
} catch (java.security.cert.CertificateException e) { } catch (java.security.cert.CertificateException e) {
Log.d("SSLDroid", "Error loading the client certificate:" + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Error loading the client certificate:" + e.toString());
} catch (IOException e) { } catch (IOException e) {
Log.d("SSLDroid", "Error loading the client certificate file:" + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Error loading the client certificate file:" + e.toString());
} catch (UnrecoverableKeyException e) { } catch (UnrecoverableKeyException e) {
Log.d("SSLDroid", "Error loading the client certificate:" + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Error loading the client certificate:" + e.toString());
} }
} }
return sslSocketFactory; return sslSocketFactory;
@ -96,12 +99,16 @@ public class TcpProxyServerThread extends Thread {
public class Relay extends Thread { public class Relay extends Thread {
private InputStream in; private InputStream in;
private OutputStream out; private OutputStream out;
private String side;
private int sessionid;
private final static int BUFSIZ = 4096; private final static int BUFSIZ = 4096;
private byte buf[] = new byte[BUFSIZ]; private byte buf[] = new byte[BUFSIZ];
public Relay(InputStream in, OutputStream out) { public Relay(InputStream in, OutputStream out, String side, int sessionid) {
this.in = in; this.in = in;
this.out = out; this.out = out;
this.side = side;
this.sessionid = sessionid;
} }
public void run() { public void run() {
@ -111,12 +118,12 @@ public class TcpProxyServerThread extends Thread {
while ((n = in.read(buf)) > 0) { while ((n = in.read(buf)) > 0) {
if (Thread.interrupted()) { if (Thread.interrupted()) {
// We've been interrupted: no more relaying // We've been interrupted: no more relaying
Log.d("SSLDroid", "Interrupted thread"); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Interrupted "+side+" thread");
try { try {
in.close(); in.close();
out.close(); out.close();
} catch (IOException e) { } catch (IOException e) {
Log.d("SSLDroid", e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": "+e.toString());
} }
return; return;
} }
@ -129,23 +136,22 @@ public class TcpProxyServerThread extends Thread {
} }
} }
} catch (SocketException e) { } catch (SocketException e) {
Log.d("SSLDroid", e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": "+e.toString());
} catch (IOException e) { } catch (IOException e) {
Log.d("SSLDroid", e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": "+e.toString());
} finally { } finally {
try { try {
in.close(); in.close();
out.close(); out.close();
} catch (IOException e) { } catch (IOException e) {
Log.d("SSLDroid", e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": "+e.toString());
} }
} }
Log.d("SSLDroid", "Quitting stream proxy..."); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Quitting "+side+"-side stream proxy...");
} }
} }
public void run() { public void run() {
//TODO: logging session ID
while (true) { while (true) {
try { try {
@ -153,7 +159,7 @@ public class TcpProxyServerThread extends Thread {
Thread fromServerToBrowser = null; Thread fromServerToBrowser = null;
if (isInterrupted()){ if (isInterrupted()){
Log.d("SSLDroid", "Interrupted server thread, closing sockets..."); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Interrupted server thread, closing sockets...");
ss.close(); ss.close();
if (fromBrowserToServer != null) if (fromBrowserToServer != null)
fromBrowserToServer.notify(); fromBrowserToServer.notify();
@ -165,6 +171,7 @@ public class TcpProxyServerThread extends Thread {
Socket sc = null; Socket sc = null;
try { try {
sc = ss.accept(); sc = ss.accept();
sessionid++;
} catch (SocketException e){ } catch (SocketException e){
Log.d("SSLDroid", "Accept failure: " + e.toString()); Log.d("SSLDroid", "Accept failure: " + e.toString());
} }
@ -172,37 +179,37 @@ public class TcpProxyServerThread extends Thread {
Socket st = null; Socket st = null;
try { try {
st = (SSLSocket) getSocketFactory(this.keyFile, this.keyPass).createSocket(this.tunnelHost, this.tunnelPort); st = (SSLSocket) getSocketFactory(this.keyFile, this.keyPass, this.sessionid).createSocket(this.tunnelHost, this.tunnelPort);
((SSLSocket) st).startHandshake(); ((SSLSocket) st).startHandshake();
} catch (IOException e){ } catch (IOException e){
} }
catch (Exception e) { catch (Exception e) {
Log.d("SSLDroid", "SSL failure: " + e.toString()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": SSL failure: " + e.toString());
sc.close(); sc.close();
return; return;
} }
if (sc == null){ if (sc == null){
Log.d("SSLDroid", "Trying socket operation on a null socket, returning"); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Trying socket operation on a null socket, returning");
return; return;
} }
Log.d("SSLDroid", "Tunnelling port " Log.d("SSLDroid", tunnelName+"/"+sessionid+": Tunnelling port "
+ listenPort + " to port " + listenPort + " to port "
+ tunnelPort + " on host " + tunnelPort + " on host "
+ tunnelHost + " ..."); + tunnelHost + " ...");
// relay the stuff through // relay the stuff through
fromBrowserToServer = new Relay( fromBrowserToServer = new Relay(
sc.getInputStream(), st.getOutputStream()); sc.getInputStream(), st.getOutputStream(), "client", sessionid);
fromServerToBrowser = new Relay( fromServerToBrowser = new Relay(
st.getInputStream(), sc.getOutputStream()); st.getInputStream(), sc.getOutputStream(), "server", sessionid);
fromBrowserToServer.start(); fromBrowserToServer.start();
fromServerToBrowser.start(); fromServerToBrowser.start();
} catch (Exception ee) { } catch (Exception ee) {
Log.d("SSLDroid", "Ouch: " + ee.getMessage()); Log.d("SSLDroid", tunnelName+"/"+sessionid+": Ouch: " + ee.getMessage());
} }
} }
} }