From dec454ab82d85f624d97b498b91bb264bbbb9ca5 Mon Sep 17 00:00:00 2001 From: genofire Date: Wed, 19 Feb 2020 20:32:04 +0100 Subject: WIP: happy eyeball with dns caching for 5min (#464) * happy eyeball: fix dnssec for plain ip an srv-cname * reimplement dns resolver cache + add timeout for cache --- .../java/de/pixart/messenger/xmpp/XmppConnection.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/main/java/de/pixart/messenger/xmpp') diff --git a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java index be9fd5a3a..a41924e08 100644 --- a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java +++ b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java @@ -317,11 +317,17 @@ public class XmppConnection implements Runnable { } } else { final String domain = account.getJid().getDomain(); - final Resolver.Result result; + final Resolver.Result storedBackupResult = mXmppConnectionService.databaseBackend.findResolverResult(domain); + Resolver.Result result = null; final boolean hardcoded = extended && !account.getHostname().isEmpty(); if (hardcoded) { result = Resolver.fromHardCoded(account.getHostname(), account.getPort()); - } else { + } else if (storedBackupResult != null && !storedBackupResult.isOutdated()) { + storedBackupResult.connect(); + result = storedBackupResult; + Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": loaded backup resolver result from db: " + storedBackupResult); + } + if (result == null || result.getSocket() == null) { result = Resolver.resolve(domain); } if (result == null) { @@ -348,6 +354,9 @@ public class XmppConnection implements Runnable { localSocket.setSoTimeout(Config.SOCKET_TIMEOUT * 1000); if (startXmpp(localSocket)) { localSocket.setSoTimeout(0); //reset to 0; once the connection is established we don’t want this + if (!hardcoded && !result.equals(storedBackupResult)) { + mXmppConnectionService.databaseBackend.saveResolverResult(domain, result); + } // successfully connected to server that speaks xmpp } else { FileBackend.close(localSocket); @@ -1994,4 +2003,4 @@ public class XmppConnection implements Runnable { return Config.USE_BOOKMARKS2 /* || hasDiscoFeature(account.getJid().asBareJid(), Namespace.BOOKMARKS2_COMPAT)*/; } } -} \ No newline at end of file +} -- cgit v1.2.3