summaryrefslogtreecommitdiff
path: root/src/de/blinkt/openvpn
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2012-05-20 14:36:00 +0200
committerArne Schwabe <arne@rfc2549.org>2012-05-20 14:36:00 +0200
commit376ecb5c8cb9dceb7cd88ea5527292e81712ec25 (patch)
tree6f00e49697c6553c4f319c0133e0ba2bf9500f6a /src/de/blinkt/openvpn
parent42423ebf890bc51a9d8d24539fb05a200d878885 (diff)
- Fix missing about
- Fix vpn list saving to sharedpreferences (closes issue #27) - Version 0.5.5a
Diffstat (limited to 'src/de/blinkt/openvpn')
-rw-r--r--src/de/blinkt/openvpn/ConfigConverter.java16
-rw-r--r--src/de/blinkt/openvpn/OpenVPNThread.java14
-rw-r--r--src/de/blinkt/openvpn/OpenVpnService.java97
-rw-r--r--src/de/blinkt/openvpn/ProfileManager.java16
4 files changed, 76 insertions, 67 deletions
diff --git a/src/de/blinkt/openvpn/ConfigConverter.java b/src/de/blinkt/openvpn/ConfigConverter.java
index 952ab968..8aebc664 100644
--- a/src/de/blinkt/openvpn/ConfigConverter.java
+++ b/src/de/blinkt/openvpn/ConfigConverter.java
@@ -41,8 +41,11 @@ public class ConfigConverter extends ListActivity {
log("Importing the config had error, cannot save it");
return true;
}
+
Intent result = new Intent();
ProfileManager vpl = ProfileManager.getInstance(this);
+
+ setUniqueProfileName(vpl);
vpl.addProfile(mResult);
vpl.saveProfile(this, mResult);
vpl.saveProfileList(this);
@@ -56,6 +59,19 @@ public class ConfigConverter extends ListActivity {
}
+
+ private void setUniqueProfileName(ProfileManager vpl) {
+ int i=1;
+ String newname = getString(R.string.converted_profile);
+
+ while(vpl.getProfileByName(newname)!=null) {
+ i++;
+ newname = getString(R.string.converted_profile_i,i);
+ }
+
+ mResult.mName=newname;
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
diff --git a/src/de/blinkt/openvpn/OpenVPNThread.java b/src/de/blinkt/openvpn/OpenVPNThread.java
index dcd5f4ec..503f4c4c 100644
--- a/src/de/blinkt/openvpn/OpenVPNThread.java
+++ b/src/de/blinkt/openvpn/OpenVPNThread.java
@@ -29,19 +29,7 @@ public class OpenVPNThread implements Runnable {
@Override
public void run() {
try {
- Log.i(TAG, "Starting openvpn");
-
- // We try to create the tunnel for several times. The better way
- // is to work with ConnectivityManager, such as trying only when
- // the network is avaiable. Here we just use a counter to keep
- // things simple.
- //for (int attempt = 0; attempt < 10; ++attempt) {
- mService.getHandler().sendEmptyMessage(R.string.connecting);
-
- // Log argv
-
- //OpenVPN.logMessage(0, "argv:" , Arrays.toString(mArgv));
-
+ Log.i(TAG, "Starting openvpn");
startOpenVPNThreadArgs(mArgv);
diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java
index e2f7ba12..8aa39d89 100644
--- a/src/de/blinkt/openvpn/OpenVpnService.java
+++ b/src/de/blinkt/openvpn/OpenVpnService.java
@@ -19,19 +19,17 @@ package de.blinkt.openvpn;
import java.io.IOException;
import java.util.Vector;
-
+import android.app.Notification;
+import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.content.Context;
import android.content.Intent;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.net.VpnService;
-import android.os.Handler;
-import android.os.Message;
import android.os.ParcelFileDescriptor;
-import android.widget.Toast;
-public class OpenVpnService extends VpnService implements Handler.Callback {
- Handler mHandler;
+public class OpenVpnService extends VpnService {
private Thread mServiceThread;
private Vector<String> mDnslist=new Vector<String>();
@@ -50,9 +48,10 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
private Thread mSocketManagerThread;
private int mMtu;
private String mLocalIPv6=null;
+ private Notification mNotification=null;
-
-
+ private static final int HELLO_ID = 1;
+
@Override
public void onRevoke() {
OpenVpnManagementThread.stopOpenVPN();
@@ -60,8 +59,36 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
stopSelf();
};
+ private void showNotification() {
+ String ns = Context.NOTIFICATION_SERVICE;
+ NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
+
+
+ int icon = R.drawable.icon;
+ CharSequence tickerText = "Hello";
+ long when = System.currentTimeMillis();
+
+ mNotification = new Notification(icon, tickerText, when);
+
+ Context context = getApplicationContext();
+ CharSequence contentTitle = "My notification";
+ CharSequence contentText = "Hello World!";
+ mNotification.setLatestEventInfo(context, contentTitle, contentText, getLogPendingIntent());
+
+ mNotificationManager.notify(HELLO_ID, mNotification);
+
+ }
+
+ PendingIntent getLogPendingIntent() {
+ // Let the configure Button show the Log
+ Intent intent = new Intent(getBaseContext(),LogWindow.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+ PendingIntent startLW = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
+ intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+ return startLW;
+ }
@@ -97,12 +124,8 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
String profileUUID = intent.getStringExtra(prefix + ".profileUUID");
mProfile = ProfileManager.get(profileUUID);
-
- // The handler is only used to show messages.
- if (mHandler == null) {
- mHandler = new Handler(this);
- }
-
+ //showNotification();
+
// Stop the previous session by interrupting the thread.
if(OpenVpnManagementThread.stopOpenVPN()){
// an old was asked to exit, wait 2s
@@ -132,10 +155,7 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
//checkForRemainingMiniVpns();
}
-
-
// Start a new session by creating a new thread.
-
OpenVPNThread serviceThread = new OpenVPNThread(this, argv,nativelibdir);
mServiceThread = new Thread(serviceThread, "OpenVPNServiceThread");
@@ -164,34 +184,25 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
}
}
- @Override
- public boolean handleMessage(Message message) {
- if (message != null) {
- Toast.makeText(this, message.what, Toast.LENGTH_SHORT).show();
- }
- return true;
- }
-
-
public ParcelFileDescriptor openTun() {
Builder builder = new Builder();
-
+
if(mLocalIP==null && mLocalIPv6==null) {
OpenVPN.logMessage(0, "", getString(R.string.opentun_no_ipaddr));
return null;
}
-
+
if(mLocalIP!=null) {
builder.addAddress(mLocalIP.mIp, mLocalIP.len);
}
-
+
if(mLocalIPv6!=null) {
String[] ipv6parts = mLocalIPv6.split("/");
builder.addAddress(ipv6parts[0],Integer.parseInt(ipv6parts[1]));
}
-
+
for (String dns : mDnslist ) {
builder.addDnsServer(dns);
@@ -216,7 +227,7 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
OpenVPN.logMessage(0, "", getString(R.string.route_rejected) + v6route + " " + ia.getLocalizedMessage());
}
}
-
+
if(mDomain!=null)
builder.addSearchDomain(mDomain);
@@ -245,13 +256,9 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
mRoutesv6.clear();
mLocalIP=null;
mLocalIPv6=null;
-
- // Let the configure Button show the Log
- Intent intent = new Intent(getBaseContext(),LogWindow.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
- PendingIntent startLW = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
- intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
- builder.setConfigureIntent(startLW);
+
+ builder.setConfigureIntent(getLogPendingIntent());
+
try {
ParcelFileDescriptor pfd = builder.establish();
return pfd;
@@ -305,7 +312,7 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
mRoutes.add(route);
}
-
+
public void addRoutev6(String extra) {
mRoutesv6.add(extra);
}
@@ -329,20 +336,8 @@ public class OpenVpnService extends VpnService implements Handler.Callback {
}
}
-
-
-
-
-
-
-
public void setLocalIPv6(String ipv6addr) {
mLocalIPv6 = ipv6addr;
}
-
- public Handler getHandler() {
- return mHandler;
- }
-
}
diff --git a/src/de/blinkt/openvpn/ProfileManager.java b/src/de/blinkt/openvpn/ProfileManager.java
index d34bdbec..eb94505a 100644
--- a/src/de/blinkt/openvpn/ProfileManager.java
+++ b/src/de/blinkt/openvpn/ProfileManager.java
@@ -10,6 +10,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
+import de.blinkt.openvpn.R.string;
+
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
@@ -23,6 +25,7 @@ public class ProfileManager {
private static ProfileManager instance;
private HashMap<String,VpnProfile> profiles=new HashMap<String, VpnProfile>();
+
public static VpnProfile get(String key) {
if(instance==null)
return null;
@@ -65,7 +68,14 @@ public class ProfileManager {
SharedPreferences sharedprefs = context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE);
Editor editor = sharedprefs.edit();
editor.putStringSet("vpnlist", profiles.keySet());
- editor.commit();
+
+ // For reasing I do not understand at all
+ // Android saves my prefs file only one time
+ // if I remove the debug code below :(
+ int counter = sharedprefs.getInt("counter", 0);
+ editor.putInt("counter", counter+1);
+ editor.apply();
+
}
public void addProfile(VpnProfile profile) {
@@ -99,8 +109,8 @@ public class ProfileManager {
private void loadVPNList(Context context) {
profiles = new HashMap<String, VpnProfile>();
- SharedPreferences settings =context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE);
- Set<String> vlist = settings.getStringSet("vpnlist", null);
+ SharedPreferences listpref = context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE);
+ Set<String> vlist = listpref.getStringSet("vpnlist", null);
Exception exp =null;
if(vlist==null){
vlist = new HashSet<String>();