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.core5.http2.impl.nio;
29
30 import org.apache.hc.core5.annotation.Contract;
31 import org.apache.hc.core5.annotation.Internal;
32 import org.apache.hc.core5.annotation.ThreadingBehavior;
33 import org.apache.hc.core5.http.HttpHost;
34 import org.apache.hc.core5.http.URIScheme;
35 import org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexerFactory;
36 import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
37 import org.apache.hc.core5.http2.HttpVersionPolicy;
38 import org.apache.hc.core5.reactor.IOEventHandlerFactory;
39 import org.apache.hc.core5.reactor.ProtocolIOSession;
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.IMMUTABLE_CONDITIONAL)
49 @Internal
50 public class ClientHttpProtocolNegotiatorFactory implements IOEventHandlerFactory {
51
52 private final ClientHttp1StreamDuplexerFactory http1StreamHandlerFactory;
53 private final ClientH2StreamMultiplexerFactory http2StreamHandlerFactory;
54 private final HttpVersionPolicy versionPolicy;
55 private final TlsStrategy tlsStrategy;
56 private final Timeout handshakeTimeout;
57
58 public ClientHttpProtocolNegotiatorFactory(
59 final ClientHttp1StreamDuplexerFactory http1StreamHandlerFactory,
60 final ClientH2StreamMultiplexerFactory http2StreamHandlerFactory,
61 final HttpVersionPolicy versionPolicy,
62 final TlsStrategy tlsStrategy,
63 final Timeout handshakeTimeout) {
64 this.http1StreamHandlerFactory = Args.notNull(http1StreamHandlerFactory, "HTTP/1.1 stream handler factory");
65 this.http2StreamHandlerFactory = Args.notNull(http2StreamHandlerFactory, "HTTP/2 stream handler factory");
66 this.versionPolicy = versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE;
67 this.tlsStrategy = tlsStrategy;
68 this.handshakeTimeout = handshakeTimeout;
69 }
70
71 @Override
72 public ClientHttpProtocolNegotiator createHandler(final ProtocolIOSession ioSession, final Object attachment) {
73 if (tlsStrategy != null && ioSession.getInitialEndpoint() instanceof HttpHost) {
74 final HttpHost../../../../../../../org/apache/hc/core5/http/HttpHost.html#HttpHost">HttpHost host = (HttpHost) ioSession.getInitialEndpoint();
75 if (URIScheme.HTTPS.same(host.getSchemeName())) {
76 tlsStrategy.upgrade(
77 ioSession,
78 host,
79 ioSession.getLocalAddress(),
80 ioSession.getRemoteAddress(),
81 attachment,
82 handshakeTimeout);
83 }
84 }
85 return new ClientHttpProtocolNegotiator(
86 ioSession,
87 http1StreamHandlerFactory,
88 http2StreamHandlerFactory,
89 attachment instanceof HttpVersionPolicy./../../../../../org/apache/hc/core5/http2/HttpVersionPolicy.html#HttpVersionPolicy">HttpVersionPolicy ? (HttpVersionPolicy) attachment : versionPolicy);
90 }
91
92 }