• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * $HeadURL: $
3   * $Revision: $
4   * $Date: $
5   *
6   * ====================================================================
7   * Licensed to the Apache Software Foundation (ASF) under one
8   * or more contributor license agreements.  See the NOTICE file
9   * distributed with this work for additional information
10   * regarding copyright ownership.  The ASF licenses this file
11   * to you under the Apache License, Version 2.0 (the
12   * "License"); you may not use this file except in compliance
13   * with the License.  You may obtain a copy of the License at
14   *
15   *   http://www.apache.org/licenses/LICENSE-2.0
16   *
17   * Unless required by applicable law or agreed to in writing,
18   * software distributed under the License is distributed on an
19   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20   * KIND, either express or implied.  See the License for the
21   * specific language governing permissions and limitations
22   * under the License.
23   * ====================================================================
24   *
25   * This software consists of voluntary contributions made by many
26   * individuals on behalf of the Apache Software Foundation.  For more
27   * information on the Apache Software Foundation, please see
28   * <http://www.apache.org/>.
29   *
30   */
31  package org.apache.http.impl.client;
32  
33  import org.apache.http.HeaderElement;
34  import org.apache.http.HeaderElementIterator;
35  import org.apache.http.HttpResponse;
36  import org.apache.http.conn.ConnectionKeepAliveStrategy;
37  import org.apache.http.message.BasicHeaderElementIterator;
38  import org.apache.http.protocol.HTTP;
39  import org.apache.http.protocol.HttpContext;
40  
41  /**
42   * Default implementation of a strategy deciding duration
43   * that a connection can remain idle.
44   *
45   * The default implementation looks solely at the 'Keep-Alive'
46   * header's timeout token.
47   *
48   * @author <a href="mailto:sberlin at gmail.com">Sam Berlin</a>
49   *
50   * @version $Revision: $
51   *
52   * @since 4.0
53   */
54  public class DefaultConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy {
55  
getKeepAliveDuration(HttpResponse response, HttpContext context)56      public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
57          if (response == null) {
58              throw new IllegalArgumentException("HTTP response may not be null");
59          }
60          HeaderElementIterator it = new BasicHeaderElementIterator(
61                  response.headerIterator(HTTP.CONN_KEEP_ALIVE));
62          while (it.hasNext()) {
63              HeaderElement he = it.nextElement();
64              String param = he.getName();
65              String value = he.getValue();
66              if (value != null && param.equalsIgnoreCase("timeout")) {
67                  try {
68                      return Long.parseLong(value) * 1000;
69                  } catch(NumberFormatException ignore) {
70                  }
71              }
72          }
73          return -1;
74      }
75  
76  }
77