Add the config option default-server-timeout to control the assumed default server...
authorFabian Keil <fk@fabiankeil.de>
Fri, 27 Nov 2009 13:46:47 +0000 (13:46 +0000)
committerFabian Keil <fk@fabiankeil.de>
Fri, 27 Nov 2009 13:46:47 +0000 (13:46 +0000)
Since Privoxy no longer returns an error message for connection
resets on reused client connections, assuming larger server timeout
values appears to actually work pretty well as long as connections
aren't shared.

jcc.c
loadcfg.c
project.h

diff --git a/jcc.c b/jcc.c
index a1f0966..7cfa56d 100644 (file)
--- a/jcc.c
+++ b/jcc.c
@@ -1,4 +1,4 @@
-const char jcc_rcs[] = "$Id: jcc.c,v 1.302 2009/10/09 16:50:50 fabiankeil Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.303 2009/10/29 16:55:29 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jcc.c,v $
@@ -2518,19 +2518,23 @@ static void serve(struct client_state *csp)
          && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)
          && (csp->cfd != JB_INVALID_SOCKET)
          && (csp->server_connection.sfd != JB_INVALID_SOCKET)
-         && socket_is_still_usable(csp->server_connection.sfd)
-         && (latency < csp->server_connection.keep_alive_timeout);
+         && socket_is_still_usable(csp->server_connection.sfd);
 
       if (continue_chatting)
       {
-         unsigned int client_timeout;
-
          if (!(csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET))
          {
-            log_error(LOG_LEVEL_CONNECT, "The server didn't specify how long "
-               "the connection will stay open. Assume it's only a second.");
-            csp->server_connection.keep_alive_timeout = 1;
+            csp->server_connection.keep_alive_timeout = csp->config->default_server_timeout;
+            log_error(LOG_LEVEL_CONNECT,
+               "The server didn't specify how long the connection will stay open. "
+               "Assumed timeout is: %u.", csp->server_connection.keep_alive_timeout);
          }
+         continue_chatting = (latency < csp->server_connection.keep_alive_timeout);
+      }
+
+      if (continue_chatting)
+      {
+         unsigned int client_timeout;
 
          client_timeout = (unsigned)csp->server_connection.keep_alive_timeout - latency;
 
index fc6b557..33e331e 100644 (file)
--- a/loadcfg.c
+++ b/loadcfg.c
@@ -1,4 +1,4 @@
-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.105 2009/09/06 14:15:46 fabiankeil Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.106 2009/09/10 14:45:17 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.c,v $
@@ -136,6 +136,7 @@ static struct file_list *current_configfile = NULL;
 #define hash_confdir                        1978389ul /* "confdir" */
 #define hash_connection_sharing          1348841265ul /* "connection-sharing" */
 #define hash_debug                            78263ul /* "debug" */
+#define hash_default_server_timeout      2530089913ul /* "default-server-timeout" */
 #define hash_deny_access                 1227333715ul /* "deny-access" */
 #define hash_enable_edit_actions         2517097536ul /* "enable-edit-actions" */
 #define hash_enable_remote_toggle        2979744683ul /* "enable-remote-toggle" */
@@ -358,6 +359,7 @@ struct configuration_spec * load_config(void)
    config->max_client_connections    = 0;
    config->socket_timeout            = 300; /* XXX: Should be a macro. */
 #ifdef FEATURE_CONNECTION_KEEP_ALIVE
+   config->default_server_timeout    = 0;
    config->keep_alive_timeout        = DEFAULT_KEEP_ALIVE_TIMEOUT;
    config->feature_flags            &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;
    config->feature_flags            &= ~RUNTIME_FEATURE_CONNECTION_SHARING;
@@ -521,6 +523,27 @@ struct configuration_spec * load_config(void)
             config->debug |= atoi(arg);
             break;
 
+/* *************************************************************************
+ * default-server-timeout timeout
+ * *************************************************************************/
+#ifdef FEATURE_CONNECTION_KEEP_ALIVE
+         case hash_default_server_timeout :
+            if (*arg != '\0')
+            {
+               int timeout = atoi(arg);
+               if (0 < timeout)
+               {
+                  config->default_server_timeout = (unsigned int)timeout;
+               }
+               else
+               {
+                  log_error(LOG_LEVEL_FATAL,
+                     "Invalid default-server-timeout value: %s", arg);
+               }
+            }
+            break;
+#endif
+
 /* *************************************************************************
  * deny-access source-ip[/significant-bits] [dest-ip[/significant-bits]]
  * *************************************************************************/
@@ -1321,6 +1344,16 @@ struct configuration_spec * load_config(void)
       }
    }
 
+#ifdef FEATURE_CONNECTION_KEEP_ALIVE
+   if (config->default_server_timeout > config->keep_alive_timeout)
+   {
+      log_error(LOG_LEVEL_ERROR,
+         "Reducing the default-server-timeout from %d to the keep-alive-timeout %d.",
+         config->default_server_timeout, config->keep_alive_timeout);
+      config->default_server_timeout = config->keep_alive_timeout;
+   }
+#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
+
 #ifdef FEATURE_CONNECTION_SHARING
    if (config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)
    {
index 5eab88f..ae80b49 100644 (file)
--- a/project.h
+++ b/project.h
@@ -1,7 +1,7 @@
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
 /** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 1.151 2009/10/04 15:45:11 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.152 2009/11/08 17:54:09 ler762 Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
@@ -1257,6 +1257,9 @@ struct configuration_spec
 #ifdef FEATURE_CONNECTION_KEEP_ALIVE
    /* Maximum number of seconds after which an open connection will no longer be reused. */
    unsigned int keep_alive_timeout;
+
+   /* Assumed server-side keep alive timeout if none is specified. */
+   unsigned int default_server_timeout;
 #endif
 
    /** All options from the config file, HTML-formatted. */