/* * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/OperatedClientConnection.java $ * $Revision: 646087 $ * $Date: 2008-04-08 14:36:46 -0700 (Tue, 08 Apr 2008) $ * * ==================================================================== * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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/>. * */ package org.apache.http.conn; import java.io.IOException; import java.net.Socket; import org.apache.http.HttpClientConnection; import org.apache.http.HttpHost; import org.apache.http.HttpInetConnection; import org.apache.http.params.HttpParams; /** * A client-side connection that relies on outside logic to connect sockets to the * appropriate hosts. It can be operated directly by an application, or through an * {@link ClientConnectionOperator operator}. * * * @author <a href="mailto:rolandw at apache.org">Roland Weber</a> * * * <!-- empty lines to avoid svn diff problems --> * @version $Revision: 646087 $ $Date: 2008-04-08 14:36:46 -0700 (Tue, 08 Apr 2008) $ * * @since 4.0 */ public interface OperatedClientConnection extends HttpClientConnection, HttpInetConnection { /** * Obtains the target host for this connection. * If the connection is to a proxy but not tunnelled, this is * the proxy. If the connection is tunnelled through a proxy, * this is the target of the tunnel. * <br/> * The return value is well-defined only while the connection is open. * It may change even while the connection is open, * because of an {@link #update update}. * * @return the host to which this connection is opened */ HttpHost getTargetHost() ; /** * Indicates whether this connection is secure. * The return value is well-defined only while the connection is open. * It may change even while the connection is open, * because of an {@link #update update}. * * @return <code>true</code> if this connection is secure, * <code>false</code> otherwise */ boolean isSecure() ; /** * Obtains the socket for this connection. * The return value is well-defined only while the connection is open. * It may change even while the connection is open, * because of an {@link #update update}. * * @return the socket for communicating with the * {@link #getTargetHost target host} */ Socket getSocket() ; // There is no getParams(). For the moment, we // do not require connections to store parameters. /** * Signals that this connection is in the process of being open. * <br/> * By calling this method, you can provide the connection with * the unconnected socket that will be connected before * {@link #openCompleted} is called. This allows * the connection to close that socket if * {@link org.apache.http.HttpConnection#shutdown shutdown} * is called before it is open. Closing the unconnected socket * will interrupt a thread that is blocked on the connect. * Otherwise, that thread will either time out on the connect, * or it returns successfully and then opens this connection * which was just shut down. * <br/> * You also must call {@link #openCompleted} in order to complete * the process * * @param sock the unconnected socket which is about to * be connected. * @param target the target host of this connection */ void opening(Socket sock, HttpHost target) throws IOException ; /** * Signals that the connection has been successfully open. * An attempt to call this method on an open connection will cause * an exception. * * @param secure <code>true</code> if this connection is secure, for * example if an <code>SSLSocket</code> is used, or * <code>false</code> if it is not secure * @param params parameters for this connection. The parameters will * be used when creating dependent objects, for example * to determine buffer sizes. */ void openCompleted(boolean secure, HttpParams params) throws IOException ; /** * Updates this connection. * A connection can be updated only while it is open. * Updates are used for example when a tunnel has been established, * or when a TLS/SSL connection has been layered on top of a plain * socket connection. * <br/> * <b>Note:</b> Updating the connection will <i>not</i> close the * previously used socket. It is the caller's responsibility to close * that socket if it is no longer required. * * @param sock the new socket for communicating with the target host, * or <code>null</code> to continue using the old socket. * If <code>null</code> is passed, helper objects that * depend on the socket should be re-used. In that case, * some changes in the parameters will not take effect. * @param target the new target host of this connection * @param secure <code>true</code> if this connection is now secure, * <code>false</code> if it is not secure * @param params new parameters for this connection */ void update(Socket sock, HttpHost target, boolean secure, HttpParams params) throws IOException ; } // interface OperatedClientConnection