blob: 8c99ca05d1e1bd230146e771e30bd35595621882 [file] [log] [blame]
/*
* $Header: /home/data/cvs/rt/org.eclipse.ecf/tests/bundles/org.eclipse.ecf.tests.apache.httpclient.server/src/org/apache/commons/httpclient/NoHostHttpConnectionManager.java,v 1.1 2009/02/13 18:07:50 slewis Exp $
* $Revision: 1.1 $
* $Date: 2009/02/13 18:07:50 $
*
* ====================================================================
*
* Copyright 2002-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package org.apache.commons.httpclient;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
/**
*/
public class NoHostHttpConnectionManager implements HttpConnectionManager {
private HttpConnection connection;
private boolean connectionReleased = false;
private HttpConnectionManagerParams params = new HttpConnectionManagerParams();
public NoHostHttpConnectionManager() {
super();
}
/**
* This method currently does nothing.
*/
public void closeIdleConnections(long idleTimeout) {
}
/**
* @return
*/
public boolean isConnectionReleased() {
return connectionReleased;
}
/**
* @param connection
*/
public void setConnection(HttpConnection connection) {
this.connection = connection;
connection.setHttpConnectionManager(this);
connection.getParams().setDefaults(this.params);
}
public HttpConnection getConnection(HostConfiguration hostConfiguration) {
// make sure the host and proxy are correct for this connection
// close it and set the values if they are not
if (!hostConfiguration.hostEquals(connection)
|| !hostConfiguration.proxyEquals(connection)) {
if (connection.isOpen()) {
connection.close();
}
connection.setHost(hostConfiguration.getHost());
connection.setPort(hostConfiguration.getPort());
connection.setProtocol(hostConfiguration.getProtocol());
connection.setLocalAddress(hostConfiguration.getLocalAddress());
connection.setProxyHost(hostConfiguration.getProxyHost());
connection.setProxyPort(hostConfiguration.getProxyPort());
} else {
finishLastResponse(connection);
}
connectionReleased = false;
return connection;
}
/**
* @deprecated
*/
public HttpConnection getConnection(HostConfiguration hostConfiguration, long timeout)
throws HttpException {
return getConnection(hostConfiguration);
}
public HttpConnection getConnectionWithTimeout(
HostConfiguration hostConfiguration,
long timeout)
throws ConnectionPoolTimeoutException {
return getConnection(hostConfiguration);
}
public void releaseConnection(HttpConnection conn) {
if (conn != connection) {
throw new IllegalStateException("Unexpected close on a different connection.");
}
connectionReleased = true;
finishLastResponse(connection);
}
/**
* Since the same connection is about to be reused, make sure the
* previous request was completely processed, and if not
* consume it now.
* @param conn The connection
*/
static void finishLastResponse(HttpConnection conn) {
InputStream lastResponse = conn.getLastResponseInputStream();
if (lastResponse != null) {
conn.setLastResponseInputStream(null);
try {
lastResponse.close();
} catch (IOException ioe) {
//FIXME: badness - close to force reconnect.
conn.close();
}
}
}
public HttpConnectionManagerParams getParams() {
return this.params;
}
public void setParams(final HttpConnectionManagerParams params) {
if (params == null) {
throw new IllegalArgumentException("Parameters may not be null");
}
this.params = params;
}
}