X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=project.h;h=7b93815793249c0a6c2d1375364b6f33e8b06397;hp=fdf153cbb91c4d321de3de512071744ff15d1d0a;hb=b3f9d0eb4c03061a76932ef485bd6202f18778a1;hpb=52703c962a31558d8de81df2748bdd450a66d534 diff --git a/project.h b/project.h index fdf153cb..7b938157 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.156 2010/05/24 11:38:22 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.171 2011/09/04 11:10:56 fabiankeil Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -46,9 +46,17 @@ /* Needed for pcre choice */ #include "config.h" -#ifdef HAVE_RFC2553 /* Need for struct sockaddr_storage */ -#include +#ifdef HAVE_RFC2553 +# ifndef _WIN32 +# include +# include +# else +# include +# include +# include + typedef unsigned short in_port_t; +# endif #endif @@ -140,7 +148,7 @@ typedef int jb_err; #define JB_ERR_CGI_PARAMS 2 /**< Missing or corrupt CGI parameters */ #define JB_ERR_FILE 3 /**< Error opening, reading or writing a file */ #define JB_ERR_PARSE 4 /**< Error parsing file */ -#define JB_ERR_MODIFIED 5 /**< File has been modified outside of the +#define JB_ERR_MODIFIED 5 /**< File has been modified outside of the CGI actions editor. */ #define JB_ERR_COMPRESS 6 /**< Error on decompression */ @@ -163,9 +171,10 @@ typedef int jb_err; * * Note: Remember to #include if you use these macros. */ +#define ijb_isupper(__X) isupper((int)(unsigned char)(__X)) #define ijb_toupper(__X) toupper((int)(unsigned char)(__X)) #define ijb_tolower(__X) tolower((int)(unsigned char)(__X)) -#define ijb_isspace(__X) isspace((int)(unsigned char)(__X)) +#define ijb_isspace(__X) isspace((int)(unsigned char)(__X)) /** * Use for statically allocated buffers if you have no other choice. @@ -183,7 +192,7 @@ typedef int jb_err; * Buffer size for capturing struct hostent data in the * gethostby(name|addr)_r library calls. Since we don't * loop over gethostbyname_r, the buffer must be sufficient - * to accomodate multiple IN A RRs, as used in DNS round robin + * to accommodate multiple IN A RRs, as used in DNS round robin * load balancing. W3C's wwwlib uses 1K, so that should be * good enough for us, too. */ @@ -225,7 +234,7 @@ struct list_entry * your own code. */ char *str; - + /** Next entry in the linked list, or NULL if no more. */ struct list_entry *next; }; @@ -495,7 +504,7 @@ struct iob #define ACTION_FORCE_TEXT_MODE 0x00400000UL /** Action bitmap: Enable text mode by force */ #define ACTION_CRUNCH_IF_NONE_MATCH 0x00800000UL -/** Action bitmap: Enable content-dispostion crunching */ +/** Action bitmap: Enable content-disposition crunching */ #define ACTION_HIDE_CONTENT_DISPOSITION 0x01000000UL /** Action bitmap: Replace or block Last-Modified header */ #define ACTION_OVERWRITE_LAST_MODIFIED 0x02000000UL @@ -523,7 +532,7 @@ struct iob #define ACTION_STRING_LANGUAGE 8 /** Action string index: Replacement for the "Content-Type:" header*/ #define ACTION_STRING_CONTENT_TYPE 9 -/** Action string index: Replacement for the "content-dispostion:" header*/ +/** Action string index: Replacement for the "content-disposition:" header*/ #define ACTION_STRING_CONTENT_DISPOSITION 10 /** Action string index: Replacement for the "If-Modified-Since:" header*/ #define ACTION_STRING_IF_MODIFIED_SINCE 11 @@ -667,7 +676,7 @@ struct reusable_connection /* * Flags for use in csp->flags */ - + /** * Flag for csp->flags: Set if this client is processing data. * Cleared when the thread associated with this structure dies. @@ -757,7 +766,7 @@ struct reusable_connection #define CSP_FLAG_SERVER_CONTENT_LENGTH_SET 0x00002000U /** - * Flag for csp->flags: Set if we know the content lenght, + * Flag for csp->flags: Set if we know the content length, * either because the server set it, or we figured it out * on our own. */ @@ -802,6 +811,17 @@ struct reusable_connection */ #define CSP_FLAG_REUSED_CLIENT_CONNECTION 0x00100000U +/** + * Flag for csp->flags: Set if the supports deflate compression. + */ +#define CSP_FLAG_CLIENT_SUPPORTS_DEFLATE 0x00200000U + +/** + * Flag for csp->flags: Set if the content has been deflated by Privoxy + */ +#define CSP_FLAG_BUFFERED_CONTENT_DEFLATED 0x00400000U + + /* * Flags for use in return codes of child processes */ @@ -824,6 +844,12 @@ struct reusable_connection */ #define MAX_AF_FILES 10 +/** + * Maximum number of sockets to listen to. This limit is arbitrary - it's just used + * to size an array. + */ +#define MAX_LISTENING_SOCKETS 10 + /** * The state of a Privoxy processing thread. */ @@ -914,11 +940,17 @@ struct client_state * or NULL. Currently only used for socks errors. */ char *error_message; - - /** Next thread in linked list. Only read or modify from the main thread! */ - struct client_state *next; }; +/** + * List of client states so the main thread can keep + * track of them and garbage collect their resources. + */ +struct client_states +{ + struct client_states *next; + struct client_state csp; +}; /** * A function to add a header @@ -981,7 +1013,7 @@ struct file_list * Read-only once the structure has been created. */ time_t lastmodified; - + /** * The full filename. */ @@ -1017,12 +1049,16 @@ struct block_spec #endif /* def FEATURE_TRUST */ - -#define SOCKS_NONE 0 /**< Don't use a SOCKS server */ -#define SOCKS_4 40 /**< original SOCKS 4 protocol */ -#define SOCKS_4A 41 /**< as modified for hosts w/o external DNS */ -#define SOCKS_5 50 /**< as modified for hosts w/o external DNS */ - +enum forwarder_type { + /**< Don't use a SOCKS server */ + SOCKS_NONE = 0, + /**< original SOCKS 4 protocol */ + SOCKS_4 = 40, + /**< SOCKS 4A, DNS resolution is done by the SOCKS server */ + SOCKS_4A = 41, + /**< SOCKS 5 with hostnames, DNS resolution is done by the SOCKS server */ + SOCKS_5 = 50, +}; /** * How to forward a connection to a parent proxy. @@ -1033,7 +1069,7 @@ struct forward_spec struct url_spec url[1]; /** Connection type. Must be SOCKS_NONE, SOCKS_4, SOCKS_4A or SOCKS_5. */ - int type; + enum forwarder_type type; /** SOCKS server hostname. Only valid if "type" is SOCKS_4 or SOCKS_4A. */ char *gateway_host; @@ -1058,12 +1094,14 @@ struct forward_spec #define FORWARD_SPEC_INITIALIZER { { URL_SPEC_INITIALIZER }, 0, NULL, 0, NULL, 0, NULL } /* Supported filter types */ -#define FT_CONTENT_FILTER 0 -#define FT_CLIENT_HEADER_FILTER 1 -#define FT_SERVER_HEADER_FILTER 2 -#define FT_CLIENT_HEADER_TAGGER 3 -#define FT_SERVER_HEADER_TAGGER 4 - +enum filter_type +{ + FT_CONTENT_FILTER = 0, + FT_CLIENT_HEADER_FILTER = 1, + FT_SERVER_HEADER_FILTER = 2, + FT_CLIENT_HEADER_TAGGER = 3, + FT_SERVER_HEADER_TAGGER = 4, +}; #define MAX_FILTER_TYPES 5 /** @@ -1078,7 +1116,7 @@ struct re_filterfile_spec char *description; /**< Description from FILTER: statement in re_filterfile. */ struct list patterns[1]; /**< The patterns from the re_filterfile. */ pcrs_job *joblist; /**< The resulting compiled pcrs_jobs. */ - int type; /**< Filter type (content, client-header, server-header). */ + enum filter_type type; /**< Filter type (content, client-header, server-header). */ int dynamic; /**< Set to one if the pattern might contain variables and has to be recompiled for every request. */ struct re_filterfile_spec *next; /**< The pointer for chaining. */ @@ -1159,6 +1197,9 @@ struct access_control_list /** configuration_spec::feature_flags: Pages blocked with +handle-as-empty-doc get a return status of 200 OK. */ #define RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK 512U +/** configuration_spec::feature_flags: Buffered content is sent compressed if the client supports it. */ +#define RUNTIME_FEATURE_COMPRESSION 1024U + /** * Data loaded from the configuration file. * @@ -1168,7 +1209,7 @@ struct configuration_spec { /** What to log */ int debug; - + /** Nonzero to enable multithreading. */ int multi_threaded; @@ -1225,11 +1266,11 @@ struct configuration_spec /** The hostname to show on CGI pages, or NULL to use the real one. */ const char *hostname; - /** IP address to bind to. Defaults to HADDR_DEFAULT == 127.0.0.1. */ - const char *haddr; + /** IP addresses to bind to. Defaults to HADDR_DEFAULT == 127.0.0.1. */ + const char *haddr[MAX_LISTENING_SOCKETS]; - /** Port to bind to. Defaults to HADDR_PORT == 8118. */ - int hport; + /** Ports to bind to. Defaults to HADDR_PORT == 8118. */ + int hport[MAX_LISTENING_SOCKETS]; /** Size limit for IOB */ size_t buffer_limit; @@ -1274,6 +1315,10 @@ struct configuration_spec unsigned int default_server_timeout; #endif +#ifdef FEATURE_COMPRESSION + int compression_level; +#endif + /** All options from the config file, HTML-formatted. */ char *proxy_args; @@ -1303,7 +1348,7 @@ struct configuration_spec #endif /* def FEATURE_NO_GIFS */ -/* +/* * Hardwired URLs */