From d5b7df448c0e3896a3c5ac42fbb1ae982d560260 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 15 May 2023 08:46:01 +0200 Subject: [PATCH] Bind to interface --- .../java/eu/faircode/email/ConnectionHelper.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/ConnectionHelper.java b/app/src/main/java/eu/faircode/email/ConnectionHelper.java index e2ca0e8063..bcf104ab68 100644 --- a/app/src/main/java/eu/faircode/email/ConnectionHelper.java +++ b/app/src/main/java/eu/faircode/email/ConnectionHelper.java @@ -23,6 +23,7 @@ import android.accounts.AccountsException; import android.content.Context; import android.content.SharedPreferences; import android.net.ConnectivityManager; +import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; @@ -598,10 +599,24 @@ public class ConnectionHelper { static boolean[] has46(Context context) { boolean has4 = false; boolean has6 = false; + + String ifacename = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + try { + ConnectivityManager cm = Helper.getSystemService(context, ConnectivityManager.class); + Network active = (cm == null ? null : cm.getActiveNetwork()); + LinkProperties props = (active == null ? null : cm.getLinkProperties(active)); + ifacename = (props == null ? null : props.getInterfaceName()); + } catch (Throwable ex) { + Log.e(ex); + } + try { Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces != null && interfaces.hasMoreElements()) { NetworkInterface ni = interfaces.nextElement(); + if (ifacename != null && !ifacename.equals(ni.getName())) + continue; for (InterfaceAddress iaddr : ni.getInterfaceAddresses()) { InetAddress addr = iaddr.getAddress(); boolean local = (addr.isLoopbackAddress() || addr.isLinkLocalAddress());