X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=project.h;h=0fab7ff07522d39d0563f789f756ae341f154504;hp=b0e969b30f7594b559e7998899159088e7036067;hb=e734bb1389aaa25ccc30da467aa439a9b00f9973;hpb=67dc63e456924d619a60bd737bf5376835d29de7 diff --git a/project.h b/project.h index b0e969b3..0fab7ff0 100644 --- 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.128 2009/03/07 13:09:17 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.133 2009/04/24 15:29:43 fabiankeil Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -37,6 +37,22 @@ * * Revisions : * $Log: project.h,v $ + * 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. + * + * Revision 1.131 2009/04/17 11:34:35 fabiankeil + * Style cosmetics for the IPv6 code. + * + * Revision 1.130 2009/04/17 11:27:49 fabiankeil + * Petr Pisar's privoxy-3.0.12-ipv6-3.diff. + * + * Revision 1.129 2009/03/08 14:12:51 fabiankeil + * All the CSP_FLAG_FOO bit masks should be unsigned ints. + * * Revision 1.128 2009/03/07 13:09:17 fabiankeil * Change csp->expected_content and_csp->expected_content_length from * size_t to unsigned long long to reduce the likelihood of integer @@ -707,6 +723,12 @@ /* Needed for pcre choice */ #include "config.h" +#ifdef HAVE_RFC2553 +/* Need for struct sockaddr_storage */ +#include +#endif + + /* * Include appropriate regular expression libraries. * Note that pcrs and pcre (native) are needed for cgi @@ -858,16 +880,10 @@ typedef int jb_err; #define FOREVER 1 /** - * Default IP address to listen on, as a string. - * Set to "127.0.0.1". + * Default TCP/IP address to listen on, as a string. + * Set to "127.0.0.1:8118". */ -#define HADDR_DEFAULT "127.0.0.1" - -/** - * Default port to listen on, as a number. - * Set to 8118. - */ -#define HADDR_PORT 8118 +#define HADDR_DEFAULT "127.0.0.1:8118" /* Forward def for struct client_state */ @@ -1288,6 +1304,26 @@ struct url_actions }; +/* + * Structure to make sure we only reuse the server socket + * if the host and forwarding settings are the same. + */ +struct reusable_connection +{ + jb_socket sfd; + int in_use; + time_t timestamp; + + char *host; + int port; + int forwarder_type; + char *gateway_host; + int gateway_port; + char *forward_host; + int forward_port; +}; + + /* * Flags for use in csp->flags */ @@ -1327,15 +1363,15 @@ struct url_actions /** * Flag for csp->flags: Set if an acceptable Connection header - * is already set. + * has already been set by the client. */ #define CSP_FLAG_CLIENT_CONNECTION_HEADER_SET 0x00000040U /** - * Flag for csp->flags: Set if adding the 'Connection: close' header - * for the server isn't necessary. + * Flag for csp->flags: Set if an acceptable Connection header + * has already been set by the server. */ -#define CSP_FLAG_SERVER_CONNECTION_CLOSE_SET 0x00000080U +#define CSP_FLAG_SERVER_CONNECTION_HEADER_SET 0x00000080U /** * Flag for csp->flags: Signals header parsers whether they @@ -1374,6 +1410,12 @@ struct url_actions * content length. */ #define CSP_FLAG_CONTENT_LENGTH_SET 0x00002000U + +/** + * Flag for csp->flags: Set if the client wants to keep + * the connection alive. + */ +#define CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE 0x00004000U #endif /* def FEATURE_CONNECTION_KEEP_ALIVE */ /* @@ -1415,15 +1457,24 @@ struct client_state /** socket to talk to server (web server or proxy) */ jb_socket sfd; + /** current connection to the server (may go through a proxy) */ + struct reusable_connection server_connection; + /** Multi-purpose flag container, see CSP_FLAG_* above */ unsigned int flags; /** Client PC's IP address, as reported by the accept() function. As a string. */ char *ip_addr_str; +#ifdef HAVE_RFC2553 + /** Client PC's TCP address, as reported by the accept() function. + As a sockaddr. */ + struct sockaddr_storage tcp_addr; +#else /** Client PC's IP address, as reported by the accept() function. As a number. */ unsigned long ip_addr_long; +#endif /* def HAVE_RFC2553 */ /** The URL that was requested */ struct http_request http[1]; @@ -1657,9 +1708,14 @@ struct re_filterfile_spec */ struct access_control_addr { +#ifdef HAVE_RFC2553 + struct sockaddr_storage addr; /*