ijbswa-Feature Requests-3006719 - Block 160x578 Banners
[privoxy.git] / project.h
index f30f4bb..fdf153c 100644 (file)
--- 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.147 2009/07/14 17:50:34 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.156 2010/05/24 11:38:22 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
@@ -308,33 +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
-#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). */
 };
 
 /**
@@ -632,8 +635,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 +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.
@@ -788,6 +797,11 @@ struct reusable_connection
  */
 #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
  */
@@ -824,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;
 
@@ -878,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
@@ -1139,6 +1156,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.
  *
@@ -1160,6 +1180,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;
 
@@ -1243,6 +1269,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. */