1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.resolver.dns;
17
18 import io.netty.channel.socket.SocketProtocolFamily;
19
20 import java.net.Inet4Address;
21 import java.net.Inet6Address;
22 import java.net.InetAddress;
23 import java.util.Comparator;
24
25 final class PreferredAddressTypeComparator implements Comparator<InetAddress> {
26
27 private static final PreferredAddressTypeComparator IPv4 = new PreferredAddressTypeComparator(Inet4Address.class);
28 private static final PreferredAddressTypeComparator IPv6 = new PreferredAddressTypeComparator(Inet6Address.class);
29
30 static PreferredAddressTypeComparator comparator(SocketProtocolFamily family) {
31 switch (family) {
32 case INET:
33 return IPv4;
34 case INET6:
35 return IPv6;
36 default:
37 throw new IllegalArgumentException();
38 }
39 }
40
41 private final Class<? extends InetAddress> preferredAddressType;
42
43 private PreferredAddressTypeComparator(Class<? extends InetAddress> preferredAddressType) {
44 this.preferredAddressType = preferredAddressType;
45 }
46
47 @Override
48 public int compare(InetAddress o1, InetAddress o2) {
49 if (o1.getClass() == o2.getClass()) {
50 return 0;
51 }
52 return preferredAddressType.isAssignableFrom(o1.getClass()) ? -1 : 1;
53 }
54 }