Get the test for the '/.*download' pattern working
[privoxy.git] / project.h
index 36913f6..b880241 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.185 2012/10/21 12:39:27 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.194 2012/12/07 12:43:55 fabiankeil Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
@@ -417,12 +417,6 @@ struct iob
 #define IOB_PEEK(IOB) ((IOB->cur > IOB->eod) ? (IOB->eod - IOB->cur) : 0)
 
 
-/**
- * Remove any data in the I/O buffer associated with the passed
- * client_state pointer.
- */
-#define IOB_RESET(IOB) do {free(IOB->buf); memset(IOB, '\0', sizeof(*IOB));} while (0)
-
 /* Bits for csp->content_type bitmask: */
 #define CT_TEXT    0x0001U /**< Suitable for pcrs filtering. */
 #define CT_GIF     0x0002U /**< Suitable for GIF filtering.  */
@@ -506,6 +500,8 @@ struct iob
 #define ACTION_OVERWRITE_LAST_MODIFIED               0x02000000UL
 /** Action bitmap: Replace or block Accept-Language header */
 #define ACTION_HIDE_ACCEPT_LANGUAGE                  0x04000000UL
+/** Action bitmap: Limit the cookie lifetime */
+#define ACTION_LIMIT_COOKIE_LIFETIME                 0x08000000UL
 
 
 /** Action string index: How to deanimate GIFs */
@@ -544,8 +540,10 @@ struct iob
 #define ACTION_STRING_BLOCK                16
 /** Action string index: what to do with the "X-Forwarded-For" header. */
 #define ACTION_STRING_CHANGE_X_FORWARDED_FOR 17
+/** Action string index: how many minutes cookies should be valid. */
+#define ACTION_STRING_LIMIT_COOKIE_LIFETIME 18
 /** Number of string actions. */
-#define ACTION_STRING_COUNT                18
+#define ACTION_STRING_COUNT                19
 
 
 /* To make the ugly hack in sed easier to understand */
@@ -647,6 +645,8 @@ enum forwarder_type {
    SOCKS_4A   = 41,
    /**< SOCKS 5 with hostnames, DNS resolution is done by the SOCKS server */
    SOCKS_5    = 50,
+   /**< Like SOCKS5, but uses non-standard Tor extensions (currently only optimistic data) */
+   SOCKS_5T,
 };
 
 /*
@@ -668,6 +668,11 @@ struct reusable_connection
     * connection will no longer be reused.
     */
    unsigned int keep_alive_timeout;
+   /*
+    * Number of requests that were sent to this connection.
+    * This is currently only for debugging purposes.
+    */
+   unsigned int requests_sent_total;
 
    char *host;
    int  port;
@@ -764,7 +769,6 @@ struct reusable_connection
  */
 #define CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE  0x00001000U
 
-#ifdef FEATURE_CONNECTION_KEEP_ALIVE
 /**
  * Flag for csp->flags: Set if the server specified the
  * content length.
@@ -798,8 +802,6 @@ struct reusable_connection
  */
 #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. XXX: It's also set after sabotaging
@@ -829,6 +831,18 @@ struct reusable_connection
  */
 #define CSP_FLAG_BUFFERED_CONTENT_DEFLATED          0x00400000U
 
+/**
+ * Flag for csp->flags: Set if we already read (parts of)
+ * a pipelined request in which case the client obviously
+ * isn't done talking.
+ */
+#define CSP_FLAG_PIPELINED_REQUEST_WAITING          0x00800000U
+
+/**
+ * Flag for csp->flags: Set if the client body is chunk-encoded
+ */
+#define CSP_FLAG_CHUNKED_CLIENT_BODY                0x01000000U
+
 
 /*
  * Flags for use in return codes of child processes
@@ -850,7 +864,7 @@ struct reusable_connection
  * Maximum number of actions/filter files.  This limit is arbitrary - it's just used
  * to size an array.
  */
-#define MAX_AF_FILES 10
+#define MAX_AF_FILES 30
 
 /**
  * Maximum number of sockets to listen to.  This limit is arbitrary - it's just used
@@ -872,6 +886,9 @@ struct client_state
    /** socket to talk to client (web browser) */
    jb_socket cfd;
 
+   /** Number of requests received on the client socket. */
+   unsigned int requests_received_total;
+
    /** current connection to the server (may go through a proxy) */
    struct reusable_connection server_connection;
 
@@ -926,7 +943,6 @@ struct client_state
    /** Length after content modification. */
    unsigned long long content_length;
 
-#ifdef FEATURE_CONNECTION_KEEP_ALIVE
    /* XXX: is this the right location? */
 
    /** Expected length of content after which we
@@ -938,7 +954,6 @@ struct client_state
     *  should stop reading from the client socket.
     */
    unsigned long long expected_client_content_length;
-#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
 
 #ifdef FEATURE_TRUST
 
@@ -1202,6 +1217,9 @@ struct access_control_list
 /** configuration_spec::feature_flags: Buffered content is sent compressed if the client supports it. */
 #define RUNTIME_FEATURE_COMPRESSION               1024U
 
+/** configuration_spec::feature_flags: Pipelined requests are served instead of being discarded. */
+#define RUNTIME_FEATURE_TOLERATE_PIPELINING       2048U
+
 /**
  * Data loaded from the configuration file.
  *