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.URIScheme;
34 import org.apache.hc.core5.http.impl.nio.ServerHttp1StreamDuplexerFactory;
35 import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
36 import org.apache.hc.core5.http2.HttpVersionPolicy;
37 import org.apache.hc.core5.reactor.EndpointParameters;
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.Asserts;
42 import org.apache.hc.core5.util.Timeout;
43
44
45
46
47
48
49
50
51 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
52 @Internal
53 @Deprecated
54 public class ServerHttpProtocolNegotiatorFactory implements IOEventHandlerFactory {
55
56 private final ServerHttp1StreamDuplexerFactory http1StreamDuplexerFactory;
57 private final ServerH2StreamMultiplexerFactory http2StreamMultiplexerFactory;
58 private final HttpVersionPolicy versionPolicy;
59 private final TlsStrategy tlsStrategy;
60 private final Timeout handshakeTimeout;
61
62 public ServerHttpProtocolNegotiatorFactory(
63 final ServerHttp1StreamDuplexerFactory http1StreamDuplexerFactory,
64 final ServerH2StreamMultiplexerFactory http2StreamMultiplexerFactory,
65 final HttpVersionPolicy versionPolicy,
66 final TlsStrategy tlsStrategy,
67 final Timeout handshakeTimeout) {
68 this.http1StreamDuplexerFactory = Args.notNull(http1StreamDuplexerFactory, "HTTP/1.1 stream handler factory");
69 this.http2StreamMultiplexerFactory = Args.notNull(http2StreamMultiplexerFactory, "HTTP/2 stream handler factory");
70 this.versionPolicy = versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE;
71 this.tlsStrategy = tlsStrategy;
72 this.handshakeTimeout = handshakeTimeout;
73 }
74
75 @Override
76 public ServerHttpProtocolNegotiator createHandler(final ProtocolIOSession ioSession, final Object attachment) {
77 HttpVersionPolicy endpointPolicy = versionPolicy;
78 if (attachment instanceof EndpointParameters) {
79 final EndpointParameters params = (EndpointParameters) attachment;
80 if (URIScheme.HTTPS.same(params.getScheme())) {
81 Asserts.notNull(tlsStrategy, "TLS strategy");
82 tlsStrategy.upgrade(
83 ioSession,
84 null,
85 ioSession.getLocalAddress(),
86 ioSession.getRemoteAddress(),
87 params.getAttachment(),
88 handshakeTimeout);
89 }
90 if (params.getAttachment() instanceof HttpVersionPolicy) {
91 endpointPolicy = (HttpVersionPolicy) params.getAttachment();
92 }
93 }
94 return new ServerHttpProtocolNegotiator(
95 ioSession,
96 http1StreamDuplexerFactory,
97 http2StreamMultiplexerFactory,
98 endpointPolicy);
99 }
100
101 }