That fuck shit the fascists are using
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}