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.http.impl.nio;
29
30 import java.io.IOException;
31
32 import javax.net.ssl.SSLContext;
33
34 import org.apache.http.annotation.Contract;
35 import org.apache.http.annotation.ThreadingBehavior;
36 import org.apache.http.config.ConnectionConfig;
37 import org.apache.http.impl.nio.reactor.AbstractIODispatch;
38 import org.apache.http.nio.NHttpClientEventHandler;
39 import org.apache.http.nio.NHttpConnectionFactory;
40 import org.apache.http.nio.reactor.IOSession;
41 import org.apache.http.nio.reactor.ssl.SSLSetupHandler;
42 import org.apache.http.params.HttpParams;
43 import org.apache.http.util.Args;
44
45
46
47
48
49
50
51
52
53 @SuppressWarnings("deprecation")
54 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
55 public class DefaultHttpClientIODispatch<H extends NHttpClientEventHandler>
56 extends AbstractIODispatch<DefaultNHttpClientConnection> {
57
58
59
60
61
62
63
64
65
66
67
68 public static <T extends NHttpClientEventHandler> DefaultHttpClientIODispatch<T> create(final T handler,
69 final SSLContext sslContext,
70 final ConnectionConfig config) {
71 return sslContext == null ? new DefaultHttpClientIODispatch<T>(handler, config)
72 : new DefaultHttpClientIODispatch<T>(handler, sslContext, config);
73 }
74
75
76
77
78
79
80
81
82
83
84
85
86 public static <T extends NHttpClientEventHandler> DefaultHttpClientIODispatch<T> create(final T handler,
87 final SSLContext sslContext,
88 final SSLSetupHandler sslHandler,
89 final ConnectionConfig config) {
90 return sslContext == null ? new DefaultHttpClientIODispatch<T>(handler, config)
91 : new DefaultHttpClientIODispatch<T>(handler, sslContext, sslHandler, config);
92 }
93
94 private final H handler;
95 private final NHttpConnectionFactory<? extends DefaultNHttpClientConnection> connectionFactory;
96
97
98
99
100
101
102
103
104 public DefaultHttpClientIODispatch(
105 final H handler,
106 final NHttpConnectionFactory<? extends DefaultNHttpClientConnection> connFactory) {
107 super();
108 this.handler = Args.notNull(handler, "HTTP client handler");
109 this.connectionFactory = Args.notNull(connFactory, "HTTP client connection factory");
110 }
111
112
113
114
115
116 @Deprecated
117 public DefaultHttpClientIODispatch(
118 final H handler,
119 final HttpParams params) {
120 this(handler, new DefaultNHttpClientConnectionFactory(params));
121 }
122
123
124
125
126
127 @Deprecated
128 public DefaultHttpClientIODispatch(
129 final H handler,
130 final SSLContext sslContext,
131 final SSLSetupHandler sslHandler,
132 final HttpParams params) {
133 this(handler, new SSLNHttpClientConnectionFactory(sslContext, sslHandler, params));
134 }
135
136
137
138
139
140 @Deprecated
141 public DefaultHttpClientIODispatch(
142 final H handler,
143 final SSLContext sslContext,
144 final HttpParams params) {
145 this(handler, sslContext, null, params);
146 }
147
148
149
150
151 public DefaultHttpClientIODispatch(final H handler, final ConnectionConfig config) {
152 this(handler, new DefaultNHttpClientConnectionFactory(config));
153 }
154
155
156
157
158 public DefaultHttpClientIODispatch(
159 final H handler,
160 final SSLContext sslContext,
161 final SSLSetupHandler sslHandler,
162 final ConnectionConfig config) {
163 this(handler, new SSLNHttpClientConnectionFactory(sslContext, sslHandler, config));
164 }
165
166
167
168
169 public DefaultHttpClientIODispatch(
170 final H handler,
171 final SSLContext sslContext,
172 final ConnectionConfig config) {
173 this(handler, new SSLNHttpClientConnectionFactory(sslContext, null, config));
174 }
175
176 @Override
177 protected DefaultNHttpClientConnection createConnection(final IOSession session) {
178 return this.connectionFactory.createConnection(session);
179 }
180
181
182
183
184
185
186
187 public NHttpConnectionFactory<? extends DefaultNHttpClientConnection> getConnectionFactory() {
188 return connectionFactory;
189 }
190
191
192
193
194
195
196
197 public H getHandler() {
198 return handler;
199 }
200
201 @Override
202 protected void onConnected(final DefaultNHttpClientConnection conn) {
203 final Object attachment = conn.getContext().getAttribute(IOSession.ATTACHMENT_KEY);
204 try {
205 this.handler.connected(conn, attachment);
206 } catch (final Exception ex) {
207 this.handler.exception(conn, ex);
208 }
209 }
210
211 @Override
212 protected void onClosed(final DefaultNHttpClientConnection conn) {
213 this.handler.closed(conn);
214 }
215
216 @Override
217 protected void onException(final DefaultNHttpClientConnection conn, final IOException ex) {
218 this.handler.exception(conn, ex);
219 }
220
221 @Override
222 protected void onInputReady(final DefaultNHttpClientConnection conn) {
223 conn.consumeInput(this.handler);
224 }
225
226 @Override
227 protected void onOutputReady(final DefaultNHttpClientConnection conn) {
228 conn.produceOutput(this.handler);
229 }
230
231 @Override
232 protected void onTimeout(final DefaultNHttpClientConnection conn) {
233 try {
234 this.handler.timeout(conn);
235 } catch (final Exception ex) {
236 this.handler.exception(conn, ex);
237 }
238 }
239
240 }