summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2017-04-05 16:17:51 +0200
committerArne Schwabe <arne@rfc2549.org>2017-04-05 16:17:51 +0200
commit2ce45194f863d24c2ce1047e857cca2be73e39fb (patch)
treef11376ab7bbfc95484fa07175390ac9c3b5a18d8 /main
parent63d520ea10fb077fe8f1436cb21f9b59a5d289cf (diff)
make temporary profile persistent too
Diffstat (limited to 'main')
-rw-r--r--main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java2
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java3
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java3
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/ProfileManager.java45
4 files changed, 36 insertions, 17 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java
index 85d0ae2c..6b549ed1 100644
--- a/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java
+++ b/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java
@@ -198,7 +198,7 @@ public class ExternalOpenVPNService extends Service implements StateListener {
throw new RemoteException("The inline file would require user input: " + getString(needpw));
*/
- ProfileManager.setTemporaryProfile(vp);
+ ProfileManager.setTemporaryProfile(ExternalOpenVPNService.this, vp);
startProfile(vp);
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 3237f256..e7b85853 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -652,7 +652,8 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
VpnStatus.logInfo(R.string.last_openvpn_tun_config);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && mProfile.mAllowLocalLAN) {
- allowAllAFFamilies(builder);
+ //allowAllAFFamilies(builder);
+ //Never allow other than IPv4 for PIA
}
if (mLocalIP == null && mLocalIPv6 == null) {
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 22d6a708..3360ddc4 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
@@ -333,6 +333,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
private void handleHold(String argument) {
int waittime = Integer.parseInt(argument.split(":")[1]);
+ waittime=15;
if (shouldBeRunning()) {
if (waittime > 1)
VpnStatus.updateStateString("CONNECTRETRY", String.valueOf(waittime),
@@ -608,7 +609,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
if (mWaitingForRelease)
releaseHold();
else if (samenetwork)
- managmentCommand("network-change samenetwork\n");
+ managmentCommand("network-change\n");
else
managmentCommand("network-change\n");
}
diff --git a/main/src/main/java/de/blinkt/openvpn/core/ProfileManager.java b/main/src/main/java/de/blinkt/openvpn/core/ProfileManager.java
index f6643fbc..f776fc2e 100644
--- a/main/src/main/java/de/blinkt/openvpn/core/ProfileManager.java
+++ b/main/src/main/java/de/blinkt/openvpn/core/ProfileManager.java
@@ -16,7 +16,9 @@ import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Locale;
import java.util.Set;
+import java.util.UUID;
import de.blinkt.openvpn.VpnProfile;
@@ -24,6 +26,7 @@ public class ProfileManager {
private static final String PREFS_NAME = "VPNList";
private static final String LAST_CONNECTED_PROFILE = "lastConnectedProfile";
+ private static final String TEMPORARY_PROFILE_FILENAME = "temporary-vpn-profile";
private static ProfileManager instance;
private static VpnProfile mLastConnectedVpn = null;
@@ -124,29 +127,35 @@ public class ProfileManager {
}
- public static void setTemporaryProfile(VpnProfile tmp) {
+ public static void setTemporaryProfile(Context c, VpnProfile tmp) {
ProfileManager.tmpprofile = tmp;
+ saveProfile(c, tmp, true, true);
}
public static boolean isTempProfile() {
- return mLastConnectedVpn == tmpprofile;
+ return mLastConnectedVpn != null && mLastConnectedVpn == tmpprofile;
}
public void saveProfile(Context context, VpnProfile profile) {
- saveProfile(context, profile, true);
+ saveProfile(context, profile, true, false);
}
- private void saveProfile(Context context, VpnProfile profile, boolean updateVersion) {
+ private static void saveProfile(Context context, VpnProfile profile, boolean updateVersion, boolean isTemporary) {
if (updateVersion)
profile.mVersion += 1;
- ObjectOutputStream vpnfile;
+ ObjectOutputStream vpnFile;
+
+ String filename = profile.getUUID().toString() + ".vp";
+ if (isTemporary)
+ filename = TEMPORARY_PROFILE_FILENAME + ".vp";
+
try {
- vpnfile = new ObjectOutputStream(context.openFileOutput((profile.getUUID().toString() + ".vp"), Activity.MODE_PRIVATE));
+ vpnFile = new ObjectOutputStream(context.openFileOutput(filename, Activity.MODE_PRIVATE));
- vpnfile.writeObject(profile);
- vpnfile.flush();
- vpnfile.close();
+ vpnFile.writeObject(profile);
+ vpnFile.flush();
+ vpnFile.close();
} catch (IOException e) {
VpnStatus.logException("saving VPN profile", e);
throw new RuntimeException(e);
@@ -161,6 +170,8 @@ public class ProfileManager {
if (vlist == null) {
vlist = new HashSet<>();
}
+ // Always try to load the temporary profile
+ vlist.add(TEMPORARY_PROFILE_FILENAME);
for (String vpnentry : vlist) {
try {
@@ -172,10 +183,15 @@ public class ProfileManager {
continue;
vp.upgradeProfile();
- profiles.put(vp.getUUID().toString(), vp);
+ if (vpnentry.equals(TEMPORARY_PROFILE_FILENAME)) {
+ tmpprofile = vp;
+ } else {
+ profiles.put(vp.getUUID().toString(), vp);
+ }
} catch (IOException | ClassNotFoundException e) {
- VpnStatus.logException("Loading VPN List", e);
+ if (!vpnentry.equals(TEMPORARY_PROFILE_FILENAME))
+ VpnStatus.logException("Loading VPN List", e);
}
}
}
@@ -209,11 +225,11 @@ public class ProfileManager {
int ver = profile == null ? -1 : profile.mVersion;
}
- if (tried != 0)
+ if (tried > 5)
{
int ver = profile == null ? -1 : profile.mVersion;
- VpnStatus.logError(String.format("Used x %d tries to get current version (%d/%d) of the profile", tried, ver, version));
+ VpnStatus.logError(String.format(Locale.US, "Used x %d tries to get current version (%d/%d) of the profile", tried, ver, version));
}
return profile;
}
@@ -234,6 +250,7 @@ public class ProfileManager {
public static void updateLRU(Context c, VpnProfile profile) {
profile.mLastUsed = System.currentTimeMillis();
// LRU does not change the profile, no need for the service to refresh
- getInstance(c).saveProfile(c, profile, false);
+ if (profile!=tmpprofile)
+ saveProfile(c, profile, false, false);
}
}