1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.resolver;
17
18 import io.netty.util.concurrent.EventExecutor;
19 import io.netty.util.concurrent.Future;
20 import io.netty.util.concurrent.FutureListener;
21 import io.netty.util.concurrent.Promise;
22
23 import java.net.InetAddress;
24 import java.net.InetSocketAddress;
25 import java.util.ArrayList;
26 import java.util.List;
27
28
29
30
31 public class InetSocketAddressResolver extends AbstractAddressResolver<InetSocketAddress> {
32
33 final NameResolver<InetAddress> nameResolver;
34
35
36
37
38
39
40 public InetSocketAddressResolver(EventExecutor executor, NameResolver<InetAddress> nameResolver) {
41 super(executor, InetSocketAddress.class);
42 this.nameResolver = nameResolver;
43 }
44
45 @Override
46 protected boolean doIsResolved(InetSocketAddress address) {
47 return !address.isUnresolved();
48 }
49
50 @Override
51 protected void doResolve(final InetSocketAddress unresolvedAddress, final Promise<InetSocketAddress> promise)
52 throws Exception {
53
54
55 nameResolver.resolve(unresolvedAddress.getHostName())
56 .addListener((FutureListener<InetAddress>) future -> {
57 if (future.isSuccess()) {
58 promise.setSuccess(new InetSocketAddress(future.getNow(), unresolvedAddress.getPort()));
59 } else {
60 promise.setFailure(future.cause());
61 }
62 });
63 }
64
65 @Override
66 protected void doResolveAll(final InetSocketAddress unresolvedAddress,
67 final Promise<List<InetSocketAddress>> promise) throws Exception {
68
69
70 nameResolver.resolveAll(unresolvedAddress.getHostName())
71 .addListener((FutureListener<List<InetAddress>>) future -> {
72 if (future.isSuccess()) {
73 List<InetAddress> inetAddresses = future.getNow();
74 List<InetSocketAddress> socketAddresses =
75 new ArrayList<InetSocketAddress>(inetAddresses.size());
76 for (InetAddress inetAddress : inetAddresses) {
77 socketAddresses.add(new InetSocketAddress(inetAddress, unresolvedAddress.getPort()));
78 }
79 promise.setSuccess(socketAddresses);
80 } else {
81 promise.setFailure(future.cause());
82 }
83 });
84 }
85
86 @Override
87 public void close() {
88 nameResolver.close();
89 }
90 }