#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.153 2009/11/27 13:46:47 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
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 */
};
/**
#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
/*
- * 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.
* 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
*/
/** 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;
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
/** 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.
*
* - 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;
#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. */