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 java.io.IOException;
31
32 import org.apache.hc.core5.annotation.Contract;
33 import org.apache.hc.core5.annotation.Internal;
34 import org.apache.hc.core5.annotation.ThreadingBehavior;
35 import org.apache.hc.core5.concurrent.FutureCallback;
36 import org.apache.hc.core5.http.URIScheme;
37 import org.apache.hc.core5.http.impl.nio.ServerHttp1IOEventHandler;
38 import org.apache.hc.core5.http.impl.nio.ServerHttp1StreamDuplexerFactory;
39 import org.apache.hc.core5.reactor.ProtocolIOSession;
40 import org.apache.hc.core5.reactor.ProtocolUpgradeHandler;
41 import org.apache.hc.core5.reactor.ssl.TlsDetails;
42 import org.apache.hc.core5.util.Args;
43
44
45
46
47
48
49
50 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
51 @Internal
52 public class ServerHttp1UpgradeHandler implements ProtocolUpgradeHandler {
53
54 private final ServerHttp1StreamDuplexerFactory http1StreamHandlerFactory;
55
56 public ServerHttp1UpgradeHandler(final ServerHttp1StreamDuplexerFactory http1StreamHandlerFactory) {
57 this.http1StreamHandlerFactory = Args.notNull(http1StreamHandlerFactory, "HTTP/1.1 stream handler factory");
58 }
59
60 @Override
61 public void upgrade(final ProtocolIOSession ioSession, final FutureCallback<ProtocolIOSession> callback) {
62 final TlsDetails tlsDetails = ioSession.getTlsDetails();
63 final ServerHttp1IOEventHandler eventHandler = new ServerHttp1IOEventHandler(http1StreamHandlerFactory.create(
64 tlsDetails != null ? URIScheme.HTTPS.id : URIScheme.HTTP.id,
65 ioSession));
66 ioSession.upgrade(eventHandler);
67 ioSession.upgrade(eventHandler);
68 try {
69 eventHandler.connected(ioSession);
70 if (callback != null) {
71 callback.completed(ioSession);
72 }
73 } catch (final IOException ex) {
74 eventHandler.exception(ioSession, ex);
75 }
76 }
77
78 }