From 6ad580827e85380fb1d905d454967bb51c33b3ee Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 10 Feb 2024 07:52:53 +0100 Subject: [PATCH] Try secondary ip4 addresses first when ip4 preferred --- .../main/java/eu/faircode/email/EmailService.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index 854478a0d3..dc9a851676 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -67,6 +67,7 @@ import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; @@ -617,6 +618,8 @@ public class EmailService implements AutoCloseable { crumb.put("port", Integer.toString(port)); crumb.put("auth", Integer.toString(auth)); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + InetAddress main = null; boolean require_id = (purpose == PURPOSE_CHECK && auth == AUTH_TYPE_OAUTH && @@ -627,8 +630,6 @@ public class EmailService implements AutoCloseable { // throw new MailConnectException( // new SocketConnectException("Debug", new IOException("Test"), host, port, 0)); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String key = "dns." + host; try { main = DnsHelper.getByName(context, host, dnssec); @@ -748,6 +749,15 @@ public class EmailService implements AutoCloseable { " ip4=" + ip4 + " max4=" + MAX_IPV4 + " has4=" + has46[0] + " ip6=" + ip6 + " max6=" + MAX_IPV6 + " has6=" + has46[1]); + boolean prefer_ip4 = prefs.getBoolean("prefer_ip4", true); + if (prefer_ip4) + Arrays.sort(iaddrs, new Comparator() { + @Override + public int compare(InetAddress a1, InetAddress a2) { + return -Boolean.compare(a1 instanceof Inet4Address, a2 instanceof Inet4Address); + } + }); + for (InetAddress iaddr : iaddrs) { EntityLog.log(context, EntityLog.Type.Network, "Address resolved=" + iaddr);