X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=project.h;h=ca96f328ae38d05c16052e2f52a2999af8520d16;hb=93d6a9f35a2f05acf539c2969557b240bfb73efe;hp=eaac07ddd76d6c0168b6a4121e1c1dfb3d4495c4;hpb=e72b401da5537a14b29e945944926373cb251825;p=privoxy.git diff --git a/project.h b/project.h index eaac07dd..ca96f328 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.137 2009/05/13 18:22:45 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.157 2010/05/24 11:39:36 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 @@ -296,9 +296,11 @@ struct http_request char *host_ip_addr_str; /**< String with dotted decimal representation of host's IP. NULL before connect_to() */ +#ifndef FEATURE_EXTENDED_HOST_PATTERNS char *dbuffer; /**< Buffer with '\0'-delimited domain name. */ char **dvec; /**< List of pointers to the strings in dbuffer. */ int dcount; /**< How many parts to this domain? (length of dvec) */ +#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */ }; /** @@ -306,31 +308,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 +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). */ }; /** @@ -628,14 +635,19 @@ 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 { jb_socket sfd; int in_use; - time_t timestamp; + time_t timestamp; /* XXX: rename? */ + + time_t request_sent; + time_t response_received; + /* * Number of seconds after which this * connection will no longer be reused. @@ -689,6 +701,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. @@ -737,15 +754,54 @@ struct reusable_connection * Flag for csp->flags: Set if the server specified the * content length. */ -#define CSP_FLAG_CONTENT_LENGTH_SET 0x00002000U +#define CSP_FLAG_SERVER_CONTENT_LENGTH_SET 0x00002000U + +/** + * Flag for csp->flags: Set if we know the content lenght, + * either because the server set it, or we figured it out + * on our own. + */ +#define CSP_FLAG_CONTENT_LENGTH_SET 0x00004000U /** * Flag for csp->flags: Set if the client wants to keep * the connection alive. */ -#define CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE 0x00004000U +#define CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE 0x00008000U + +/** + * Flag for csp->flags: Set if we think we got the whole + * client request and shouldn't read any additional data + * coming from the client until the current request has + * been dealt with. + */ +#define CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ 0x00010000U + +/** + * Flag for csp->flags: Set if the server promised us to + * keep the connection open for a known number of seconds. + */ +#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. + */ +#define CSP_FLAG_SERVER_SOCKET_TAINTED 0x00040000U + +/** + * Flag for csp->flags: Set if the Proxy-Connection header + * is among the server headers. + */ +#define CSP_FLAG_SERVER_PROXY_CONNECTION_HEADER_SET 0x00080000U + +/** + * Flag for csp->flags: Set if the client reused its connection. + */ +#define CSP_FLAG_REUSED_CLIENT_CONNECTION 0x00100000U + /* * Flags for use in return codes of child processes */ @@ -782,9 +838,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; @@ -836,11 +889,17 @@ struct client_state unsigned long long content_length; #ifdef FEATURE_CONNECTION_KEEP_ALIVE + /* XXX: is this the right location? */ + /** Expected length of content after which we * should stop reading from the server socket. */ - /* XXX: is this the right location? */ unsigned long long expected_content_length; + + /** Expected length of content after which we + * should stop reading from the client socket. + */ + unsigned long long expected_client_content_length; #endif /* def FEATURE_CONNECTION_KEEP_ALIVE */ #ifdef FEATURE_TRUST @@ -855,11 +914,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 @@ -1097,6 +1162,9 @@ 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 + /** * Data loaded from the configuration file. * @@ -1118,6 +1186,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; @@ -1201,6 +1275,9 @@ 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 /** All options from the config file, HTML-formatted. */