diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 54dabc4..feffde2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -12,6 +12,7 @@
+
diff --git a/default.properties b/default.properties
index 46769a7..e2e8061 100644
--- a/default.properties
+++ b/default.properties
@@ -8,4 +8,4 @@
# project structure.
# Project target.
-target=android-7
+target=android-8
diff --git a/res/menu/main.xml b/res/menu/main.xml
index 198fd78..38841bb 100644
--- a/res/menu/main.xml
+++ b/res/menu/main.xml
@@ -1,8 +1,10 @@
diff --git a/res/raw/tunnels.xsd b/res/raw/tunnels.xsd
deleted file mode 100644
index ae2bd67..0000000
--- a/res/raw/tunnels.xsd
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
- A container to group tunnel settings.
-
-
-
-
-
-
-
- The schema version of the tunnel setting.
- The current version is '1'.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The name of the tunnel.
-
-
-
-
-
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cab3e48..ac7d72f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11,6 +11,7 @@
Tunnel name
Add tunnel
Stop service
+ Stop service until started
Start service
No tunnels configured yet
Delete tunnel
@@ -18,6 +19,8 @@
No SD card present, please insert one to continue
Read logs
Reading log messages...
+ Provisioning
+ Please enter the URL for remote XML configuration
Back
Refresh
diff --git a/src/hu/blint/ssldroid/BootStartupReceiver.java b/src/hu/blint/ssldroid/BootStartupReceiver.java
index 92f12d0..8ce7a05 100644
--- a/src/hu/blint/ssldroid/BootStartupReceiver.java
+++ b/src/hu/blint/ssldroid/BootStartupReceiver.java
@@ -1,16 +1,44 @@
package hu.blint.ssldroid;
+import hu.blint.ssldroid.db.SSLDroidDbAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.database.Cursor;
+import android.util.Log;
public class BootStartupReceiver extends BroadcastReceiver {
+
+ private boolean isStopped(Context context){
+ Boolean stopped = false;
+ SSLDroidDbAdapter dbHelper;
+ dbHelper = new SSLDroidDbAdapter(context);
+ dbHelper.open();
+ Cursor cursor = dbHelper.getStopStatus();
+
+ int tunnelcount = cursor.getCount();
+ Log.d("SSLDroid", "Tunnelcount: "+tunnelcount);
+
+ //don't start if the stop status field is available
+ if (tunnelcount != 0){
+ stopped = true;
+ }
+
+ cursor.close();
+ dbHelper.close();
+
+ return stopped;
+ }
+
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent();
i.setAction("hu.blint.ssldroid.SSLDroid");
- context.startService(i);
+ if (!isStopped(context))
+ context.startService(i);
+ else
+ Log.w("SSLDroid", "Not starting service as directed by explicit stop");
}
}
}
\ No newline at end of file
diff --git a/src/hu/blint/ssldroid/NetworkChangeReceiver.java b/src/hu/blint/ssldroid/NetworkChangeReceiver.java
index 1722000..63c683e 100644
--- a/src/hu/blint/ssldroid/NetworkChangeReceiver.java
+++ b/src/hu/blint/ssldroid/NetworkChangeReceiver.java
@@ -1,14 +1,37 @@
package hu.blint.ssldroid;
+import hu.blint.ssldroid.db.SSLDroidDbAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
public class NetworkChangeReceiver extends BroadcastReceiver {
+ private boolean isStopped(Context context){
+ Boolean stopped = false;
+ SSLDroidDbAdapter dbHelper;
+ dbHelper = new SSLDroidDbAdapter(context);
+ dbHelper.open();
+ Cursor cursor = dbHelper.getStopStatus();
+
+ int tunnelcount = cursor.getCount();
+ Log.d("SSLDroid", "Tunnelcount: "+tunnelcount);
+
+ //don't start if the stop status field is available
+ if (tunnelcount != 0){
+ stopped = true;
+ }
+
+ cursor.close();
+ dbHelper.close();
+
+ return stopped;
+ }
+
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
@@ -24,7 +47,10 @@ public class NetworkChangeReceiver extends BroadcastReceiver {
Intent i = new Intent();
i.setAction("hu.blint.ssldroid.SSLDroid");
context.stopService(i);
- context.startService(i);
+ if (!isStopped(context))
+ context.startService(i);
+ else
+ Log.w("SSLDroid", "Not starting service as directed by explicit stop");
}
}
}
diff --git a/src/hu/blint/ssldroid/SSLDroid.java b/src/hu/blint/ssldroid/SSLDroid.java
index d9d2101..5335e88 100644
--- a/src/hu/blint/ssldroid/SSLDroid.java
+++ b/src/hu/blint/ssldroid/SSLDroid.java
@@ -4,6 +4,7 @@ import hu.blint.ssldroid.TcpProxy;
import android.app.*;
import android.content.Intent;
import android.database.Cursor;
+import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import hu.blint.ssldroid.db.SSLDroidDbAdapter;
@@ -71,7 +72,7 @@ public class SSLDroid extends Service {
@Override
public IBinder onBind(Intent intent) {
- return null;
+ return null;
}
@Override
diff --git a/src/hu/blint/ssldroid/SSLDroidGui.java b/src/hu/blint/ssldroid/SSLDroidGui.java
index 9dc650c..d158aaf 100644
--- a/src/hu/blint/ssldroid/SSLDroidGui.java
+++ b/src/hu/blint/ssldroid/SSLDroidGui.java
@@ -54,8 +54,14 @@ public class SSLDroidGui extends ListActivity {
Log.d("SSLDroid", "Stopping service");
stopService(new Intent(this, SSLDroid.class));
return true;
+ case R.id.stopserviceforgood:
+ Log.d("SSLDroid", "Stopping service until explicitly started");
+ dbHelper.setStopStatus();
+ stopService(new Intent(this, SSLDroid.class));
+ return true;
case R.id.startservice:
Log.d("SSLDroid", "Starting service");
+ dbHelper.delStopStatus();
startService(new Intent(this, SSLDroid.class));
return true;
case R.id.readlogs:
@@ -75,8 +81,14 @@ public class SSLDroidGui extends ListActivity {
Log.d("SSLDroid", "Stopping service");
stopService(new Intent(this, SSLDroid.class));
return true;
+ case R.id.stopserviceforgood:
+ Log.d("SSLDroid", "Stopping service until explicitly started");
+ dbHelper.setStopStatus();
+ stopService(new Intent(this, SSLDroid.class));
+ return true;
case R.id.startservice:
Log.d("SSLDroid", "Starting service");
+ dbHelper.delStopStatus();
startService(new Intent(this, SSLDroid.class));
return true;
case R.id.readlogs:
@@ -124,7 +136,6 @@ public class SSLDroidGui extends ListActivity {
Intent i = new Intent(this, SSLDroidTunnelDetails.class);
i.putExtra(SSLDroidDbAdapter.KEY_ROWID, id);
// Activity returns an result if called with startActivityForResult
-
startActivityForResult(i, ACTIVITY_EDIT);
}
@@ -159,4 +170,12 @@ public class SSLDroidGui extends ListActivity {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, DELETE_ID, 0, R.string.menu_delete);
}
+
+ @Override
+ public void onDestroy (){
+ cursor.close();
+ dbHelper.close();
+ super.onDestroy();
+ }
+
}
diff --git a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java
index fd1ced1..b2ba62f 100644
--- a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java
+++ b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java
@@ -83,12 +83,12 @@ public class SSLDroidTunnelDetails extends Activity {
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (name.getText().length() == 0) {
- Toast.makeText(getBaseContext(), "Required tunnel name parameter not setup, skipping save", Toast.LENGTH_LONG).show();
+ Toast.makeText(getBaseContext(), "Required tunnel name parameter not set up, skipping save", Toast.LENGTH_LONG).show();
return;
}
//local port validation
if (localport.getText().length() == 0) {
- Toast.makeText(getBaseContext(), "Required local port parameter not setup, skipping save", Toast.LENGTH_LONG).show();
+ Toast.makeText(getBaseContext(), "Required local port parameter not set up, skipping save", Toast.LENGTH_LONG).show();
return;
}
else {
@@ -120,7 +120,7 @@ public class SSLDroidTunnelDetails extends Activity {
}
//remote host validation
if (remotehost.getText().length() == 0) {
- Toast.makeText(getBaseContext(), "Required remote host parameter not setup, skipping save", Toast.LENGTH_LONG).show();
+ Toast.makeText(getBaseContext(), "Required remote host parameter not set up, skipping save", Toast.LENGTH_LONG).show();
return;
}
else {
@@ -137,7 +137,7 @@ public class SSLDroidTunnelDetails extends Activity {
}
//remote port validation
if (remoteport.getText().length() == 0) {
- Toast.makeText(getBaseContext(), "Required remote port parameter not setup, skipping save", Toast.LENGTH_LONG).show();
+ Toast.makeText(getBaseContext(), "Required remote port parameter not set up, skipping save", Toast.LENGTH_LONG).show();
return;
}
else {
@@ -155,7 +155,7 @@ public class SSLDroidTunnelDetails extends Activity {
}
}
if (pkcsfile.getText().length() == 0) {
- Toast.makeText(getBaseContext(), "Required PKCS12 file parameter not setup, skipping save", Toast.LENGTH_LONG).show();
+ Toast.makeText(getBaseContext(), "Required PKCS12 file parameter not set up, skipping save", Toast.LENGTH_LONG).show();
return;
}
else {
diff --git a/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java b/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java
index d218fb1..5e8b481 100644
--- a/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java
+++ b/src/hu/blint/ssldroid/db/SSLDroidDbAdapter.java
@@ -16,7 +16,10 @@ public class SSLDroidDbAdapter {
public static final String KEY_REMOTEPORT = "remoteport";
public static final String KEY_PKCSFILE = "pkcsfile";
public static final String KEY_PKCSPASS = "pkcspass";
+ public static final String KEY_STATUS_NAME = "name";
+ public static final String KEY_STATUS_VALUE = "value";
private static final String DATABASE_TABLE = "tunnels";
+ private static final String STATUS_TABLE = "status";
private Context context;
private SQLiteDatabase database;
private SSLDroidDbHelper dbHelper;
@@ -93,6 +96,30 @@ public class SSLDroidDbAdapter {
/**
* Return a Cursor positioned at the defined tunnel
*/
+ public Cursor fetchStatus(String valuename) throws SQLException {
+ return database.query(STATUS_TABLE, new String[] {
+ KEY_STATUS_NAME, KEY_STATUS_VALUE
+ },
+ KEY_STATUS_NAME + "='" + valuename + "'", null, null, null, null);
+ }
+
+ public Cursor getStopStatus() {
+ return fetchStatus("stopped");
+ }
+
+ public boolean setStopStatus() {
+ ContentValues stopStatus = new ContentValues();
+ stopStatus.put(KEY_STATUS_NAME, "stopped");
+ stopStatus.put(KEY_STATUS_VALUE, "yes");
+ if (getStopStatus().getCount() == 0)
+ database.insert(STATUS_TABLE, null, stopStatus);
+ return true;
+ }
+
+ public boolean delStopStatus() {
+ return database.delete(STATUS_TABLE, KEY_STATUS_NAME+"= 'stopped'", null) > 0;
+ }
+
public Cursor fetchTunnel(long rowId) throws SQLException {
Cursor mCursor = database.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID, KEY_NAME, KEY_LOCALPORT, KEY_REMOTEHOST, KEY_REMOTEPORT,
@@ -104,7 +131,7 @@ public class SSLDroidDbAdapter {
}
return mCursor;
}
-
+
private ContentValues createContentValues(String name, int localport, String remotehost, int remoteport,
String pkcsfile, String pkcspass) {
ContentValues values = new ContentValues();
diff --git a/src/hu/blint/ssldroid/db/SSLDroidDbHelper.java b/src/hu/blint/ssldroid/db/SSLDroidDbHelper.java
index 1d14746..80ab47d 100644
--- a/src/hu/blint/ssldroid/db/SSLDroidDbHelper.java
+++ b/src/hu/blint/ssldroid/db/SSLDroidDbHelper.java
@@ -3,16 +3,17 @@ package hu.blint.ssldroid.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
public class SSLDroidDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "applicationdata";
-
- private static final int DATABASE_VERSION = 1;
+ private static final int DATABASE_VERSION = 2;
// Database creation sql statement
- private static final String DATABASE_CREATE = "create table tunnels (_id integer primary key autoincrement, "
+ private static final String DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS tunnels (_id integer primary key autoincrement, "
+ "name text not null, localport integer not null, remotehost text not null, "
+ "remoteport integer not null, pkcsfile text not null, pkcspass text );";
+ private static final String STATUS_CREATE = "CREATE TABLE IF NOT EXISTS status (name text, value text);";
public SSLDroidDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
@@ -22,6 +23,7 @@ public class SSLDroidDbHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
+ database.execSQL(STATUS_CREATE);
}
// Method is called during an update of the database, e.g. if you increase
@@ -29,11 +31,11 @@ public class SSLDroidDbHelper extends SQLiteOpenHelper {
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion,
int newVersion) {
- /* Log.w(SSLDroidDbHelper.class.getName(),
+ Log.w(SSLDroidDbHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
- + newVersion + ", which will destroy all old data");
- database.execSQL("DROP TABLE IF EXISTS todo");
- onCreate(database); */
+ + newVersion + ", which will add a status table");
+ database.execSQL("CREATE TABLE IF NOT EXISTS status (name text, value text);");
+ onCreate(database);
}
}