From: <no...@so...> - 2009-04-24 15:29:54
|
Update of /cvsroot/ijbswa/current In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv905 Modified Files: jcc.c loadcfg.c loaders.c loaders.h project.h Log Message: Allow to limit the number of of client connections. Index: jcc.c =================================================================== RCS file: /cvsroot/ijbswa/current/jcc.c,v retrieving revision 1.244 retrieving revision 1.245 diff -u -d -r1.244 -r1.245 --- jcc.c 17 Apr 2009 11:34:34 -0000 1.244 +++ jcc.c 24 Apr 2009 15:29:43 -0000 1.245 @@ -33,6 +33,9 @@ * * Revisions : * $Log$ + * Revision 1.245 2009/04/24 15:29:43 fabiankeil + * Allow to limit the number of of client connections. + * * Revision 1.244 2009/04/17 11:34:34 fabiankeil * Style cosmetics for the IPv6 code. * @@ -4183,7 +4186,8 @@ { struct client_state *csp = NULL; jb_socket bfd; - struct configuration_spec * config; + struct configuration_spec *config; + unsigned int active_threads = 0; config = load_config(); @@ -4213,7 +4217,7 @@ /* * Free data that was used by died threads */ - sweep(); + active_threads = sweep(); #if defined(unix) /* @@ -4304,6 +4308,20 @@ } #endif /* def FEATURE_ACL */ + if ((0 != config->max_client_connections) + && (active_threads >= config->max_client_connections)) + { + log_error(LOG_LEVEL_CONNECT, + "Rejecting connection from %s. Maximum number of connections reached.", + csp->ip_addr_str); + write_socket(csp->cfd, TOO_MANY_CONNECTIONS_RESPONSE, + strlen(TOO_MANY_CONNECTIONS_RESPONSE)); + close_socket(csp->cfd); + freez(csp->ip_addr_str); + freez(csp); + continue; + } + /* add it to the list of clients */ csp->next = clients->next; clients->next = csp; Index: loadcfg.c =================================================================== RCS file: /cvsroot/ijbswa/current/loadcfg.c,v retrieving revision 1.97 retrieving revision 1.98 diff -u -d -r1.97 -r1.98 --- loadcfg.c 17 Apr 2009 11:45:19 -0000 1.97 +++ loadcfg.c 24 Apr 2009 15:29:43 -0000 1.98 @@ -35,6 +35,9 @@ * * Revisions : * $Log$ + * 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. @@ -647,6 +650,7 @@ #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" */ @@ -852,6 +856,7 @@ 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. */ config->feature_flags &= ~RUNTIME_FEATURE_CGI_TOGGLE; config->feature_flags &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS; @@ -1428,6 +1433,20 @@ 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]] * *************************************************************************/ #ifdef FEATURE_ACL Index: loaders.c =================================================================== RCS file: /cvsroot/ijbswa/current/loaders.c,v retrieving revision 1.71 retrieving revision 1.72 diff -u -d -r1.71 -r1.72 --- loaders.c 4 Mar 2009 18:24:47 -0000 1.71 +++ loaders.c 24 Apr 2009 15:29:43 -0000 1.72 @@ -35,6 +35,9 @@ * * Revisions : * $Log$ + * Revision 1.72 2009/04/24 15:29:43 fabiankeil + * Allow to limit the number of of client connections. + * * Revision 1.71 2009/03/04 18:24:47 fabiankeil * No need to create empty strings manually, strdup("") FTW. * @@ -453,14 +456,15 @@ * * Parameters : None * - * Returns : N/A + * Returns : The number of threads that are still active. * *********************************************************************/ -void sweep(void) +unsigned int sweep(void) { struct file_list *fl, *nfl; struct client_state *csp, *last_active; int i; + unsigned int active_threads = 0; /* clear all of the file's active flags */ for ( fl = files->next; NULL != fl; fl = fl->next ) @@ -515,10 +519,11 @@ csp->tlist->active = 1; } #endif /* def FEATURE_TRUST */ - + + active_threads++; + last_active = csp; csp = csp->next; - } else /* @@ -580,6 +585,8 @@ } } + return active_threads; + } Index: loaders.h =================================================================== RCS file: /cvsroot/ijbswa/current/loaders.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- loaders.h 30 Mar 2008 14:52:10 -0000 1.23 +++ loaders.h 24 Apr 2009 15:29:43 -0000 1.24 @@ -10,7 +10,7 @@ * the list of active loaders, and to automatically * unload files that are no longer in use. * - * Copyright : Written by and Copyright (C) 2001 the SourceForge + * Copyright : Written by and Copyright (C) 2001-2009 the * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -37,6 +37,9 @@ * * Revisions : * $Log$ + * Revision 1.24 2009/04/24 15:29:43 fabiankeil + * Allow to limit the number of of client connections. + * * Revision 1.23 2008/03/30 14:52:10 fabiankeil * Rename load_actions_file() and load_re_filterfile() * as they load multiple files "now". @@ -179,7 +182,7 @@ struct configuration_spec; struct url_spec; -extern void sweep(void); +extern unsigned int sweep(void); extern char *read_config_line(char *buf, size_t buflen, FILE *fp, unsigned long *linenum); extern int check_file_changed(const struct file_list * current, const char * filename, Index: project.h =================================================================== RCS file: /cvsroot/ijbswa/current/project.h,v retrieving revision 1.132 retrieving revision 1.133 diff -u -d -r1.132 -r1.133 --- project.h 17 Apr 2009 11:45:19 -0000 1.132 +++ project.h 24 Apr 2009 15:29:43 -0000 1.133 @@ -37,6 +37,9 @@ * * Revisions : * $Log$ + * Revision 1.133 2009/04/24 15:29:43 fabiankeil + * Allow to limit the number of of client connections. + * * Revision 1.132 2009/04/17 11:45:19 fabiankeil * Replace HAVE_GETADDRINFO and HAVE_GETNAMEINFO macros * with HAVE_RFC2553 macro. Original patch by Petr Pisar. @@ -1827,7 +1830,10 @@ struct forward_spec *forward; /** Number of retries in case a forwarded connection attempt fails */ - int forwarded_connect_retries; + int forwarded_connect_retries; + + /** Maximum number of client connections. */ + int max_client_connections; /* Timeout when waiting on sockets for data to become available. */ int socket_timeout; |