That fuck shit the fascists are using
at master 65 lines 1.8 kB view raw
1package org.tm.archive.net; 2 3import androidx.annotation.NonNull; 4 5import com.annimon.stream.Stream; 6 7import org.signal.core.util.logging.Log; 8import org.xbill.DNS.ARecord; 9import org.xbill.DNS.Lookup; 10import org.xbill.DNS.Record; 11import org.xbill.DNS.Resolver; 12import org.xbill.DNS.SimpleResolver; 13import org.xbill.DNS.Type; 14 15import java.net.InetAddress; 16import java.net.UnknownHostException; 17import java.util.List; 18 19import okhttp3.Dns; 20 21/** 22 * A {@link Dns} implementation that specifies the hostname of a specific DNS. 23 */ 24public class CustomDns implements Dns { 25 26 private static final String TAG = Log.tag(CustomDns.class); 27 28 private final String dnsHostname; 29 30 public CustomDns(@NonNull String dnsHostname) { 31 this.dnsHostname = dnsHostname; 32 } 33 34 @Override 35 public @NonNull List<InetAddress> lookup(@NonNull String hostname) throws UnknownHostException { 36 Resolver resolver = new SimpleResolver(dnsHostname); 37 Lookup lookup = doLookup(hostname); 38 39 lookup.setResolver(resolver); 40 41 Record[] records = lookup.run(); 42 43 if (records != null) { 44 List<InetAddress> ipv4Addresses = Stream.of(records) 45 .filter(r -> r.getType() == Type.A) 46 .map(r -> (ARecord) r) 47 .map(ARecord::getAddress) 48 .toList(); 49 if (ipv4Addresses.size() > 0) { 50 return ipv4Addresses; 51 } 52 } 53 54 throw new UnknownHostException(hostname); 55 } 56 57 private static @NonNull Lookup doLookup(@NonNull String hostname) throws UnknownHostException { 58 try { 59 return new Lookup(hostname); 60 } catch (Throwable e) { 61 Log.w(TAG, e); 62 throw new UnknownHostException(); 63 } 64 } 65}