#ifndef PROJECT_H_INCLUDED
#define PROJECT_H_INCLUDED
/** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 1.89 2007/01/27 13:09:16 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.95 2007/04/30 15:02:19 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
*
* Revisions :
* $Log: project.h,v $
+ * Revision 1.95 2007/04/30 15:02:19 fabiankeil
+ * Introduce dynamic pcrs jobs that can resolve variables.
+ *
+ * Revision 1.94 2007/04/15 16:39:21 fabiankeil
+ * Introduce tags as alternative way to specify which
+ * actions apply to a request. At the moment tags can be
+ * created based on client and server headers.
+ *
+ * Revision 1.93 2007/03/20 15:16:34 fabiankeil
+ * Use dedicated header filter actions instead of abusing "filter".
+ * Replace "filter-client-headers" and "filter-client-headers"
+ * with "server-header-filter" and "client-header-filter".
+ *
+ * Revision 1.92 2007/03/17 15:20:05 fabiankeil
+ * New config option: enforce-blocks.
+ *
+ * Revision 1.91 2007/03/05 13:28:03 fabiankeil
+ * Add some CSP_FLAGs for the header parsers.
+ *
+ * Revision 1.90 2007/02/07 10:36:16 fabiankeil
+ * Add new http_response member to save
+ * the reason why the response was generated.
+ *
* Revision 1.89 2007/01/27 13:09:16 fabiankeil
* Add new config option "templdir" to
* change the templates directory.
};
/**
- * A URL pattern.
+ * A URL or a tag pattern.
*/
struct url_spec
{
char *path; /**< The source for the regex. */
size_t pathlen; /**< ==strlen(path). Needed for prefix matching. FIXME: Now obsolete? */
regex_t *preg; /**< Regex for matching path part */
+ regex_t *tag_regex; /**< Regex for matching tags */
};
/**
* If you declare a static url_spec, this is the value to initialize it to zero.
*/
-#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, 0, 0, 0, NULL, 0, NULL }
+#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL }
/**
* Constant for host part matching in URLs. If set, indicates that the start of
#define ACTION_STRING_COUNT 15
-/*To make the ugly hack in sed easier to understand*/
+/* To make the ugly hack in sed easier to understand */
#define CHECK_EVERY_HEADER_REMAINING 0
/** Index into current_action_spec::multi[] for headers to add. */
-#define ACTION_MULTI_ADD_HEADER 0
+#define ACTION_MULTI_ADD_HEADER 0
/** Index into current_action_spec::multi[] for headers to add. */
-#define ACTION_MULTI_WAFER 1
-/** Index into current_action_spec::multi[] for filters to apply. */
-#define ACTION_MULTI_FILTER 2
+#define ACTION_MULTI_WAFER 1
+/** Index into current_action_spec::multi[] for content filters to apply. */
+#define ACTION_MULTI_FILTER 2
+/** Index into current_action_spec::multi[] for server-header filters to apply. */
+#define ACTION_MULTI_SERVER_HEADER_FILTER 3
+/** Index into current_action_spec::multi[] for client-header filters to apply. */
+#define ACTION_MULTI_CLIENT_HEADER_FILTER 4
+/** Index into current_action_spec::multi[] for client-header tags to apply. */
+#define ACTION_MULTI_CLIENT_HEADER_TAGGER 5
+/** Index into current_action_spec::multi[] for server-header tags to apply. */
+#define ACTION_MULTI_SERVER_HEADER_TAGGER 6
/** Number of multi-string actions. */
-#define ACTION_MULTI_COUNT 3
+#define ACTION_MULTI_COUNT 7
/**
*/
#define CSP_FLAG_TOGGLED_ON 0x20
+/**
+ * Flag for csp->flags: Set if adding the 'Connection: close' header
+ * for the client isn't necessary.
+ */
+#define CSP_FLAG_CLIENT_CONNECTION_CLOSE_SET 0x00000040UL
+
+/**
+ * Flag for csp->flags: Set if adding the 'Connection: close' header
+ * for the server isn't necessary.
+ */
+#define CSP_FLAG_SERVER_CONNECTION_CLOSE_SET 0x00000080UL
+
+/**
+ * Flag for csp->flags: Signals header parsers whether they
+ * are parsing server or client headers.
+ */
+#define CSP_FLAG_CLIENT_HEADER_PARSING_DONE 0x00000100UL
+
+/**
+ * Flag for csp->flags: Set if adding the Host: header
+ * isn't necessary.
+ */
+#define CSP_FLAG_HOST_HEADER_IS_SET 0x00000200UL
+
/*
* Flags for use in return codes of child processes
/** List of all headers for this request */
struct list headers[1];
- /** List of all cookies for this request */
- struct list cookie_list[1];
+ /** List of all tags that apply to this request */
+ struct list tags[1];
/** MIME-Type key, see CT_* above */
unsigned int content_type;
*/
#define FORWARD_SPEC_INITIALIZER { { URL_SPEC_INITIALIZER }, 0, NULL, 0, NULL, 0, NULL }
+/* Supported filter types */
+#define FT_CONTENT_FILTER 0
+#define FT_CLIENT_HEADER_FILTER 1
+#define FT_SERVER_HEADER_FILTER 2
+#define FT_CLIENT_HEADER_TAGGER 3
+#define FT_SERVER_HEADER_TAGGER 4
+
+#define MAX_FILTER_TYPES 5
/**
* This struct represents one filter (one block) from
char *description; /**< Description from FILTER: statement in re_filterfile. */
struct list patterns[1]; /**< The patterns from the re_filterfile. */
pcrs_job *joblist; /**< The resulting compiled pcrs_jobs. */
+ int type; /**< Filter type (content, client-header, server-header). */
+ int dynamic; /**< Set to one if the pattern might contain variables
+ and has to be recompiled for every request. */
struct re_filterfile_spec *next; /**< The pointer for chaining. */
};
/** configuration_spec::feature_flags: Check the host header for requests with host-less request lines. */
#define RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS 16
+/** configuration_spec::feature_flags: Don't allow to circumvent blocks with the force prefix. */
+#define RUNTIME_FEATURE_ENFORCE_BLOCKS 32
+
/**
* Data loaded from the configuration file.