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 package org.apache.http.impl.nio;
28
29 import javax.net.ssl.SSLContext;
30
31 import org.apache.http.HttpRequest;
32 import org.apache.http.HttpRequestFactory;
33 import org.apache.http.HttpResponse;
34 import org.apache.http.annotation.ThreadingBehavior;
35 import org.apache.http.annotation.Contract;
36 import org.apache.http.config.ConnectionConfig;
37 import org.apache.http.entity.ContentLengthStrategy;
38 import org.apache.http.impl.ConnSupport;
39 import org.apache.http.impl.DefaultHttpRequestFactory;
40 import org.apache.http.impl.nio.codecs.DefaultHttpRequestParserFactory;
41 import org.apache.http.nio.NHttpConnectionFactory;
42 import org.apache.http.nio.NHttpMessageParserFactory;
43 import org.apache.http.nio.NHttpMessageWriterFactory;
44 import org.apache.http.nio.reactor.IOSession;
45 import org.apache.http.nio.reactor.ssl.SSLIOSession;
46 import org.apache.http.nio.reactor.ssl.SSLMode;
47 import org.apache.http.nio.reactor.ssl.SSLSetupHandler;
48 import org.apache.http.nio.util.ByteBufferAllocator;
49 import org.apache.http.nio.util.HeapByteBufferAllocator;
50 import org.apache.http.params.HttpParamConfig;
51 import org.apache.http.params.HttpParams;
52 import org.apache.http.ssl.SSLContexts;
53 import org.apache.http.util.Args;
54
55
56
57
58
59
60
61 @SuppressWarnings("deprecation")
62 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
63 public class SSLNHttpServerConnectionFactory
64 implements NHttpConnectionFactory<DefaultNHttpServerConnection> {
65
66 private final SSLContext sslContext;
67 private final SSLSetupHandler sslHandler;
68 private final ContentLengthStrategy incomingContentStrategy;
69 private final ContentLengthStrategy outgoingContentStrategy;
70 private final NHttpMessageParserFactory<HttpRequest> requestParserFactory;
71 private final NHttpMessageWriterFactory<HttpResponse> responseWriterFactory;
72 private final ByteBufferAllocator allocator;
73 private final ConnectionConfig cconfig;
74
75
76
77
78
79
80
81 @Deprecated
82 public SSLNHttpServerConnectionFactory(
83 final SSLContext sslContext,
84 final SSLSetupHandler sslHandler,
85 final HttpRequestFactory requestFactory,
86 final ByteBufferAllocator allocator,
87 final HttpParams params) {
88 super();
89 Args.notNull(requestFactory, "HTTP request factory");
90 Args.notNull(allocator, "Byte buffer allocator");
91 Args.notNull(params, "HTTP parameters");
92 this.sslContext = sslContext != null ? sslContext : SSLContexts.createSystemDefault();
93 this.sslHandler = sslHandler;
94 this.incomingContentStrategy = null;
95 this.outgoingContentStrategy = null;
96 this.requestParserFactory = new DefaultHttpRequestParserFactory(null, requestFactory);
97 this.responseWriterFactory = null;
98 this.allocator = allocator;
99 this.cconfig = HttpParamConfig.getConnectionConfig(params);
100 }
101
102
103
104
105
106
107 @Deprecated
108 public SSLNHttpServerConnectionFactory(
109 final SSLContext sslContext,
110 final SSLSetupHandler sslHandler,
111 final HttpParams params) {
112 this(sslContext, sslHandler, DefaultHttpRequestFactory.INSTANCE,
113 HeapByteBufferAllocator.INSTANCE, params);
114 }
115
116
117
118
119
120 @Deprecated
121 public SSLNHttpServerConnectionFactory(final HttpParams params) {
122 this(null, null, params);
123 }
124
125
126
127
128 public SSLNHttpServerConnectionFactory(
129 final SSLContext sslContext,
130 final SSLSetupHandler sslHandler,
131 final ContentLengthStrategy incomingContentStrategy,
132 final ContentLengthStrategy outgoingContentStrategy,
133 final NHttpMessageParserFactory<HttpRequest> requestParserFactory,
134 final NHttpMessageWriterFactory<HttpResponse> responseWriterFactory,
135 final ByteBufferAllocator allocator,
136 final ConnectionConfig cconfig) {
137 super();
138 this.sslContext = sslContext != null ? sslContext : SSLContexts.createSystemDefault();
139 this.sslHandler = sslHandler;
140 this.incomingContentStrategy = incomingContentStrategy;
141 this.outgoingContentStrategy = outgoingContentStrategy;
142 this.requestParserFactory = requestParserFactory;
143 this.responseWriterFactory = responseWriterFactory;
144 this.allocator = allocator;
145 this.cconfig = cconfig != null ? cconfig : ConnectionConfig.DEFAULT;
146 }
147
148
149
150
151 public SSLNHttpServerConnectionFactory(
152 final SSLContext sslContext,
153 final SSLSetupHandler sslHandler,
154 final NHttpMessageParserFactory<HttpRequest> requestParserFactory,
155 final NHttpMessageWriterFactory<HttpResponse> responseWriterFactory,
156 final ByteBufferAllocator allocator,
157 final ConnectionConfig cconfig) {
158 this(sslContext, sslHandler,
159 null, null, requestParserFactory, responseWriterFactory, allocator, cconfig);
160 }
161
162
163
164
165 public SSLNHttpServerConnectionFactory(
166 final SSLContext sslContext,
167 final SSLSetupHandler sslHandler,
168 final NHttpMessageParserFactory<HttpRequest> requestParserFactory,
169 final NHttpMessageWriterFactory<HttpResponse> responseWriterFactory,
170 final ConnectionConfig cconfig) {
171 this(sslContext, sslHandler,
172 null, null, requestParserFactory, responseWriterFactory, null, cconfig);
173 }
174
175
176
177
178 public SSLNHttpServerConnectionFactory(
179 final SSLContext sslContext,
180 final SSLSetupHandler sslHandler,
181 final ConnectionConfig config) {
182 this(sslContext, sslHandler, null, null, null, null, null, config);
183 }
184
185
186
187
188 public SSLNHttpServerConnectionFactory(final ConnectionConfig config) {
189 this(null, null, null, null, null, null, null, config);
190 }
191
192
193
194
195 public SSLNHttpServerConnectionFactory() {
196 this(null, null, null, null, null, null, null, null);
197 }
198
199
200
201
202 @Deprecated
203 protected DefaultNHttpServerConnection createConnection(
204 final IOSession session,
205 final HttpRequestFactory requestFactory,
206 final ByteBufferAllocator allocator,
207 final HttpParams params) {
208 return new DefaultNHttpServerConnection(session, requestFactory, allocator, params);
209 }
210
211
212
213
214 protected SSLIOSession createSSLIOSession(
215 final IOSession ioSession,
216 final SSLContext sslContext,
217 final SSLSetupHandler sslHandler) {
218 final SSLIOSessionSession.html#SSLIOSession">SSLIOSession sslioSession = new SSLIOSession(ioSession, SSLMode.SERVER,
219 sslContext, sslHandler);
220 return sslioSession;
221 }
222
223 @Override
224 public DefaultNHttpServerConnection createConnection(final IOSession ioSession) {
225 final SSLIOSession sslioSession = createSSLIOSession(ioSession, this.sslContext, this.sslHandler);
226 ioSession.setAttribute(SSLIOSession.SESSION_KEY, sslioSession);
227 return new DefaultNHttpServerConnection(sslioSession,
228 this.cconfig.getBufferSize(),
229 this.cconfig.getFragmentSizeHint(),
230 this.allocator,
231 ConnSupport.createDecoder(this.cconfig),
232 ConnSupport.createEncoder(this.cconfig),
233 this.cconfig.getMessageConstraints(),
234 this.incomingContentStrategy,
235 this.outgoingContentStrategy,
236 this.requestParserFactory,
237 this.responseWriterFactory);
238 }
239
240 }