mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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.tsccm;
    29 import java.lang.ref.ReferenceQueue;
    30 import java.util.concurrent.TimeUnit;
    32 import ch.boye.httpclientandroidlib.annotation.NotThreadSafe;
    33 import ch.boye.httpclientandroidlib.conn.OperatedClientConnection;
    34 import ch.boye.httpclientandroidlib.conn.ClientConnectionOperator;
    35 import ch.boye.httpclientandroidlib.conn.routing.HttpRoute;
    36 import ch.boye.httpclientandroidlib.impl.conn.AbstractPoolEntry;
    38 /**
    39  * Basic implementation of a connection pool entry.
    40  *
    41  * @since 4.0
    42  */
    43 @NotThreadSafe
    44 public class BasicPoolEntry extends AbstractPoolEntry {
    46     private final long created;
    48     private long updated;
    49     private long validUntil;
    50     private long expiry;
    52     /**
    53      * @deprecated do not use
    54      */
    55     @Deprecated
    56     public BasicPoolEntry(ClientConnectionOperator op,
    57                           HttpRoute route,
    58                           ReferenceQueue<Object> queue) {
    59         super(op, route);
    60         if (route == null) {
    61             throw new IllegalArgumentException("HTTP route may not be null");
    62         }
    63         this.created = System.currentTimeMillis();
    64         this.validUntil = Long.MAX_VALUE;
    65         this.expiry = this.validUntil;
    66     }
    68     /**
    69      * Creates a new pool entry.
    70      *
    71      * @param op      the connection operator
    72      * @param route   the planned route for the connection
    73      */
    74     public BasicPoolEntry(ClientConnectionOperator op,
    75                           HttpRoute route) {
    76         this(op, route, -1, TimeUnit.MILLISECONDS);
    77     }
    79     /**
    80      * Creates a new pool entry with a specified maximum lifetime.
    81      *
    82      * @param op        the connection operator
    83      * @param route     the planned route for the connection
    84      * @param connTTL   maximum lifetime of this entry, <=0 implies "infinity"
    85      * @param timeunit  TimeUnit of connTTL
    86      *
    87      * @since 4.1
    88      */
    89     public BasicPoolEntry(ClientConnectionOperator op,
    90                           HttpRoute route, long connTTL, TimeUnit timeunit) {
    91         super(op, route);
    92         if (route == null) {
    93             throw new IllegalArgumentException("HTTP route may not be null");
    94         }
    95         this.created = System.currentTimeMillis();
    96         if (connTTL > 0) {
    97             this.validUntil = this.created + timeunit.toMillis(connTTL);
    98         } else {
    99             this.validUntil = Long.MAX_VALUE;
   100         }
   101         this.expiry = this.validUntil;
   102     }
   104     protected final OperatedClientConnection getConnection() {
   105         return super.connection;
   106     }
   108     protected final HttpRoute getPlannedRoute() {
   109         return super.route;
   110     }
   112     @Deprecated
   113     protected final BasicPoolEntryRef getWeakRef() {
   114         return null;
   115     }
   117     @Override
   118     protected void shutdownEntry() {
   119         super.shutdownEntry();
   120     }
   122     /**
   123      * @since 4.1
   124      */
   125     public long getCreated() {
   126         return this.created;
   127     }
   129     /**
   130      * @since 4.1
   131      */
   132     public long getUpdated() {
   133         return this.updated;
   134     }
   136     /**
   137      * @since 4.1
   138      */
   139     public long getExpiry() {
   140         return this.expiry;
   141     }
   143     public long getValidUntil() {
   144         return this.validUntil;
   145     }
   147     /**
   148      * @since 4.1
   149      */
   150     public void updateExpiry(long time, TimeUnit timeunit) {
   151         this.updated = System.currentTimeMillis();
   152         long newExpiry;
   153         if (time > 0) {
   154             newExpiry = this.updated + timeunit.toMillis(time);
   155         } else {
   156             newExpiry = Long.MAX_VALUE;
   157         }
   158         this.expiry = Math.min(validUntil, newExpiry);
   159     }
   161     /**
   162      * @since 4.1
   163      */
   164     public boolean isExpired(long now) {
   165         return now >= this.expiry;
   166     }
   168 }

mercurial