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
29
30
31
32 package org.apache.commons.httpclient;
33
34 import java.io.IOException;
35 import java.io.InputStream;
36
37 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
38
39 /***
40 */
41 public class NoHostHttpConnectionManager implements HttpConnectionManager {
42
43 private HttpConnection connection;
44
45 private boolean connectionReleased = false;
46
47 private HttpConnectionManagerParams params = new HttpConnectionManagerParams();
48
49 public NoHostHttpConnectionManager() {
50 setConnection(new SimpleHttpConnection());
51 }
52
53 /***
54 * This method currently does nothing.
55 */
56 public void closeIdleConnections(long idleTimeout) {
57 }
58
59 /***
60 * @return
61 */
62 public boolean isConnectionReleased() {
63 return connectionReleased;
64 }
65
66 /***
67 * @param connection
68 */
69 public void setConnection(HttpConnection connection) {
70 this.connection = connection;
71 connection.setHttpConnectionManager(this);
72 connection.getParams().setDefaults(this.params);
73 }
74
75 public HttpConnection getConnection(HostConfiguration hostConfiguration) {
76
77
78
79 if (!hostConfiguration.hostEquals(connection)
80 || !hostConfiguration.proxyEquals(connection)) {
81
82 if (connection.isOpen()) {
83 connection.close();
84 }
85
86 connection.setHost(hostConfiguration.getHost());
87 connection.setVirtualHost(hostConfiguration.getVirtualHost());
88 connection.setPort(hostConfiguration.getPort());
89 connection.setProtocol(hostConfiguration.getProtocol());
90 connection.setLocalAddress(hostConfiguration.getLocalAddress());
91
92 connection.setProxyHost(hostConfiguration.getProxyHost());
93 connection.setProxyPort(hostConfiguration.getProxyPort());
94 } else {
95 finishLastResponse(connection);
96 }
97
98 connectionReleased = false;
99 return connection;
100 }
101
102 /***
103 * @deprecated
104 */
105 public HttpConnection getConnection(HostConfiguration hostConfiguration, long timeout)
106 throws HttpException {
107 return getConnection(hostConfiguration);
108 }
109
110 public HttpConnection getConnectionWithTimeout(
111 HostConfiguration hostConfiguration,
112 long timeout)
113 throws ConnectTimeoutException {
114 return getConnection(hostConfiguration);
115 }
116
117 public void releaseConnection(HttpConnection conn) {
118 if (conn != connection) {
119 throw new IllegalStateException("Unexpected close on a different connection.");
120 }
121
122 connectionReleased = true;
123 finishLastResponse(connection);
124 }
125
126 /***
127 * Since the same connection is about to be reused, make sure the
128 * previous request was completely processed, and if not
129 * consume it now.
130 * @param conn The connection
131 */
132 static void finishLastResponse(HttpConnection conn) {
133 InputStream lastResponse = conn.getLastResponseInputStream();
134 if (lastResponse != null) {
135 conn.setLastResponseInputStream(null);
136 try {
137 lastResponse.close();
138 } catch (IOException ioe) {
139
140 conn.close();
141 }
142 }
143 }
144
145 public HttpConnectionManagerParams getParams() {
146 return this.params;
147 }
148
149 public void setParams(final HttpConnectionManagerParams params) {
150 if (params == null) {
151 throw new IllegalArgumentException("Parameters may not be null");
152 }
153 this.params = params;
154 }
155
156 }