Allow metrics.torproject.org
[privoxy.git] / project.h
index 8f1fc46..e5c076d 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.138 2009/05/16 13:27:20 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.153 2009/11/27 13:46:47 fabiankeil Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
@@ -318,6 +318,8 @@ struct http_request
 #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
 
 /**
  * Response generated by CGI, blocker, or error handler
@@ -630,14 +632,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.
@@ -739,15 +746,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
  */
@@ -784,9 +830,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;
 
@@ -838,11 +881,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
@@ -1099,6 +1148,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.
  *
@@ -1120,6 +1172,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;
 
@@ -1203,6 +1261,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. */