Source code: org/apache/http/impl/DefaultConnectionReuseStrategy.java
1 /*
2 * $HeadURL: https://svn.apache.org/repos/asf/jakarta/httpcomponents/httpcore/tags/4.0-alpha2/src/java/org/apache/http/impl/DefaultConnectionReuseStrategy.java $
3 * $Revision: 376961 $
4 * $Date: 2006-02-11 11:32:50 +0100 (Sat, 11 Feb 2006) $
5 *
6 * ====================================================================
7 *
8 * Copyright 1999-2006 The Apache Software Foundation
9 *
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
13 *
14 * http://www.apache.org/licenses/LICENSE-2.0
15 *
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ====================================================================
22 *
23 * This software consists of voluntary contributions made by many
24 * individuals on behalf of the Apache Software Foundation. For more
25 * information on the Apache Software Foundation, please see
26 * <http://www.apache.org/>.
27 *
28 */
29
30 package org.apache.http.impl;
31
32 import org.apache.http.ConnectionReuseStrategy;
33 import org.apache.http.Header;
34 import org.apache.http.HttpEntity;
35 import org.apache.http.HttpResponse;
36 import org.apache.http.HttpVersion;
37 import org.apache.http.protocol.HTTP;
38
39 /**
40 * Default implementation of a strategy deciding about connection re-use.
41 *
42 * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
43 *
44 * @version $Revision: 376961 $
45 *
46 * @since 4.0
47 */
48 public class DefaultConnectionReuseStrategy implements ConnectionReuseStrategy {
49
50 public DefaultConnectionReuseStrategy() {
51 super();
52 }
53
54 public boolean keepAlive(final HttpResponse response) {
55 if (response == null) {
56 throw new IllegalArgumentException("HTTP response may not be null");
57 }
58 HttpEntity entity = response.getEntity();
59 HttpVersion ver = response.getStatusLine().getHttpVersion();
60 if (entity != null) {
61 if (entity.getContentLength() < 0) {
62 if (!entity.isChunked() || ver.lessEquals(HttpVersion.HTTP_1_0)) {
63 // if the content length is not known and is not chunk
64 // encoded, the connection cannot be reused
65 return false;
66 }
67 }
68 }
69 // Check for 'Connection' directive
70 Header connheader = response.getFirstHeader(HTTP.CONN_DIRECTIVE);
71 if (connheader != null) {
72 String conndirective = connheader.getValue();
73 if (HTTP.CONN_CLOSE.equalsIgnoreCase(conndirective)) {
74 return false;
75 } else if (HTTP.CONN_KEEP_ALIVE.equalsIgnoreCase(conndirective)) {
76 return true;
77 } else {
78 // log unknown directive
79 }
80 }
81 // Resorting to protocol version default close connection policy
82 return ver.greaterEquals(HttpVersion.HTTP_1_1);
83 }
84
85 }