diff options
| -rw-r--r-- | src/de/blinkt/openvpn/core/OpenVPNThread.java | 43 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/core/OpenVpnService.java | 14 | 
2 files changed, 41 insertions, 16 deletions
| diff --git a/src/de/blinkt/openvpn/core/OpenVPNThread.java b/src/de/blinkt/openvpn/core/OpenVPNThread.java index 9d6d8e77..d8fff1dd 100644 --- a/src/de/blinkt/openvpn/core/OpenVPNThread.java +++ b/src/de/blinkt/openvpn/core/OpenVPNThread.java @@ -10,6 +10,8 @@ import java.text.SimpleDateFormat;  import java.util.Date;
  import java.util.LinkedList;
  import java.util.Locale;
 +import java.util.Map;
 +import java.util.Map.Entry;
  import android.util.Log;
  import de.blinkt.openvpn.R;
 @@ -25,8 +27,9 @@ public class OpenVPNThread implements Runnable {  	private String mNativeDir;
  	private OpenVpnService mService;
  	private String mDumpPath;
 +	private Map<String, String> mProcessEnv;
 -	public OpenVPNThread(OpenVpnService service,String[] argv, String nativelibdir)
 +	public OpenVPNThread(OpenVpnService service,String[] argv, Map<String,String> processEnv, String nativelibdir)
  	{
  		mArgv = argv;
  		mNativeDir = nativelibdir;
 @@ -43,7 +46,7 @@ public class OpenVPNThread implements Runnable {  	public void run() {
  		try {
  			Log.i(TAG, "Starting openvpn");			
 -			startOpenVPNThreadArgs(mArgv);
 +			startOpenVPNThreadArgs(mArgv, mProcessEnv);
  			Log.i(TAG, "Giving up");
  		} catch (Exception e) {
  			e.printStackTrace();
 @@ -81,7 +84,7 @@ public class OpenVPNThread implements Runnable {  		}
  	}
 -	private void startOpenVPNThreadArgs(String[] argv) {
 +	private void startOpenVPNThreadArgs(String[] argv,Map<String, String> env) {
  		LinkedList<String> argvlist = new LinkedList<String>();
  		for(String arg:argv)
 @@ -90,20 +93,14 @@ public class OpenVPNThread implements Runnable {  		ProcessBuilder pb = new ProcessBuilder(argvlist);
  		// Hack O rama
 -		// Hack until I find a good way to get the real library path
 -		String applibpath = argv[0].replace("/cache/" + VpnProfile.MINIVPN , "/lib");
 -		
 -		String lbpath = pb.environment().get("LD_LIBRARY_PATH");
 -		if(lbpath==null) 
 -			lbpath = applibpath;
 -		else
 -			lbpath = lbpath + ":" + applibpath;
 -		
 -		if (!applibpath.equals(mNativeDir)) {
 -			lbpath = lbpath + ":" + mNativeDir;
 -		}
 +		String lbpath = genLibraryPath(argv, pb);
  		pb.environment().put("LD_LIBRARY_PATH", lbpath);
 +
 +		// Add extra variables
 +		for(Entry<String,String> e:env.entrySet()){
 +			pb.environment().put(e.getKey(), e.getValue());
 +		}
  		pb.redirectErrorStream(true);
  		try {
  			mProcess = pb.start();
 @@ -133,4 +130,20 @@ public class OpenVPNThread implements Runnable {  	}
 +
 +	private String genLibraryPath(String[] argv, ProcessBuilder pb) {
 +		// Hack until I find a good way to get the real library path
 +		String applibpath = argv[0].replace("/cache/" + VpnProfile.MINIVPN , "/lib");
 +		
 +		String lbpath = pb.environment().get("LD_LIBRARY_PATH");
 +		if(lbpath==null) 
 +			lbpath = applibpath;
 +		else
 +			lbpath = lbpath + ":" + applibpath;
 +		
 +		if (!applibpath.equals(mNativeDir)) {
 +			lbpath = lbpath + ":" + mNativeDir;
 +		}
 +		return lbpath;
 +	}
  }
 diff --git a/src/de/blinkt/openvpn/core/OpenVpnService.java b/src/de/blinkt/openvpn/core/OpenVpnService.java index d86ae92b..eb6e98d2 100644 --- a/src/de/blinkt/openvpn/core/OpenVpnService.java +++ b/src/de/blinkt/openvpn/core/OpenVpnService.java @@ -3,7 +3,9 @@ package de.blinkt.openvpn.core;  import java.io.IOException;  import java.lang.reflect.InvocationTargetException;  import java.lang.reflect.Method; +import java.util.HashMap;  import java.util.Locale; +import java.util.Map;  import java.util.Vector;  import android.Manifest.permission; @@ -15,6 +17,8 @@ import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter;  import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager.NameNotFoundException;  import android.net.ConnectivityManager;  import android.net.LocalServerSocket;  import android.net.LocalSocket; @@ -323,7 +327,15 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac  		} else { -			processThread = new OpenVPNThread(this, argv,nativelibdir); +			HashMap<String, String> env = new HashMap<String, String>(); +			String version="unknown"; +			try { +				PackageInfo packageinfo = getPackageManager().getPackageInfo(getPackageName(), 0); +				version = packageinfo.versionName; +			} catch (NameNotFoundException e) { +			} +			env.put("UV_ICSOPENVPN_VERSION", version); +			processThread = new OpenVPNThread(this, argv, env, nativelibdir);  		}  		mProcessThread = new Thread(processThread, "OpenVPNProcessThread"); | 
