diff options
author | cyberta <cyberta@riseup.net> | 2020-01-21 16:10:59 -0600 |
---|---|---|
committer | cyberta <cyberta@riseup.net> | 2020-01-21 16:10:59 -0600 |
commit | 6a015d337d6a786adb319c3f9de7b9b7e9ae80bb (patch) | |
tree | ae19d8d28d15d3b871d82e804994d810f79ad811 /app/src/main/java/se/leap/bitmaskclient/DnsResolver.java | |
parent | 14b84f691e369e2a4ef3fe8687688f5ba98fa719 (diff) |
implement no-dns fallback using okhttp's Dns interface
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/DnsResolver.java')
-rw-r--r-- | app/src/main/java/se/leap/bitmaskclient/DnsResolver.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/DnsResolver.java b/app/src/main/java/se/leap/bitmaskclient/DnsResolver.java new file mode 100644 index 00000000..55cf1123 --- /dev/null +++ b/app/src/main/java/se/leap/bitmaskclient/DnsResolver.java @@ -0,0 +1,33 @@ +package se.leap.bitmaskclient; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + +import okhttp3.Dns; + +class DnsResolver implements Dns { + + @Override + public List<InetAddress> lookup(String hostname) throws UnknownHostException { + try { + return Dns.SYSTEM.lookup(hostname); + } catch (UnknownHostException e) { + ProviderObservable observable = ProviderObservable.getInstance(); + Provider currentProvider; + if (observable.getProviderToSetup() != null) { + currentProvider = observable.getProviderToSetup(); + } else { + currentProvider = observable.getCurrentProvider(); + } + if (currentProvider != null && currentProvider.hasProviderIp()) { + ArrayList<InetAddress> addresses = new ArrayList<>(); + addresses.add(InetAddress.getByAddress(hostname, currentProvider.getProviderIpAsBytes())); + return addresses; + } else { + throw new UnknownHostException("Hostname " + hostname + " not found"); + } + } + } +} |