diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/de/blinkt/openvpn/ConfigConverter.java | 16 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/OpenVPNThread.java | 14 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/OpenVpnService.java | 97 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/ProfileManager.java | 16 | 
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>(); | 
