clear dns cache on network switch

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  1 
src/main/java/eu/siacs/conversations/utils/Resolver.java                 | 19 
2 files changed, 15 insertions(+), 5 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/utils/Resolver.java 🔗

@@ -16,10 +16,12 @@ import java.util.Collections;
 import java.util.List;
 
 import de.measite.minidns.AbstractDNSClient;
+import de.measite.minidns.DNSCache;
 import de.measite.minidns.DNSClient;
 import de.measite.minidns.DNSName;
 import de.measite.minidns.Question;
 import de.measite.minidns.Record;
+import de.measite.minidns.cache.LRUCache;
 import de.measite.minidns.dnssec.DNSSECResultNotAuthenticException;
 import de.measite.minidns.dnsserverlookup.AndroidUsingExec;
 import de.measite.minidns.hla.DnssecResolverApi;
@@ -68,9 +70,7 @@ public class Resolver {
             final Field useHardcodedDnsServers = DNSClient.class.getDeclaredField("useHardcodedDnsServers");
             useHardcodedDnsServers.setAccessible(true);
             useHardcodedDnsServers.setBoolean(dnsClient, false);
-        } catch (NoSuchFieldException e) {
-            Log.e(Config.LOGTAG, "Unable to disable hardcoded DNS servers", e);
-        } catch (IllegalAccessException e) {
+        } catch (NoSuchFieldException | IllegalAccessException e) {
             Log.e(Config.LOGTAG, "Unable to disable hardcoded DNS servers", e);
         }
     }
@@ -93,6 +93,15 @@ public class Resolver {
         }
     }
 
+    public static void clearCache() {
+        final AbstractDNSClient client = ResolverApi.INSTANCE.getClient();
+        final DNSCache dnsCache = client.getCache();
+        if (dnsCache instanceof LRUCache) {
+            Log.d(Config.LOGTAG,"clearing DNS cache");
+            ((LRUCache) dnsCache).clear();
+        }
+    }
+
 
     public static boolean useDirectTls(final int port) {
         return port == 443 || port == 5223;
@@ -105,7 +114,7 @@ public class Resolver {
         }
         final List<Result> results = new ArrayList<>();
         final List<Result> fallbackResults = new ArrayList<>();
-        Thread[] threads = new Thread[3];
+        final Thread[] threads = new Thread[3];
         threads[0] = new Thread(() -> {
             try {
                 final List<Result> list = resolveSrv(domain, true);
@@ -132,7 +141,7 @@ public class Resolver {
                 fallbackResults.addAll(list);
             }
         });
-        for (Thread thread : threads) {
+        for (final Thread thread : threads) {
             thread.start();
         }
         try {