1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.ThreadSafe;
36 import org.apache.http.conn.ManagedHttpClientConnection;
37 import org.apache.http.conn.routing.HttpRoute;
38 import org.apache.http.pool.PoolEntry;
39
40
41
42
43 @ThreadSafe
44 class CPoolEntry extends PoolEntry<HttpRoute, ManagedHttpClientConnection> {
45
46 private final Log log;
47 private volatile boolean routeComplete;
48
49 public CPoolEntry(
50 final Log log,
51 final String id,
52 final HttpRoute route,
53 final ManagedHttpClientConnection conn,
54 final long timeToLive, final TimeUnit tunit) {
55 super(id, route, conn, timeToLive, tunit);
56 this.log = log;
57 }
58
59 public void markRouteComplete() {
60 this.routeComplete = true;
61 }
62
63 public boolean isRouteComplete() {
64 return this.routeComplete;
65 }
66
67 public void closeConnection() throws IOException {
68 final HttpClientConnection conn = getConnection();
69 conn.close();
70 }
71
72 public void shutdownConnection() throws IOException {
73 final HttpClientConnection conn = getConnection();
74 conn.shutdown();
75 }
76
77 @Override
78 public boolean isExpired(final long now) {
79 final boolean expired = super.isExpired(now);
80 if (expired && this.log.isDebugEnabled()) {
81 this.log.debug("Connection " + this + " expired @ " + new Date(getExpiry()));
82 }
83 return expired;
84 }
85
86 @Override
87 public boolean isClosed() {
88 final HttpClientConnection conn = getConnection();
89 return !conn.isOpen();
90 }
91
92 @Override
93 public void close() {
94 try {
95 closeConnection();
96 } catch (final IOException ex) {
97 this.log.debug("I/O error closing connection", ex);
98 }
99 }
100
101 }