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.http.impl.nio;
29
30 import org.apache.hc.core5.annotation.Contract;
31 import org.apache.hc.core5.annotation.ThreadingBehavior;
32 import org.apache.hc.core5.http.URIScheme;
33 import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
34 import org.apache.hc.core5.reactor.IOEventHandler;
35 import org.apache.hc.core5.reactor.IOEventHandlerFactory;
36 import org.apache.hc.core5.reactor.ProtocolIOSession;
37 import org.apache.hc.core5.util.Args;
38 import org.apache.hc.core5.util.Timeout;
39
40
41
42
43
44
45 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
46 public class ServerHttp1IOEventHandlerFactory implements IOEventHandlerFactory {
47
48 private final ServerHttp1StreamDuplexerFactory streamDuplexerFactory;
49 private final TlsStrategy tlsStrategy;
50 private final Timeout handshakeTimeout;
51
52 public ServerHttp1IOEventHandlerFactory(
53 final ServerHttp1StreamDuplexerFactory streamDuplexerFactory,
54 final TlsStrategy tlsStrategy,
55 final Timeout handshakeTimeout) {
56 this.streamDuplexerFactory = Args.notNull(streamDuplexerFactory, "Stream duplexer factory");
57 this.tlsStrategy = tlsStrategy;
58 this.handshakeTimeout = handshakeTimeout;
59 }
60
61 @Override
62 public IOEventHandler createHandler(final ProtocolIOSession ioSession, final Object attachment) {
63 final boolean tlsSecured;
64 if (tlsStrategy != null) {
65 tlsSecured = tlsStrategy.upgrade(
66 ioSession,
67 null,
68 ioSession.getLocalAddress(),
69 ioSession.getRemoteAddress(),
70 attachment,
71 handshakeTimeout);
72 } else {
73 tlsSecured = false;
74 }
75 return new ServerHttp1IOEventHandler(streamDuplexerFactory.create(
76 tlsSecured ? URIScheme.HTTPS.id : URIScheme.HTTP.id,
77 ioSession));
78 }
79
80 }