    1   /*
    2    * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/test/org/apache/commons/httpclient/NoHostHttpConnectionManager.java,v 1.9 2004/10/31 13:53:03 olegk Exp $
    3    * $Revision: 480424 $
    4    * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
    5    *
    6    * ====================================================================
    7    *
    8    *  Licensed to the Apache Software Foundation (ASF) under one or more
    9    *  contributor license agreements.  See the NOTICE file distributed with
    10   *  this work for additional information regarding copyright ownership.
    11   *  The ASF licenses this file to You under the Apache License, Version 2.0
    12   *  (the "License"); you may not use this file except in compliance with
    13   *  the License.  You may obtain a copy of the License at
    14   *
    15   *      http://www.apache.org/licenses/LICENSE-2.0
    16   *
    17   *  Unless required by applicable law or agreed to in writing, software
    18   *  distributed under the License is distributed on an "AS IS" BASIS,
    19   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    20   *  See the License for the specific language governing permissions and
    21   *  limitations under the License.
    22   * ====================================================================
    23   *
    24   * This software consists of voluntary contributions made by many
    25   * individuals on behalf of the Apache Software Foundation.  For more
    26   * information on the Apache Software Foundation, please see
    27   * <http://www.apache.org/>.
    28   *
    29   * [Additional notices, if required by prior licensing conditions]
    30   *
    31   */
    32
    33  package org.apache.commons.httpclient;
    34
    35  import java.io.IOException;
    36  import java.io.InputStream;
    37
    38  import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
    39
    40  /**
    41   */
    42  public class NoHostHttpConnectionManager implements HttpConnectionManager {
    43
    44      private HttpConnection connection;
    45
    46      private boolean connectionReleased = false;
    47
    48      private HttpConnectionManagerParams params = new HttpConnectionManagerParams();
    49
    50      public NoHostHttpConnectionManager() {
    51          super();
    52      }
    53
    54      /**
    55       * This method currently does nothing.
    56       */
    57      public void closeIdleConnections(long idleTimeout) {
    58      }
    59
    60      /**
    61       * @return
    62       */
    63      public boolean isConnectionReleased() {
    64          return connectionReleased;
    65      }
    66
    67      /**
    68       * @param connection
    69       */
    70      public void setConnection(HttpConnection connection) {
    71          this.connection = connection;
    72          connection.setHttpConnectionManager(this);
    73          connection.getParams().setDefaults(this.params);
    74      }
    75
    76      public HttpConnection getConnection(HostConfiguration hostConfiguration) {
    77
    78          // make sure the host and proxy are correct for this connection
    79          // close it and set the values if they are not
    80          if (!hostConfiguration.hostEquals(connection)
    81              || !hostConfiguration.proxyEquals(connection)) {
    82
    83              if (connection.isOpen()) {
    84                  connection.close();
    85              }
    86
    87              connection.setHost(hostConfiguration.getHost());
    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 ConnectionPoolTimeoutException {
    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                 //FIXME: badness - close to force reconnect.
    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 }