mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /*
     2  * ====================================================================
     3  *
     4  *  Licensed to the Apache Software Foundation (ASF) under one or more
     5  *  contributor license agreements.  See the NOTICE file distributed with
     6  *  this work for additional information regarding copyright ownership.
     7  *  The ASF licenses this file to You under the Apache License, Version 2.0
     8  *  (the "License"); you may not use this file except in compliance with
     9  *  the License.  You may obtain a copy of the License at
    10  *
    11  *      http://www.apache.org/licenses/LICENSE-2.0
    12  *
    13  *  Unless required by applicable law or agreed to in writing, software
    14  *  distributed under the License is distributed on an "AS IS" BASIS,
    15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    16  *  See the License for the specific language governing permissions and
    17  *  limitations under the License.
    18  * ====================================================================
    19  *
    20  * This software consists of voluntary contributions made by many
    21  * individuals on behalf of the Apache Software Foundation.  For more
    22  * information on the Apache Software Foundation, please see
    23  * <http://www.apache.org/>.
    24  *
    25  */
    27 package ch.boye.httpclientandroidlib.impl.conn;
    29 import java.io.IOException;
    31 import ch.boye.httpclientandroidlib.HttpHost;
    32 import ch.boye.httpclientandroidlib.params.HttpParams;
    33 import ch.boye.httpclientandroidlib.protocol.HttpContext;
    34 import ch.boye.httpclientandroidlib.conn.routing.HttpRoute;
    35 import ch.boye.httpclientandroidlib.conn.ClientConnectionManager;
    36 import ch.boye.httpclientandroidlib.conn.OperatedClientConnection;
    38 /**
    39  * Abstract adapter from pool {@link AbstractPoolEntry entries} to
    40  * {@link ch.boye.httpclientandroidlib.conn.ManagedClientConnection managed}
    41  * client connections.
    42  * The connection in the pool entry is used to initialize the base class.
    43  * In addition, methods to establish a route are delegated to the
    44  * pool entry. {@link #shutdown shutdown} and {@link #close close}
    45  * will clear the tracked route in the pool entry and call the
    46  * respective method of the wrapped connection.
    47  *
    48  * @since 4.0
    49  */
    50 public abstract class AbstractPooledConnAdapter extends AbstractClientConnAdapter {
    52     /** The wrapped pool entry. */
    53     protected volatile AbstractPoolEntry poolEntry;
    55     /**
    56      * Creates a new connection adapter.
    57      *
    58      * @param manager   the connection manager
    59      * @param entry     the pool entry for the connection being wrapped
    60      */
    61     protected AbstractPooledConnAdapter(ClientConnectionManager manager,
    62                                         AbstractPoolEntry entry) {
    63         super(manager, entry.connection);
    64         this.poolEntry = entry;
    65     }
    67     /**
    68      * Obtains the pool entry.
    69      *
    70      * @return  the pool entry, or <code>null</code> if detached
    71      */
    72     protected AbstractPoolEntry getPoolEntry() {
    73         return this.poolEntry;
    74     }
    76     /**
    77      * Asserts that there is a valid pool entry.
    78      *
    79      * @throws ConnectionShutdownException if there is no pool entry
    80      *                                  or connection has been aborted
    81      *
    82      * @see #assertValid(OperatedClientConnection)
    83      */
    84     protected void assertValid(final AbstractPoolEntry entry) {
    85         if (isReleased() || entry == null) {
    86             throw new ConnectionShutdownException();
    87         }
    88     }
    90     /**
    91      * @deprecated use {@link #assertValid(AbstractPoolEntry)}
    92      */
    93     @Deprecated
    94     protected final void assertAttached() {
    95         if (poolEntry == null) {
    96             throw new ConnectionShutdownException();
    97         }
    98     }
   100     /**
   101      * Detaches this adapter from the wrapped connection.
   102      * This adapter becomes useless.
   103      */
   104     @Override
   105     protected synchronized void detach() {
   106         poolEntry = null;
   107         super.detach();
   108     }
   110     public HttpRoute getRoute() {
   111         AbstractPoolEntry entry = getPoolEntry();
   112         assertValid(entry);
   113         return (entry.tracker == null) ? null : entry.tracker.toRoute();
   114     }
   116     public void open(HttpRoute route,
   117                      HttpContext context, HttpParams params)
   118         throws IOException {
   119         AbstractPoolEntry entry = getPoolEntry();
   120         assertValid(entry);
   121         entry.open(route, context, params);
   122     }
   124     public void tunnelTarget(boolean secure, HttpParams params)
   125         throws IOException {
   126         AbstractPoolEntry entry = getPoolEntry();
   127         assertValid(entry);
   128         entry.tunnelTarget(secure, params);
   129     }
   131     public void tunnelProxy(HttpHost next, boolean secure, HttpParams params)
   132         throws IOException {
   133         AbstractPoolEntry entry = getPoolEntry();
   134         assertValid(entry);
   135         entry.tunnelProxy(next, secure, params);
   136     }
   138     public void layerProtocol(HttpContext context, HttpParams params)
   139         throws IOException {
   140         AbstractPoolEntry entry = getPoolEntry();
   141         assertValid(entry);
   142         entry.layerProtocol(context, params);
   143     }
   145     public void close() throws IOException {
   146         AbstractPoolEntry entry = getPoolEntry();
   147         if (entry != null)
   148             entry.shutdownEntry();
   150         OperatedClientConnection conn = getWrappedConnection();
   151         if (conn != null) {
   152             conn.close();
   153         }
   154     }
   156     public void shutdown() throws IOException {
   157         AbstractPoolEntry entry = getPoolEntry();
   158         if (entry != null)
   159             entry.shutdownEntry();
   161         OperatedClientConnection conn = getWrappedConnection();
   162         if (conn != null) {
   163             conn.shutdown();
   164         }
   165     }
   167     public Object getState() {
   168         AbstractPoolEntry entry = getPoolEntry();
   169         assertValid(entry);
   170         return entry.getState();
   171     }
   173     public void setState(final Object state) {
   174         AbstractPoolEntry entry = getPoolEntry();
   175         assertValid(entry);
   176         entry.setState(state);
   177     }
   179 }

mercurial