summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2018-01-13 13:37:46 +0100
committerArne Schwabe <arne@rfc2549.org>2018-01-13 13:37:46 +0100
commit822fb455994fabff53db1108f3f5ff8ee1b7de02 (patch)
tree888b3edf3c8f903883ffd03dc168617d05858cec
parent31d1b7966206eae13075785216ff0ed58dc94fb6 (diff)
More fixes for OpenVPN3 (end service on disconnect)
-rw-r--r--main/src/main/java/de/blinkt/openvpn/VpnProfile.java77
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java18
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java5
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java2
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java1
-rw-r--r--main/src/main/java/de/blinkt/openvpn/fragments/ShowConfigFragment.java2
-rwxr-xr-xmain/src/main/res/values-de/strings.xml2
-rw-r--r--main/src/main/res/xml/general_settings.xml3
-rw-r--r--main/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java4
9 files changed, 60 insertions, 54 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java
index 7af7b519..622cfbe2 100644
--- a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java
+++ b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java
@@ -19,6 +19,7 @@ import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Base64;
+import de.blinkt.openvpn.core.*;
import org.spongycastle.util.io.pem.PemObject;
import org.spongycastle.util.io.pem.PemWriter;
@@ -48,14 +49,6 @@ import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
-import de.blinkt.openvpn.core.Connection;
-import de.blinkt.openvpn.core.NativeUtils;
-import de.blinkt.openvpn.core.OpenVPNService;
-import de.blinkt.openvpn.core.PasswordCache;
-import de.blinkt.openvpn.core.VPNLaunchHelper;
-import de.blinkt.openvpn.core.VpnStatus;
-import de.blinkt.openvpn.core.X509Utils;
-
public class VpnProfile implements Serializable, Cloneable {
// Note that this class cannot be moved to core where it belongs since
// the profile loading depends on it being here
@@ -180,7 +173,6 @@ public class VpnProfile implements Serializable, Cloneable {
public boolean mUseUdp = true;
-
public VpnProfile(String name) {
mUuid = UUID.randomUUID();
mName = name;
@@ -280,30 +272,42 @@ public class VpnProfile implements Serializable, Cloneable {
}
+
+ public static boolean doUseOpenVPN3(Context c) {
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(c);
+ boolean useOpenVPN3 = prefs.getBoolean("ovpn3", false);
+ if (!"ovpn3".equals(BuildConfig.FLAVOR))
+ useOpenVPN3 = false;
+ return useOpenVPN3;
+ }
+
public String getConfigFile(Context context, boolean configForOvpn3) {
File cacheDir = context.getCacheDir();
String cfg = "";
- // Enable management interface
- cfg += "# Enables connection to GUI\n";
- cfg += "management ";
-
- cfg += cacheDir.getAbsolutePath() + "/" + "mgmtsocket";
- cfg += " unix\n";
- cfg += "management-client\n";
- // Not needed, see updated man page in 2.3
- //cfg += "management-signal\n";
- cfg += "management-query-passwords\n";
- cfg += "management-hold\n\n";
-
if (!configForOvpn3) {
+ // Enable management interface
+ cfg += "# Config for OpenVPN 2.x\n";
+ cfg += "# Enables connection to GUI\n";
+ cfg += "management ";
+
+ cfg += cacheDir.getAbsolutePath() + "/" + "mgmtsocket";
+ cfg += " unix\n";
+ cfg += "management-client\n";
+ // Not needed, see updated man page in 2.3
+ //cfg += "management-signal\n";
+ cfg += "management-query-passwords\n";
+ cfg += "management-hold\n\n";
+
cfg += String.format("setenv IV_GUI_VER %s \n", openVpnEscape(getVersionEnvString(context)));
- String versionString = String.format(Locale.US, "%d %s %s %s %s %s", Build.VERSION.SDK_INT, Build.VERSION.RELEASE,
- NativeUtils.getNativeAPI(), Build.BRAND, Build.BOARD, Build.MODEL);
+ String versionString = getPlatformVersionEnvString();
cfg += String.format("setenv IV_PLAT_VER %s\n", openVpnEscape(versionString));
+ } else {
+ cfg += "# Config for OpeNVPN 3 C++\n";
}
+
cfg += "machine-readable-output\n";
cfg += "allow-recursive-routing\n";
@@ -416,8 +420,7 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += insertFileData("ca", mCaFilename);
}
- if (isUserPWAuth())
- {
+ if (isUserPWAuth()) {
if (mAuthenticationType == AUTH_RETRY_NOINTERACT)
cfg += "auth-retry nointeract";
}
@@ -454,7 +457,7 @@ public class VpnProfile implements Serializable, Cloneable {
if (!TextUtils.isEmpty(mIPv6Address)) {
// Use our own ip as gateway since we ignore it anyway
String fakegw = mIPv6Address.split("/", 2)[0];
- cfg += "ifconfig-ipv6 " + mIPv6Address + " " + fakegw +"\n";
+ cfg += "ifconfig-ipv6 " + mIPv6Address + " " + fakegw + "\n";
}
}
@@ -492,12 +495,14 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += "dhcp-option DNS6 " + mDNS1 + "\n";
else
cfg += "dhcp-option DNS " + mDNS1 + "\n";
- } if (!TextUtils.isEmpty(mDNS2)) {
+ }
+ if (!TextUtils.isEmpty(mDNS2)) {
if (mDNS2.contains(":"))
cfg += "dhcp-option DNS6 " + mDNS2 + "\n";
else
cfg += "dhcp-option DNS " + mDNS2 + "\n";
- } if (!TextUtils.isEmpty(mSearchDomain))
+ }
+ if (!TextUtils.isEmpty(mSearchDomain))
cfg += "dhcp-option DOMAIN " + mSearchDomain + "\n";
}
@@ -509,9 +514,8 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += "mssfix\n";
}
- if (mTunMtu >= 48 && mTunMtu != 1500)
- {
- cfg+= String.format(Locale.US, "tun-mtu %d\n", mTunMtu);
+ if (mTunMtu >= 48 && mTunMtu != 1500) {
+ cfg += String.format(Locale.US, "tun-mtu %d\n", mTunMtu);
}
if (mNobind)
@@ -578,7 +582,7 @@ public class VpnProfile implements Serializable, Cloneable {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean usesystemproxy = prefs.getBoolean("usesystemproxy", true);
- if (usesystemproxy && !mIsOpenVPN22) {
+ if (usesystemproxy && !mIsOpenVPN22 && !configForOvpn3) {
cfg += "# Use system proxy setting\n";
cfg += "management-query-proxy\n";
}
@@ -607,6 +611,11 @@ public class VpnProfile implements Serializable, Cloneable {
return cfg;
}
+ public String getPlatformVersionEnvString() {
+ return String.format(Locale.US, "%d %s %s %s %s %s", Build.VERSION.SDK_INT, Build.VERSION.RELEASE,
+ NativeUtils.getNativeAPI(), Build.BRAND, Build.BOARD, Build.MODEL);
+ }
+
public String getVersionEnvString(Context c) {
String version = "unknown";
try {
@@ -905,12 +914,12 @@ public class VpnProfile implements Serializable, Cloneable {
if (mAuthenticationType == TYPE_KEYSTORE || mAuthenticationType == TYPE_USERPASS_KEYSTORE) {
if (mAlias == null)
return R.string.no_keystore_cert_selected;
- } else if (mAuthenticationType == TYPE_CERTIFICATES || mAuthenticationType == TYPE_USERPASS_CERTIFICATES){
+ } else if (mAuthenticationType == TYPE_CERTIFICATES || mAuthenticationType == TYPE_USERPASS_CERTIFICATES) {
if (TextUtils.isEmpty(mCaFilename))
return R.string.no_ca_cert_selected;
}
- if (mCheckRemoteCN && mX509AuthType==X509_VERIFY_TLSREMOTE)
+ if (mCheckRemoteCN && mX509AuthType == X509_VERIFY_TLSREMOTE)
return R.string.deprecated_tls_remote;
if (!mUsePull || mAuthenticationType == TYPE_STATICKEYS) {
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
index 42199a8a..894021a3 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -87,7 +87,6 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
private boolean mDisplayBytecount = false;
private boolean mStarting = false;
private long mConnecttime;
- private boolean mOvpn3 = false;
private OpenVPNManagement mManagement;
private String mLastTunCfg;
private String mRemoteGW;
@@ -175,7 +174,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
// Similar to revoke but do not try to stop process
- public void processDied() {
+ public void openvpnStopped() {
endVpnService();
}
@@ -556,14 +555,10 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
mStarting = false;
// Start a new session by creating a new thread.
- SharedPreferences prefs = Preferences.getDefaultSharedPreferences(this);
-
- mOvpn3 = prefs.getBoolean("ovpn3", false);
- if (!"ovpn3".equals(BuildConfig.FLAVOR))
- mOvpn3 = false;
+ boolean useOpenVPN3 = VpnProfile.doUseOpenVPN3(this);
// Open the Management Interface
- if (!mOvpn3) {
+ if (!useOpenVPN3) {
// start a Thread that handles incoming messages of the managment socket
OpenVpnManagementThread ovpnManagementThread = new OpenVpnManagementThread(mProfile, this);
if (ovpnManagementThread.openManagementInterface(this)) {
@@ -579,15 +574,11 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
Runnable processThread;
- if (mOvpn3)
-
+ if (useOpenVPN3)
{
-
OpenVPNManagement mOpenVPN3 = instantiateOpenVPN3Core();
processThread = (Runnable) mOpenVPN3;
mManagement = mOpenVPN3;
-
-
} else {
processThread = new OpenVPNThread(this, argv, nativeLibraryDirectory);
mOpenVPNThread = processThread;
@@ -613,6 +604,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
);
}
+
private void stopOldOpenVPNProcess() {
if (mManagement != null) {
if (mOpenVPNThread != null)
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java
index 2d873875..9579babb 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java
@@ -111,7 +111,8 @@ public class OpenVPNThread implements Runnable {
}
}
- mService.processDied();
+ if (mNoProcessExitStatus)
+ mService.openvpnStopped();
Log.i(TAG, "Exiting");
}
}
@@ -177,7 +178,7 @@ public class OpenVPNThread implements Runnable {
VpnStatus.logMessageOpenVPN(logStatus, logLevel, msg);
if (logerror==1)
- VpnStatus.logError("OpenSSL reported a certificate with a weak hash, please the in app FAQ about weak hashes");
+ VpnStatus.logError("OpenSSL reported a certificate with a weak hash, please the in app FAQ about weak hashes");
} else {
VpnStatus.logInfo("P:" + logline);
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
index 58f1458b..d891148c 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
@@ -606,7 +606,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
if (mWaitingForRelease)
releaseHold();
else if (samenetwork)
- managmentCommand("network-change\n");
+ managmentCommand("network-change samenetwork\n");
else
managmentCommand("network-change\n");
}
diff --git a/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java b/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java
index 0759ce65..bc32616e 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java
@@ -6,7 +6,6 @@
package de.blinkt.openvpn.core;
import android.annotation.TargetApi;
-import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/ShowConfigFragment.java b/main/src/main/java/de/blinkt/openvpn/fragments/ShowConfigFragment.java
index c3a3196d..f759f0ed 100644
--- a/main/src/main/java/de/blinkt/openvpn/fragments/ShowConfigFragment.java
+++ b/main/src/main/java/de/blinkt/openvpn/fragments/ShowConfigFragment.java
@@ -51,7 +51,7 @@ public class ShowConfigFragment extends Fragment {
new Thread() {
public void run() {
/* Add a few newlines to make the textview scrollable past the FAB */
- configtext = vp.getConfigFile(getActivity(),false) + "\n\n\n";
+ configtext = vp.getConfigFile(getActivity(), VpnProfile.doUseOpenVPN3(getActivity())) + "\n\n\n";
getActivity().runOnUiThread(new Runnable() {
@Override
diff --git a/main/src/main/res/values-de/strings.xml b/main/src/main/res/values-de/strings.xml
index 5b7e0bec..66537847 100755
--- a/main/src/main/res/values-de/strings.xml
+++ b/main/src/main/res/values-de/strings.xml
@@ -244,7 +244,7 @@
<string name="state_assign_ip">Weise IP-Adressen zu</string>
<string name="state_add_routes">Lege Routen an</string>
<string name="state_connected">Verbunden</string>
- <string name="state_disconnected">Trennen</string>
+ <string name="state_disconnected">Getrennt</string>
<string name="state_reconnecting">Wiederverbinden</string>
<string name="state_exiting">Beende</string>
<string name="state_noprocess">OpenVPN läuft nicht</string>
diff --git a/main/src/main/res/xml/general_settings.xml b/main/src/main/res/xml/general_settings.xml
index 624e5fac..928fa583 100644
--- a/main/src/main/res/xml/general_settings.xml
+++ b/main/src/main/res/xml/general_settings.xml
@@ -17,6 +17,7 @@
<CheckBoxPreference
android:defaultValue="false"
android:key="ovpn3"
+ android:disableDependentsState="true"
android:summaryOn="Use the C++ OpenVPN library (experimental)"
android:summaryOff="Use OpenVPN 2.x"
android:title="OpenVPN 3 Core"/>
@@ -44,6 +45,7 @@
<CheckBoxPreference
android:defaultValue="true"
android:key="usesystemproxy"
+ android:dependency="ovpn3"
android:summary="@string/use_system_proxy_summary"
android:title="@string/use_system_proxy"/>
<CheckBoxPreference
@@ -60,6 +62,7 @@
android:title="@string/screenoff_title"/>
<Preference
+ android:dependency=""
android:key="osslspeed"
android:persistent="false"
android:title="@string/osslspeedtest" />
diff --git a/main/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java b/main/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
index 3e52eaec..b96b0cde 100644
--- a/main/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
+++ b/main/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
@@ -179,6 +179,7 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
config.setContent(vpnconfig);
config.setTunPersist(mVp.mPersistTun);
config.setGuiVersion(mVp.getVersionEnvString(mService));
+ config.setPlatformVersion(mVp.getPlatformVersionEnvString());
config.setExternalPkiAlias("extpki");
ClientAPI_EvalConfig ec = eval_config(config);
@@ -250,7 +251,7 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
@Override
public void networkChange(boolean sameNetwork) {
-
+ reconnect(1);
}
@Override
@@ -289,6 +290,7 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
@Override
public void stop() {
super.stop();
+ mService.openvpnStopped();
}
@Override