RFC 2616 is obsolete, update a comment in redirect_url()
[privoxy.git] / parsers.c
index b5644ef..6e66861 100644 (file)
--- a/parsers.c
+++ b/parsers.c
@@ -1,4 +1,4 @@
-const char parsers_rcs[] = "$Id: parsers.c,v 1.281 2013/12/24 13:34:22 fabiankeil Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.284 2014/02/10 14:42:42 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/parsers.c,v $
@@ -1277,7 +1277,7 @@ jb_err update_server_headers(struct client_state *csp)
  *********************************************************************/
 static jb_err header_tagger(struct client_state *csp, char *header)
 {
-   int wanted_filter_type;
+   enum filter_type wanted_filter_type;
    int multi_action_index;
    pcrs_job *job;
 
@@ -1455,7 +1455,7 @@ static jb_err filter_header(struct client_state *csp, char **header)
    struct re_filterfile_spec *b;
    struct list_entry *filtername;
 
-   int wanted_filter_type;
+   enum filter_type wanted_filter_type;
    int multi_action_index;
 
    if (csp->flags & CSP_FLAG_NO_FILTERING)
@@ -1735,7 +1735,7 @@ static jb_err proxy_authentication(struct client_state *csp, char **header)
 static jb_err client_keep_alive(struct client_state *csp, char **header)
 {
    unsigned int keep_alive_timeout;
-   const char *timeout_position = strstr(*header, ": ");
+   char *timeout_position;
 
    if (!(csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE))
    {
@@ -1745,29 +1745,41 @@ static jb_err client_keep_alive(struct client_state *csp, char **header)
       return JB_ERR_OK;
    }
 
+   /* Check for parameter-less format "Keep-Alive: 100" */
+   timeout_position = strstr(*header, ": ");
    if ((NULL == timeout_position)
     || (1 != sscanf(timeout_position, ": %u", &keep_alive_timeout)))
    {
-      log_error(LOG_LEVEL_ERROR, "Couldn't parse: %s", *header);
-   }
-   else
-   {
-      if (keep_alive_timeout < csp->config->keep_alive_timeout)
-      {
-         log_error(LOG_LEVEL_HEADER,
-            "Reducing keep-alive timeout from %u to %u.",
-            csp->config->keep_alive_timeout, keep_alive_timeout);
-         csp->server_connection.keep_alive_timeout = keep_alive_timeout;
-      }
-      else
+      /* Assume parameter format "Keep-Alive: timeout=100" */
+      timeout_position = strstr(*header, "timeout=");
+      if ((NULL == timeout_position)
+         || (1 != sscanf(timeout_position, "timeout=%u", &keep_alive_timeout)))
       {
-         /* XXX: Is this log worthy? */
          log_error(LOG_LEVEL_HEADER,
-            "Client keep-alive timeout is %u. Sticking with %u.",
-            keep_alive_timeout, csp->config->keep_alive_timeout);
+            "Couldn't parse: '%s'. Using default timeout %u",
+            *header, csp->config->keep_alive_timeout);
+         freez(*header);
+
+         return JB_ERR_OK;
       }
    }
 
+   if (keep_alive_timeout < csp->config->keep_alive_timeout)
+   {
+      log_error(LOG_LEVEL_HEADER,
+         "Reducing keep-alive timeout from %u to %u.",
+         csp->config->keep_alive_timeout, keep_alive_timeout);
+      csp->server_connection.keep_alive_timeout = keep_alive_timeout;
+   }
+   else
+   {
+      /* XXX: Is this log worthy? */
+      log_error(LOG_LEVEL_HEADER,
+         "Client keep-alive timeout is %u. Sticking with %u.",
+         keep_alive_timeout, csp->config->keep_alive_timeout);
+      freez(*header);
+   }
+
    return JB_ERR_OK;
 }