1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.impl.nio;
29
30 import java.net.SocketAddress;
31 import java.util.concurrent.Future;
32
33 import org.apache.hc.client5.http.DnsResolver;
34 import org.apache.hc.core5.annotation.Contract;
35 import org.apache.hc.core5.annotation.ThreadingBehavior;
36 import org.apache.hc.core5.concurrent.FutureCallback;
37 import org.apache.hc.core5.net.NamedEndpoint;
38 import org.apache.hc.core5.reactor.ConnectionInitiator;
39 import org.apache.hc.core5.reactor.IOSession;
40 import org.apache.hc.core5.util.Args;
41 import org.apache.hc.core5.util.Timeout;
42
43
44
45
46
47
48 @Contract(threading = ThreadingBehavior.SAFE_CONDITIONAL)
49 public final class MultihomeConnectionInitiator implements ConnectionInitiator {
50
51 private final ConnectionInitiator connectionInitiator;
52 private final MultihomeIOSessionRequester sessionRequester;
53
54 public MultihomeConnectionInitiator(
55 final ConnectionInitiator connectionInitiator,
56 final DnsResolver dnsResolver) {
57 this.connectionInitiator = Args.notNull(connectionInitiator, "Connection initiator");
58 this.sessionRequester = new MultihomeIOSessionRequester(dnsResolver);
59 }
60
61 @Override
62 public Future<IOSession> connect(
63 final NamedEndpoint remoteEndpoint,
64 final SocketAddress remoteAddress,
65 final SocketAddress localAddress,
66 final Timeout connectTimeout,
67 final Object attachment,
68 final FutureCallback<IOSession> callback) {
69 Args.notNull(remoteEndpoint, "Remote endpoint");
70 return sessionRequester.connect(connectionInitiator, remoteEndpoint, remoteAddress, localAddress, connectTimeout, attachment, callback);
71 }
72
73 public Future<IOSession> connect(
74 final NamedEndpoint remoteEndpoint,
75 final SocketAddress localAddress,
76 final Timeout connectTimeout,
77 final Object attachment,
78 final FutureCallback<IOSession> callback) {
79 Args.notNull(remoteEndpoint, "Remote endpoint");
80 return sessionRequester.connect(connectionInitiator, remoteEndpoint, localAddress, connectTimeout, attachment, callback);
81 }
82
83 }