Added option to enable VPN handover

This commit is contained in:
M66B 2019-07-18 19:59:40 +02:00
parent 6c5e89450a
commit 9a4cff7927
4 changed files with 44 additions and 6 deletions

View File

@ -568,14 +568,41 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
} else {
last_builder = builder;
Log.i(TAG, "VPN restart");
if (vpn != null) {
stopNative(vpn, clear);
stopVPN(vpn);
boolean handover = prefs.getBoolean("handover", false);
Log.i(TAG, "VPN restart handover=" + handover);
if (handover) {
// Attempt seamless handover
ParcelFileDescriptor prev = vpn;
vpn = startVPN(builder);
if (prev != null && vpn == null) {
Log.w(TAG, "Handover failed");
stopNative(prev, clear);
stopVPN(prev);
prev = null;
try {
Thread.sleep(3000);
} catch (InterruptedException ignored) {
}
vpn = startVPN(last_builder);
if (vpn == null)
throw new IllegalStateException("Handover failed");
}
if (prev != null) {
stopNative(prev, clear);
stopVPN(prev);
}
} else {
if (vpn != null) {
stopNative(vpn, clear);
stopVPN(vpn);
}
vpn = startVPN(builder);
}
vpn = startVPN(builder);
}
}

View File

@ -99,6 +99,7 @@
<string name="setting_access">Notify on internet access</string>
<string name="setting_filter">Filter traffic</string>
<string name="setting_filter_udp">Filter UDP traffic</string>
<string name="setting_handover">Seamless VPN handover on reload</string>
<string name="setting_clear_onreload">Close connections on reload</string>
<string name="setting_lockdown">Lockdown traffic</string>
<string name="setting_track_usage">Track network usage</string>

View File

@ -182,6 +182,11 @@
android:dependency="filter"
android:key="filter_udp"
android:title="@string/setting_filter_udp" />
<CheckBoxPreference
android:defaultValue="false"
android:dependency="filter"
android:key="handover"
android:title="@string/setting_handover" />
<CheckBoxPreference
android:defaultValue="false"
android:dependency="filter"

View File

@ -182,6 +182,11 @@
android:dependency="filter"
android:key="filter_udp"
android:title="@string/setting_filter_udp" />
<eu.faircode.netguard.SwitchPreference
android:defaultValue="false"
android:dependency="filter"
android:key="handover"
android:title="@string/setting_handover" />
<eu.faircode.netguard.SwitchPreference
android:defaultValue="false"
android:dependency="filter"