-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.94 2009/04/17 11:27:49 fabiankeil Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.98 2009/04/24 15:29:43 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/loadcfg.c,v $
*
* Revisions :
* $Log: loadcfg.c,v $
+ * Revision 1.98 2009/04/24 15:29:43 fabiankeil
+ * Allow to limit the number of of client connections.
+ *
+ * Revision 1.97 2009/04/17 11:45:19 fabiankeil
+ * Replace HAVE_GETADDRINFO and HAVE_GETNAMEINFO macros
+ * with HAVE_RFC2553 macro. Original patch by Petr Pisar.
+ *
+ * Revision 1.96 2009/04/17 11:38:28 fabiankeil
+ * Add and use parse_forwarder_address() to reduce code duplication.
+ *
+ * Revision 1.95 2009/04/17 11:34:34 fabiankeil
+ * Style cosmetics for the IPv6 code.
+ *
* Revision 1.94 2009/04/17 11:27:49 fabiankeil
* Petr Pisar's privoxy-3.0.12-ipv6-3.diff.
*
#define hash_listen_address 1255650842ul /* "listen-address" */
#define hash_logdir 422889ul /* "logdir" */
#define hash_logfile 2114766ul /* "logfile" */
+#define hash_max_client_connections 3595884446ul /* "max-client-connections" */
#define hash_permit_access 3587953268ul /* "permit-access" */
#define hash_proxy_info_url 3903079059ul /* "proxy-info-url" */
#define hash_single_threaded 4250084780ul /* "single-threaded" */
unsigned long linenum = 0;
int i;
char *logfile = NULL;
-#ifdef FEATURE_CONNECTION_KEEP_ALIVE
- int keep_alive_timeout = DEFAULT_KEEP_ALIVE_TIMEOUT;
-#endif
if (!check_file_changed(current_configfile, configfile, &fs))
{
config->usermanual = strdup(USER_MANUAL_URL);
config->proxy_args = strdup("");
config->forwarded_connect_retries = 0;
+ config->max_client_connections = 0;
config->socket_timeout = 300; /* XXX: Should be a macro. */
+#ifdef FEATURE_CONNECTION_KEEP_ALIVE
+ config->keep_alive_timeout = DEFAULT_KEEP_ALIVE_TIMEOUT;
+ config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;
+#endif
config->feature_flags &= ~RUNTIME_FEATURE_CGI_TOGGLE;
config->feature_flags &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS;
config->feature_flags &= ~RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;
break;
}
}
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_RFC2553
else
{
cur_acl->wildcard_dst = 1;
}
-#endif /* def HAVE_GETADDRINFO */
+#endif /* def HAVE_RFC2553 */
/*
* Add it to the list. Note we reverse the list to get the
if (strcmp(p, ".") != 0)
{
- cur_fwd->forward_host = strdup(p);
-
- if ((*cur_fwd->forward_host == '[')
- && (NULL != (p = strchr(cur_fwd->forward_host, ']'))))
- {
- *p++ = '\0';
- memmove(cur_fwd->forward_host, cur_fwd->forward_host + 1,
- (size_t)(p - cur_fwd->forward_host));
- if (*p == ':')
- {
- cur_fwd->forward_port = atoi(++p);
- }
- }
- else if (NULL != (p = strchr(cur_fwd->forward_host, ':')))
- {
- *p++ = '\0';
- cur_fwd->forward_port = atoi(p);
- }
-
- if (cur_fwd->forward_port <= 0)
- {
- cur_fwd->forward_port = 8000;
- }
+ cur_fwd->forward_port = 8000;
+ parse_forwarder_address(p, &cur_fwd->forward_host,
+ &cur_fwd->forward_port);
}
/* Add to list. */
/* Parse the SOCKS proxy host[:port] */
p = vec[1];
+ /* XXX: This check looks like a bug. */
if (strcmp(p, ".") != 0)
{
- cur_fwd->gateway_host = strdup(p);
-
- if ((*cur_fwd->gateway_host == '[')
- && (NULL != (p = strchr(cur_fwd->gateway_host, ']'))))
- {
- *p++ = '\0';
- memmove(cur_fwd->gateway_host, cur_fwd->gateway_host + 1,
- (size_t)(p - cur_fwd->gateway_host));
- if (*p == ':')
- {
- cur_fwd->gateway_port = atoi(++p);
- }
- }
- else if (NULL != (p = strchr(cur_fwd->gateway_host, ':')))
- {
- *p++ = '\0';
- cur_fwd->gateway_port = atoi(p);
- }
-
- if (cur_fwd->gateway_port <= 0)
- {
- cur_fwd->gateway_port = 1080;
- }
+ cur_fwd->gateway_port = 1080;
+ parse_forwarder_address(p, &cur_fwd->gateway_host,
+ &cur_fwd->gateway_port);
}
/* Parse the parent HTTP proxy host[:port] */
if (strcmp(p, ".") != 0)
{
- cur_fwd->forward_host = strdup(p);
-
- if ((*cur_fwd->forward_host == '[')
- && (NULL != (p = strchr(cur_fwd->forward_host, ']'))))
- {
- *p++ = '\0';
- memmove(cur_fwd->forward_host, cur_fwd->forward_host + 1,
- (size_t)(p - cur_fwd->forward_host));
- if (*p == ':')
- {
- cur_fwd->forward_port = atoi(++p);
- }
- }
- else if (NULL != (p = strchr(cur_fwd->forward_host, ':')))
- {
- *p++ = '\0';
- cur_fwd->forward_port = atoi(p);
- }
-
- if (cur_fwd->forward_port <= 0)
- {
- cur_fwd->forward_port = 8000;
- }
+ cur_fwd->forward_port = 8000;
+ parse_forwarder_address(p, &cur_fwd->forward_host,
+ &cur_fwd->forward_port);
}
/* Add to list. */
/* Parse the SOCKS proxy host[:port] */
p = vec[1];
- cur_fwd->gateway_host = strdup(p);
-
- if ((*cur_fwd->gateway_host == '[')
- && (NULL != (p = strchr(cur_fwd->gateway_host, ']'))))
- {
- *p++ = '\0';
- memmove(cur_fwd->gateway_host, cur_fwd->gateway_host + 1,
- (size_t)(p - cur_fwd->gateway_host));
- if (*p == ':')
- {
- cur_fwd->gateway_port = atoi(++p);
- }
- }
- else if (NULL != (p = strchr(cur_fwd->gateway_host, ':')))
- {
- *p++ = '\0';
- cur_fwd->gateway_port = atoi(p);
- }
-
- if (cur_fwd->gateway_port <= 0)
- {
- cur_fwd->gateway_port = 1080;
- }
+ cur_fwd->gateway_port = 1080;
+ parse_forwarder_address(p, &cur_fwd->gateway_host,
+ &cur_fwd->gateway_port);
/* Parse the parent HTTP proxy host[:port] */
p = vec[2];
if (strcmp(p, ".") != 0)
{
- cur_fwd->forward_host = strdup(p);
-
- if (*cur_fwd->forward_host == '[' &&
- NULL != (p = strchr(cur_fwd->forward_host, ']')))
- {
- *p++ = '\0';
- memmove(cur_fwd->forward_host, cur_fwd->forward_host + 1,
- (size_t) (p - cur_fwd->forward_host));
- if (*p == ':')
- {
- cur_fwd->forward_port = atoi(++p);
- }
- }
- else if (NULL != (p = strchr(cur_fwd->forward_host, ':')))
- {
- *p++ = '\0';
- cur_fwd->forward_port = atoi(p);
- }
-
- if (cur_fwd->forward_port <= 0)
- {
- cur_fwd->forward_port = 8000;
- }
+ cur_fwd->forward_port = 8000;
+ parse_forwarder_address(p, &cur_fwd->forward_host,
+ &cur_fwd->forward_port);
}
/* Add to list. */
if (0 <= timeout)
{
config->feature_flags |= RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;
- keep_alive_timeout = timeout;
+ config->keep_alive_timeout = timeout;
}
else
{
}
break;
+/* *************************************************************************
+ * max-client-connections number
+ * *************************************************************************/
+ case hash_max_client_connections :
+ if (*arg != '\0')
+ {
+ int max_client_connections = atoi(arg);
+ if (0 <= max_client_connections)
+ {
+ config->max_client_connections = max_client_connections;
+ }
+ }
+ break;
+
/* *************************************************************************
* permit-access source-ip[/significant-bits] [dest-ip[/significant-bits]]
* *************************************************************************/
break;
}
}
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_RFC2553
else
{
cur_acl->wildcard_dst = 1;
}
-#endif /* def HAVE_GETADDRINFO */
+#endif /* def HAVE_RFC2553 */
/*
* Add it to the list. Note we reverse the list to get the
{
if (config->multi_threaded)
{
- set_keep_alive_timeout(keep_alive_timeout);
+ set_keep_alive_timeout(config->keep_alive_timeout);
}
else
{
* if we didn't bother with enforcing the connection timeout,
* that might make Tor users sad, even though they shouldn't
* enable the single-threaded option anyway.
+ *
+ * XXX: We could still use Proxy-Connection: keep-alive.
*/
config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;
log_error(LOG_LEVEL_ERROR,