1 /*
2  * ====================================================================
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with 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,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  * ====================================================================
20  *
21  * This software consists of voluntary contributions made by many
22  * individuals on behalf of the Apache Software Foundation.  For more
23  * information on the Apache Software Foundation, please see
24  * <http://www.apache.org/>.
25  *
26  */

27 package org.apache.http.impl.conn;
28
29 import java.io.IOException;
30 import java.util.Date;
31 import java.util.concurrent.TimeUnit;
32
33 import org.apache.commons.logging.Log;
34 import org.apache.http.HttpClientConnection;
35 import org.apache.http.annotation.Contract;
36 import org.apache.http.annotation.ThreadingBehavior;
37 import org.apache.http.conn.ManagedHttpClientConnection;
38 import org.apache.http.conn.routing.HttpRoute;
39 import org.apache.http.pool.PoolEntry;
40
41 /**
42  * @since 4.3
43  */

44 @Contract(threading = ThreadingBehavior.SAFE)
45 class CPoolEntry extends PoolEntry<HttpRoute, ManagedHttpClientConnection> {
46
47     private final Log log;
48     private volatile boolean routeComplete;
49
50     public CPoolEntry(
51             final Log log,
52             final String id,
53             final HttpRoute route,
54             final ManagedHttpClientConnection conn,
55             final long timeToLive, final TimeUnit timeUnit) {
56         super(id, route, conn, timeToLive, timeUnit);
57         this.log = log;
58     }
59
60     public void markRouteComplete() {
61         this.routeComplete = true;
62     }
63
64     public boolean isRouteComplete() {
65         return this.routeComplete;
66     }
67
68     public void closeConnection() throws IOException {
69         final HttpClientConnection conn = getConnection();
70         conn.close();
71     }
72
73     public void shutdownConnection() throws IOException {
74         final HttpClientConnection conn = getConnection();
75         conn.shutdown();
76     }
77
78     @Override
79     public boolean isExpired(final long now) {
80         final boolean expired = super.isExpired(now);
81         if (expired && this.log.isDebugEnabled()) {
82             this.log.debug("Connection " + this + " expired @ " + new Date(getExpiry()));
83         }
84         return expired;
85     }
86
87     @Override
88     public boolean isClosed() {
89         final HttpClientConnection conn = getConnection();
90         return !conn.isOpen();
91     }
92
93     @Override
94     public void close() {
95         try {
96             closeConnection();
97         } catch (final IOException ex) {
98             this.log.debug("I/O error closing connection", ex);
99         }
100     }
101
102 }
103