From 902a0de9a02f69ce231c2320e7d4c45b4a3ef420 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 15 Feb 2016 20:24:11 +0100 Subject: [PATCH] Try to workaround handover fail https://code.google.com/p/android/issues/detail?id=62410 --- .../eu/faircode/netguard/SinkholeService.java | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/faircode/netguard/SinkholeService.java b/app/src/main/java/eu/faircode/netguard/SinkholeService.java index 0c1ee675..94932e21 100644 --- a/app/src/main/java/eu/faircode/netguard/SinkholeService.java +++ b/app/src/main/java/eu/faircode/netguard/SinkholeService.java @@ -370,22 +370,43 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS List listRule = Rule.getRules(true, SinkholeService.this); List listAllowed = getAllowedRules(listRule); - // Attempt seamless handover - ParcelFileDescriptor prev = vpn; - vpn = startVPN(listAllowed); - if (prev != null && vpn == null) { - Log.w(TAG, "Handover failed"); - stopVPN(prev); - prev = null; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) { + if (vpn != null) { + stopNative(vpn, false); + stopVPN(vpn); + vpn = null; + try { + Thread.sleep(3000); + } catch (InterruptedException ignored) { + } + } vpn = startVPN(listAllowed); - if (vpn == null) - throw new IllegalStateException("Handover failed"); + + } else { + // Attempt seamless handover + ParcelFileDescriptor prev = vpn; + vpn = startVPN(listAllowed); + + if (prev != null && vpn == null) { + Log.w(TAG, "Handover failed"); + stopNative(prev, false); + stopVPN(prev); + prev = null; + try { + Thread.sleep(3000); + } catch (InterruptedException ignored) { + } + vpn = startVPN(listAllowed); + if (vpn == null) + throw new IllegalStateException("Handover failed"); + } + + if (prev != null) { + stopNative(prev, false); + stopVPN(prev); + } } - if (prev != null) { - stopNative(prev, false); - stopVPN(prev); - } if (vpn == null) throw new IllegalStateException("VPN start failed");