Turn keep-alive support into a runtime feature
[privoxy.git] / project.h
index d3c33cf..088b864 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.119 2008/09/20 10:04:33 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.123 2008/11/10 16:55:59 fabiankeil Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
  *
  * Revisions   :
  *    $Log: project.h,v $
+ *    Revision 1.123  2008/11/10 16:55:59  fabiankeil
+ *    Fix a gcc44 warning (in filters.c).
+ *
+ *    Revision 1.122  2008/10/16 07:11:34  fabiankeil
+ *    Fix a bunch of gcc44 conversion warnings.
+ *
+ *    Revision 1.121  2008/10/09 18:21:41  fabiankeil
+ *    Flush work-in-progress changes to keep outgoing connections
+ *    alive where possible. Incomplete and mostly #ifdef'd out.
+ *
+ *    Revision 1.120  2008/09/21 13:36:52  fabiankeil
+ *    If change-x-forwarded-for{add} is used and the client
+ *    sends multiple X-Forwarded-For headers, append the client's
+ *    IP address to each one of them. "Traditionally" we would
+ *    lose all but the last one.
+ *
  *    Revision 1.119  2008/09/20 10:04:33  fabiankeil
  *    Remove hide-forwarded-for-headers action which has
  *    been obsoleted by change-x-forwarded-for{block}.
@@ -1258,40 +1274,40 @@ struct url_actions
  * Flag for csp->flags: Set if this client is processing data.
  * Cleared when the thread associated with this structure dies.
  */
-#define CSP_FLAG_ACTIVE     0x01
+#define CSP_FLAG_ACTIVE     0x01U
 
 /**
  * Flag for csp->flags: Set if the server's reply is in "chunked"
  * transfer encoding
  */
-#define CSP_FLAG_CHUNKED    0x02
+#define CSP_FLAG_CHUNKED    0x02U
 
 /**
  * Flag for csp->flags: Set if this request was enforced, although it would
  * normally have been blocked.
  */
-#define CSP_FLAG_FORCED     0x04
+#define CSP_FLAG_FORCED     0x04U
 
 /**
  * Flag for csp->flags: Set if any modification to the body was done.
  */
-#define CSP_FLAG_MODIFIED   0x08
+#define CSP_FLAG_MODIFIED   0x08U
 
 /**
  * Flag for csp->flags: Set if request was blocked.
  */
-#define CSP_FLAG_REJECTED   0x10
+#define CSP_FLAG_REJECTED   0x10U
 
 /**
  * Flag for csp->flags: Set if we are toggled on (FEATURE_TOGGLE).
  */
-#define CSP_FLAG_TOGGLED_ON 0x20
+#define CSP_FLAG_TOGGLED_ON 0x20U
 
 /**
- * Flag for csp->flags: Set if adding the 'Connection: close' header
- * for the client isn't necessary.
+ * Flag for csp->flags: Set if an acceptable Connection header
+ * is already set.
  */
-#define CSP_FLAG_CLIENT_CONNECTION_CLOSE_SET   0x00000040UL
+#define CSP_FLAG_CLIENT_CONNECTION_HEADER_SET   0x00000040UL
 
 /**
  * Flag for csp->flags: Set if adding the 'Connection: close' header
@@ -1324,6 +1340,23 @@ struct url_actions
  */
 #define CSP_FLAG_X_FORWARDED_FOR_APPENDED      0x00000800UL
 
+/**
+ * Flag for csp->flags: Set if the server wants to keep
+ * the connection alive.
+ *
+ * XXX: Incomplete implementation, we currently only
+ * look for "Connection: keep-alive".
+ */
+#define CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE  0x00001000UL
+
+#ifdef FEATURE_CONNECTION_KEEP_ALIVE
+/**
+ * Flag for csp->flags: Set if the server specified the
+ * content length.
+ */
+#define CSP_FLAG_CONTENT_LENGTH_SET            0x00002000UL
+#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
+
 /*
  * Flags for use in return codes of child processes
  */
@@ -1371,7 +1404,7 @@ struct client_state
    char *ip_addr_str;
    /** Client PC's IP address, as reported by the accept() function.
        As a number. */
-   long  ip_addr_long;
+   unsigned long ip_addr_long;
 
    /** The URL that was requested */
    struct http_request http[1];
@@ -1404,6 +1437,14 @@ struct client_state
    /** Length after content modification. */
    size_t content_length;
 
+#ifdef FEATURE_CONNECTION_KEEP_ALIVE
+   /** Expected length of content after which we
+    * should stop reading from the server socket.
+    */
+   /* XXX: is this the right location? */
+   size_t expected_content_length;
+#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
+
 #ifdef FEATURE_TRUST
 
    /** Trust file. */
@@ -1624,26 +1665,28 @@ struct access_control_list
 
 
 /** configuration_spec::feature_flags: CGI actions editor. */
-#define RUNTIME_FEATURE_CGI_EDIT_ACTIONS             1
+#define RUNTIME_FEATURE_CGI_EDIT_ACTIONS             1U
 
 /** configuration_spec::feature_flags: Web-based toggle. */
-#define RUNTIME_FEATURE_CGI_TOGGLE                   2
+#define RUNTIME_FEATURE_CGI_TOGGLE                   2U
 
 /** configuration_spec::feature_flags: HTTP-header-based toggle. */
-#define RUNTIME_FEATURE_HTTP_TOGGLE                  4
+#define RUNTIME_FEATURE_HTTP_TOGGLE                  4U
 
 /** configuration_spec::feature_flags: Split large forms to limit the number of GET arguments. */
-#define RUNTIME_FEATURE_SPLIT_LARGE_FORMS            8
+#define RUNTIME_FEATURE_SPLIT_LARGE_FORMS            8U
 
 /** configuration_spec::feature_flags: Check the host header for requests with host-less request lines. */
-#define RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS 16
+#define RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS 16U
 
 /** configuration_spec::feature_flags: Don't allow to circumvent blocks with the force prefix. */
-#define RUNTIME_FEATURE_ENFORCE_BLOCKS              32
+#define RUNTIME_FEATURE_ENFORCE_BLOCKS              32U
 
 /** configuration_spec::feature_flags: Allow to block or redirect CGI requests. */
-#define RUNTIME_FEATURE_CGI_CRUNCHING               64
+#define RUNTIME_FEATURE_CGI_CRUNCHING               64U
 
+/** configuration_spec::feature_flags: Try to keep the connection to the server alive. */
+#define RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE      128U
 
 /**
  * Data loaded from the configuration file.