diff --git a/src/hu/blint/ssldroid/SSLDroid.java b/src/hu/blint/ssldroid/SSLDroid.java index 42d7f29..727c425 100644 --- a/src/hu/blint/ssldroid/SSLDroid.java +++ b/src/hu/blint/ssldroid/SSLDroid.java @@ -56,6 +56,7 @@ public class SSLDroid extends Service { } cursor.deactivate(); + cursor.close(); dbHelper.close(); createNotification(0, true, "SSLDroid is running", "Started and serving "+tunnelcount+" tunnels"); Log.d(TAG, "SSLDroid Service Started"); @@ -73,6 +74,7 @@ public class SSLDroid extends Service { @Override public void onDestroy() { + dbHelper.close(); try { for (TcpProxy proxy : tp) { proxy.stop(); diff --git a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java index 6e3a41f..cabf843 100644 --- a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java +++ b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java @@ -73,7 +73,6 @@ public class SSLDroidTunnelDetails extends Activity { populateFields(); confirmButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { - //TODO: put local port collision check here if (name.getText().length() == 0) { Toast.makeText(getBaseContext(), "Required tunnel name parameter not setup, skipping save", 5).show(); return; @@ -95,7 +94,20 @@ public class SSLDroidTunnelDetails extends Activity { if (cPort < 1025 || cPort > 65535) { Toast.makeText(getBaseContext(), "Local port parameter not in valid range (1025-65535)", 5).show(); return; - } + } + //check if the requested port is colliding with a port already configured for another tunnel + SSLDroidDbAdapter dbHelper = new SSLDroidDbAdapter(getBaseContext()); + dbHelper.open(); + Cursor cursor = dbHelper.fetchAllLocalPorts(); + startManagingCursor(cursor); + while (cursor.moveToNext()){ + String cDbName = cursor.getString(cursor.getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_NAME)); + int cDbPort = cursor.getInt(cursor.getColumnIndexOrThrow(SSLDroidDbAdapter.KEY_LOCALPORT)); + if (cPort == cDbPort){ + Toast.makeText(getBaseContext(), "Local port already configured in tunnel '"+cDbName+"', please change...", 5).show(); + return; + } + } } //remote host validation if (remotehost.getText().length() == 0){ diff --git a/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java b/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java index 1e2d690..70de6d2 100644 --- a/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java +++ b/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java @@ -68,7 +68,7 @@ public class SSLDroidDbAdapter { } /** - * Return a Cursor over the list of all tunnel in the database + * Return a Cursor over the list of all tunnels in the database * * @return Cursor over all notes */ @@ -78,6 +78,16 @@ public class SSLDroidDbAdapter { KEY_PKCSPASS }, null, null, null, null, null); } + /** + * Return a Cursor over the list of all tunnels in the database + * + * @return Cursor over all notes + */ + public Cursor fetchAllLocalPorts() { + return database.query(DATABASE_TABLE, new String[] { KEY_NAME, + KEY_LOCALPORT }, null, null, null, null, null); + } + /** * Return a Cursor positioned at the defined tunnel */