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.conn;
29
30 import java.io.IOException;
31 import java.io.InterruptedIOException;
32 import java.net.Socket;
33 import java.nio.charset.CharsetDecoder;
34 import java.nio.charset.CharsetEncoder;
35 import java.util.Map;
36 import java.util.concurrent.ConcurrentHashMap;
37
38 import javax.net.ssl.SSLSession;
39 import javax.net.ssl.SSLSocket;
40
41 import org.apache.http.HttpRequest;
42 import org.apache.http.HttpResponse;
43 import org.apache.http.config.MessageConstraints;
44 import org.apache.http.conn.ManagedHttpClientConnection;
45 import org.apache.http.entity.ContentLengthStrategy;
46 import org.apache.http.impl.DefaultBHttpClientConnection;
47 import org.apache.http.io.HttpMessageParserFactory;
48 import org.apache.http.io.HttpMessageWriterFactory;
49 import org.apache.http.protocol.HttpContext;
50
51
52
53
54
55 public class DefaultManagedHttpClientConnection extends DefaultBHttpClientConnection
56 implements ManagedHttpClientConnection, HttpContext {
57
58 private final String id;
59 private final Map<String, Object> attributes;
60
61 private volatile boolean shutdown;
62
63 public DefaultManagedHttpClientConnection(
64 final String id,
65 final int bufferSize,
66 final int fragmentSizeHint,
67 final CharsetDecoder charDecoder,
68 final CharsetEncoder charEncoder,
69 final MessageConstraints constraints,
70 final ContentLengthStrategy incomingContentStrategy,
71 final ContentLengthStrategy outgoingContentStrategy,
72 final HttpMessageWriterFactory<HttpRequest> requestWriterFactory,
73 final HttpMessageParserFactory<HttpResponse> responseParserFactory) {
74 super(bufferSize, fragmentSizeHint, charDecoder, charEncoder,
75 constraints, incomingContentStrategy, outgoingContentStrategy,
76 requestWriterFactory, responseParserFactory);
77 this.id = id;
78 this.attributes = new ConcurrentHashMap<String, Object>();
79 }
80
81 public DefaultManagedHttpClientConnection(
82 final String id,
83 final int bufferSize) {
84 this(id, bufferSize, bufferSize, null, null, null, null, null, null, null);
85 }
86
87 @Override
88 public String getId() {
89 return this.id;
90 }
91
92 @Override
93 public void shutdown() throws IOException {
94 this.shutdown = true;
95 super.shutdown();
96 }
97
98 @Override
99 public Object getAttribute(final String id) {
100 return this.attributes.get(id);
101 }
102
103 @Override
104 public Object removeAttribute(final String id) {
105 return this.attributes.remove(id);
106 }
107
108 @Override
109 public void setAttribute(final String id, final Object obj) {
110 this.attributes.put(id, obj);
111 }
112
113 @Override
114 public void bind(final Socket socket) throws IOException {
115 if (this.shutdown) {
116 socket.close();
117
118 throw new InterruptedIOException("Connection already shutdown");
119 }
120 super.bind(socket);
121 }
122
123 @Override
124 public Socket getSocket() {
125 return super.getSocket();
126 }
127
128 @Override
129 public SSLSession getSSLSession() {
130 final Socket socket = super.getSocket();
131 return socket instanceof SSLSocket ? ((SSLSocket) socket).getSession() : null;
132 }
133
134 }