clear dns cache on network switch

This commit is contained in:
Daniel Gultsch 2021-03-23 21:03:58 +01:00
parent 9a7fc3d9b8
commit ff756647a9
2 changed files with 15 additions and 5 deletions

View file

@ -657,6 +657,7 @@ public class XmppConnectionService extends Service {
if (Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) {
resetAllAttemptCounts(true, false);
}
Resolver.clearCache();
}
break;
case Intent.ACTION_SHUTDOWN:

View file

@ -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 {