diff options
Diffstat (limited to 'src/de/blinkt')
-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"); |