X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=project.h;h=37cfc41c0d7421149223fc6fd8b13d21f6c3b55e;hp=c8ff3843783b2467516522483e2f4c8dd58a21a0;hb=a63e355db41838804a61f8c39fe9227d4978d9a0;hpb=13c2297e5c789e5bfb38efd37af0e8b7f944096a diff --git a/project.h b/project.h index c8ff3843..37cfc41c 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.149 2009/08/19 15:57:13 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.168 2011/07/08 13:27:31 fabiankeil Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -10,7 +10,7 @@ * project. Does not define any variables or functions * (though it does declare some macros). * - * Copyright : Written by and Copyright (C) 2001-2009 the + * Copyright : Written by and Copyright (C) 2001-2010 the * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -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 @@ -183,7 +191,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. */ @@ -308,33 +316,36 @@ struct http_request * the requested resource. Mostly ordered the way they are checked * for in chat(). */ -#define RSP_REASON_UNSUPPORTED 1 -#define RSP_REASON_BLOCKED 2 -#define RSP_REASON_UNTRUSTED 3 -#define RSP_REASON_REDIRECTED 4 -#define RSP_REASON_CGI_CALL 5 -#define RSP_REASON_NO_SUCH_DOMAIN 6 -#define RSP_REASON_FORWARDING_FAILED 7 -#define RSP_REASON_CONNECT_FAILED 8 -#define RSP_REASON_OUT_OF_MEMORY 9 -#define RSP_REASON_INTERNAL_ERROR 10 -#define RSP_REASON_CONNECTION_TIMEOUT 11 -#define RSP_REASON_NO_SERVER_DATA 12 +enum crunch_reason +{ + UNSUPPORTED, + BLOCKED, + UNTRUSTED, + REDIRECTED, + CGI_CALL, + NO_SUCH_DOMAIN, + FORWARDING_FAILED, + CONNECT_FAILED, + OUT_OF_MEMORY, + INTERNAL_ERROR, + CONNECTION_TIMEOUT, + NO_SERVER_DATA +}; /** * Response generated by CGI, blocker, or error handler */ struct http_response { - char *status; /**< HTTP status (string). */ - struct list headers[1]; /**< List of header lines. */ - char *head; /**< Formatted http response head. */ - size_t head_length; /**< Length of http response head. */ - char *body; /**< HTTP document body. */ - 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). */ - int reason; /**< Why the response was generated in the first place. */ + 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. */ + size_t head_length; /**< Length of http response head. */ + char *body; /**< HTTP document body. */ + 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). */ }; /** @@ -492,7 +503,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 @@ -520,7 +531,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 @@ -632,8 +643,9 @@ struct url_actions /* - * Structure to make sure we only reuse the server socket - * if the host and forwarding settings are the same. + * Structure to hold the server socket and the information + * required to make sure we only reuse the connection if + * the host and forwarding settings are the same. */ struct reusable_connection { @@ -697,6 +709,11 @@ struct reusable_connection */ #define CSP_FLAG_TOGGLED_ON 0x20U +/** + * Flag for csp->flags: Set if we answered the request ourselve. + */ +#define CSP_FLAG_CRUNCHED 0x40U + /** * Flag for csp->flags: Set if an acceptable Connection header * has already been set by the client. @@ -748,7 +765,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. */ @@ -793,6 +810,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 */ @@ -829,9 +857,6 @@ struct client_state /** socket to talk to client (web browser) */ jb_socket cfd; - /** 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; @@ -908,11 +933,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 @@ -1011,12 +1042,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. @@ -1027,7 +1062,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; @@ -1052,12 +1087,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 /** @@ -1072,7 +1109,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. */ @@ -1150,6 +1187,12 @@ struct access_control_list /** configuration_spec::feature_flags: Share outgoing connections between different client connections. */ #define RUNTIME_FEATURE_CONNECTION_SHARING 256U +/** 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. * @@ -1171,6 +1214,12 @@ struct configuration_spec * - RUNTIME_FEATURE_CGI_TOGGLE * - RUNTIME_FEATURE_HTTP_TOGGLE * - RUNTIME_FEATURE_SPLIT_LARGE_FORMS + * - RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS + * - RUNTIME_FEATURE_ENFORCE_BLOCKS + * - RUNTIME_FEATURE_CGI_CRUNCHING + * - RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE + * - RUNTIME_FEATURE_CONNECTION_SHARING + * - RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK */ unsigned feature_flags; @@ -1254,6 +1303,13 @@ struct configuration_spec #ifdef FEATURE_CONNECTION_KEEP_ALIVE /* Maximum number of seconds after which an open connection will no longer be reused. */ unsigned int keep_alive_timeout; + + /* Assumed server-side keep alive timeout if none is specified. */ + unsigned int default_server_timeout; +#endif + +#ifdef FEATURE_COMPRESSION + int compression_level; #endif /** All options from the config file, HTML-formatted. */