X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=project.h;h=8e0e9372dc81f2f06fb0c2a895b00e7bc6b58c66;hp=62b9503213e06451e8914f1f3dfcb8928e477522;hb=74c6330838b7b06fb29fc7ead87f49e3f13f1bf2;hpb=83171b7de14d99f3a213eec0192ba86ff71f9a72 diff --git a/project.h b/project.h index 62b95032..8e0e9372 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.188 2012/10/21 12:56:38 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.199 2013/11/24 14:23:28 fabiankeil Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -108,10 +108,6 @@ #endif -#ifdef __cplusplus -extern "C" { -#endif - #ifdef _WIN32 typedef SOCKET jb_socket; @@ -335,7 +331,6 @@ enum crunch_reason */ struct http_response { - enum crunch_reason crunch_reason; /**< Why the response was generated in the first place. */ char *status; /**< HTTP status (string). */ struct list headers[1]; /**< List of header lines. */ char *head; /**< Formatted http response head. */ @@ -344,17 +339,11 @@ struct http_response size_t content_length; /**< Length of body, REQUIRED if binary body. */ int is_static; /**< Nonzero if the content will never change and should be cached by the browser (e.g. images). */ + enum crunch_reason crunch_reason; /**< Why the response was generated in the first place. */ }; -/** - * A URL or a tag pattern. - */ struct url_spec { - /** The string which was parsed to produce this url_spec. - Used for debugging or display only. */ - char *spec; - #ifdef FEATURE_EXTENDED_HOST_PATTERNS regex_t *host_regex;/**< Regex for host matching */ #else @@ -367,17 +356,25 @@ struct url_spec char *port_list; /**< List of acceptable ports, or NULL to match all ports */ regex_t *preg; /**< Regex for matching path part */ - regex_t *tag_regex; /**< Regex for matching tags */ }; /** - * If you declare a static url_spec, this is the value to initialize it to zero. + * A URL or a tag pattern. */ -#ifndef FEATURE_EXTENDED_HOST_PATTERNS -#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, 0, 0, NULL, NULL, NULL } -#else -#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, NULL, NULL } -#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */ +struct pattern_spec +{ + /** The string which was parsed to produce this pattern_spec. + Used for debugging or display only. */ + char *spec; + + union + { + struct url_spec url_spec; + regex_t *tag_regex; + } pattern; + + unsigned int flags; /**< Bitmap with various pattern properties. */ +}; /** * Constant for host part matching in URLs. If set, indicates that the start of @@ -396,6 +393,17 @@ struct url_spec */ #define ANCHOR_RIGHT 2 +/** Pattern spec bitmap: It's an URL pattern. */ +#define PATTERN_SPEC_URL_PATTERN 0x00000001UL + +/** Pattern spec bitmap: It's a TAG pattern. */ +#define PATTERN_SPEC_TAG_PATTERN 0x00000002UL + +/** Pattern spec bitmap: It's a NO-REQUEST-TAG pattern. */ +#define PATTERN_SPEC_NO_REQUEST_TAG_PATTERN 0x00000004UL + +/** Pattern spec bitmap: It's a NO-RESPONSE-TAG pattern. */ +#define PATTERN_SPEC_NO_RESPONSE_TAG_PATTERN 0x00000008UL /** * An I/O buffer. Holds a string which can be appended to, and can have data @@ -500,6 +508,8 @@ struct iob #define ACTION_OVERWRITE_LAST_MODIFIED 0x02000000UL /** Action bitmap: Replace or block Accept-Language header */ #define ACTION_HIDE_ACCEPT_LANGUAGE 0x04000000UL +/** Action bitmap: Limit the cookie lifetime */ +#define ACTION_LIMIT_COOKIE_LIFETIME 0x08000000UL /** Action string index: How to deanimate GIFs */ @@ -538,8 +548,10 @@ struct iob #define ACTION_STRING_BLOCK 16 /** Action string index: what to do with the "X-Forwarded-For" header. */ #define ACTION_STRING_CHANGE_X_FORWARDED_FOR 17 +/** Action string index: how many minutes cookies should be valid. */ +#define ACTION_STRING_LIMIT_COOKIE_LIFETIME 18 /** Number of string actions. */ -#define ACTION_STRING_COUNT 18 +#define ACTION_STRING_COUNT 19 /* To make the ugly hack in sed easier to understand */ @@ -623,7 +635,7 @@ struct action_spec */ struct url_actions { - struct url_spec url[1]; /**< The URL or tag pattern. */ + struct pattern_spec url[1]; /**< The URL or tag pattern. */ struct action_spec *action; /**< Action settings that might be shared with the list entry before or after the current @@ -641,6 +653,8 @@ enum forwarder_type { SOCKS_4A = 41, /**< SOCKS 5 with hostnames, DNS resolution is done by the SOCKS server */ SOCKS_5 = 50, + /**< Like SOCKS5, but uses non-standard Tor extensions (currently only optimistic data) */ + SOCKS_5T, }; /* @@ -763,7 +777,6 @@ struct reusable_connection */ #define CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE 0x00001000U -#ifdef FEATURE_CONNECTION_KEEP_ALIVE /** * Flag for csp->flags: Set if the server specified the * content length. @@ -797,8 +810,6 @@ struct reusable_connection */ #define CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET 0x00020000U -#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */ - /** * Flag for csp->flags: Set if we think we can't reuse * the server socket. XXX: It's also set after sabotaging @@ -835,6 +846,12 @@ struct reusable_connection */ #define CSP_FLAG_PIPELINED_REQUEST_WAITING 0x00800000U +/** + * Flag for csp->flags: Set if the client body is chunk-encoded + */ +#define CSP_FLAG_CHUNKED_CLIENT_BODY 0x01000000U + + /* * Flags for use in return codes of child processes */ @@ -855,7 +872,7 @@ struct reusable_connection * Maximum number of actions/filter files. This limit is arbitrary - it's just used * to size an array. */ -#define MAX_AF_FILES 10 +#define MAX_AF_FILES 30 /** * Maximum number of sockets to listen to. This limit is arbitrary - it's just used @@ -877,6 +894,9 @@ struct client_state /** socket to talk to client (web browser) */ jb_socket cfd; + /** Number of requests received on the client socket. */ + unsigned int requests_received_total; + /** current connection to the server (may go through a proxy) */ struct reusable_connection server_connection; @@ -931,7 +951,6 @@ struct client_state /** Length after content modification. */ unsigned long long content_length; -#ifdef FEATURE_CONNECTION_KEEP_ALIVE /* XXX: is this the right location? */ /** Expected length of content after which we @@ -943,7 +962,6 @@ struct client_state * should stop reading from the client socket. */ unsigned long long expected_client_content_length; -#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */ #ifdef FEATURE_TRUST @@ -1054,9 +1072,9 @@ struct file_list */ struct block_spec { - struct url_spec url[1]; /**< The URL pattern */ - int reject; /**< FIXME: Please document this! */ - struct block_spec *next; /**< Next entry in linked list */ + struct pattern_spec url[1]; /**< The URL pattern */ + int reject; /**< FIXME: Please document this! */ + struct block_spec *next; /**< Next entry in linked list */ }; /** @@ -1072,7 +1090,7 @@ struct block_spec struct forward_spec { /** URL pattern that this forward_spec is for. */ - struct url_spec url[1]; + struct pattern_spec url[1]; /** Connection type. Must be SOCKS_NONE, SOCKS_4, SOCKS_4A or SOCKS_5. */ enum forwarder_type type; @@ -1094,11 +1112,6 @@ struct forward_spec }; -/** - * Initializer for a static struct forward_spec. - */ -#define FORWARD_SPEC_INITIALIZER { { URL_SPEC_INITIALIZER }, 0, NULL, 0, NULL, 0, NULL } - /* Supported filter types */ enum filter_type { @@ -1210,6 +1223,9 @@ struct access_control_list /** configuration_spec::feature_flags: Pipelined requests are served instead of being discarded. */ #define RUNTIME_FEATURE_TOLERATE_PIPELINING 2048U +/** configuration_spec::feature_flags: Proxy authentication headers are forwarded instead of removed. */ +#define RUNTIME_FEATURE_FORWARD_PROXY_AUTHENTICATION_HEADERS 4096U + /** * Data loaded from the configuration file. * @@ -1297,7 +1313,7 @@ struct configuration_spec struct list trust_info[1]; /** FIXME: DOCME: Document this. */ - struct url_spec *trust_list[MAX_TRUSTED_REFERRERS]; + struct pattern_spec *trust_list[MAX_TRUSTED_REFERRERS]; #endif /* def FEATURE_TRUST */ @@ -1396,10 +1412,6 @@ struct configuration_spec */ #define CGI_PREFIX "http://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/" -#ifdef __cplusplus -} /* extern "C" */ -#endif - #endif /* ndef PROJECT_H_INCLUDED */ /*