Rewrite of list library. Now has seperate header and list_entry
[privoxy.git] / project.h
index 2f14079..afdc173 100644 (file)
--- a/project.h
+++ b/project.h
@@ -1,6 +1,6 @@
-#ifndef _PROJECT_H
-#define _PROJECT_H
-#define PROJECT_H_VERSION "$Id: project.h,v 1.22 2001/07/15 17:51:41 jongfoster Exp $"
+#ifndef PROJECT_H_INCLUDED
+#define PROJECT_H_INCLUDED
+#define PROJECT_H_VERSION "$Id: project.h,v 1.30 2001/09/13 23:52:00 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
  *
  * Revisions   :
  *    $Log: project.h,v $
+ *    Revision 1.30  2001/09/13 23:52:00  jongfoster
+ *    Support for both static and dynamically generated CGI pages
+ *
+ *    Revision 1.29  2001/09/13 23:29:43  jongfoster
+ *    Defining FORWARD_SPEC_INITIALIZER
+ *
+ *    Revision 1.28  2001/09/13 23:05:50  jongfoster
+ *    Changing the string paramater to the header parsers a "const".
+ *
+ *    Revision 1.27  2001/08/05 16:06:20  jongfoster
+ *    Modifiying "struct map" so that there are now separate header and
+ *    "map_entry" structures.  This means that functions which modify a
+ *    map no longer need to return a pointer to the modified map.
+ *    Also, it no longer reverses the order of the entries (which may be
+ *    important with some advanced template substitutions).
+ *
+ *    Revision 1.26  2001/07/30 22:08:36  jongfoster
+ *    Tidying up #defines:
+ *    - All feature #defines are now of the form FEATURE_xxx
+ *    - Permanently turned off WIN_GUI_EDIT
+ *    - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
+ *    Revision 1.25  2001/07/29 18:43:08  jongfoster
+ *    Changing #ifdef _FILENAME_H to FILENAME_H_INCLUDED, to conform to
+ *    ANSI C rules.
+ *
+ *    Revision 1.24  2001/07/25 17:20:27  oes
+ *    Introduced http->user_agent
+ *
+ *    Revision 1.23  2001/07/18 12:32:23  oes
+ *    - Added ACTION_STRING_DEANIMATE
+ *    - moved #define freez from jcc.h to project.h
+ *
  *    Revision 1.22  2001/07/15 17:51:41  jongfoster
  *    Renaming #define STATIC to STATIC_PCRE
  *
@@ -277,24 +310,43 @@ extern "C" {
 #define HADDR_PORT      8000
 
 
+/* Forward defs for various structures */
+
 /* Need this for struct client_state */
 struct configuration_spec;
 
+
 /* Generic linked list of strings */
-struct list /* FIXME: Why not separate entries and header? */
+
+struct list_entry
+{
+   const char *str;
+   struct list_entry *next;
+};
+
+struct list
+{
+   struct list_entry *first;
+   struct list_entry *last;
+};
+
+
+/* A map from a string to another string */
+
+struct map_entry
 {
-   char *       str;  /* valid in an entry */
-   struct list *last; /* valid in header */
-   struct list *next;
+   const char *name;
+   const char *value;
+   struct map_entry *next;
 };
 
 struct map
 {
-  char *name;
-  char *value;
-  struct map *next;
+   struct map_entry *first;
+   struct map_entry *last;
 };
 
+
 struct http_request
 {
    char *cmd;
@@ -306,6 +358,7 @@ struct http_request
    char *ver;
    char *hostport; /* "host[:port]" */
    int   ssl;
+   char *user_agent; /* Client's User-Agent: header value */
 };
 
 /* Response generated by CGI, blocker, or error handler */
@@ -316,7 +369,9 @@ struct http_response
   char *head;             /* Formatted http response head */
   int   head_length;      /* Length of http response head */
   char *body;             /* HTTP document body */
-  int   content_length;   /* Length of body, REQUIRED if binary body*/
+  int   content_length;   /* Length of body, REQUIRED if binary body */
+  int   is_static;        /* Nonzero if the content will never change and
+                           * should be cached by the broser (e.g. images) */
 };
 
 /* A URL pattern */
@@ -344,12 +399,17 @@ struct url_spec
    regex_t *preg;      /* Regex for matching path part                      */
 #endif
 };
+#ifdef REGEX
+#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0, NULL }
+#else /* ifndef REGEX */
+#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, NULL, 0, 0, 0, NULL, 0 }
+#endif /* ndef REGEX */
 
+/* Constants for host part matching in URLs */
 #define ANCHOR_LEFT  1
 #define ANCHOR_RIGHT 2
 
 
-
 /* An I/O buffer */
 struct iob
 {
@@ -460,7 +520,7 @@ struct url_actions
 
 /* Constants defining bitmask for csp->accept_types */
 
-#ifdef DETECT_MSIE_IMAGES
+#ifdef FEATURE_IMAGE_DETECT_MSIE
 
 /* MSIE detected by user-agent string */
 #define ACCEPT_TYPE_IS_MSIE     0x0001
@@ -478,7 +538,7 @@ struct url_actions
  */
 #define ACCEPT_TYPE_MSIE_HTML   0x0004
 
-#endif /* def DETECT_MSIE_IMAGES */
+#endif /* def FEATURE_IMAGE_DETECT_MSIE */
 
 
 struct client_state
@@ -496,20 +556,20 @@ struct client_state
    int  sfd;
 
 
-#ifdef STATISTICS
+#ifdef FEATURE_STATISTICS
    /* 1 if this URL was rejected, 0 otherwise. Allows actual stats inc to 
     * occur in main thread only for thread-safety. 
     */
    int  rejected;
-#endif /* def STATISTICS */
+#endif /* def FEATURE_STATISTICS */
 
-#ifdef FORCE_LOAD
+#ifdef FEATURE_FORCE_LOAD
    int force;
-#endif /* def FORCE_LOAD */
+#endif /* def FEATURE_FORCE_LOAD */
 
-#ifdef TOGGLE
+#ifdef FEATURE_TOGGLE
    int   toggled_on;
-#endif /* def TOGGLE */
+#endif /* def FEATURE_TOGGLE */
 
    /*
     * Client PC's IP address, as reported by the accept()_ function.
@@ -526,17 +586,17 @@ struct client_state
    char *my_ip_addr_str;
    char *my_hostname;
 
-#ifdef TRUST_FILES
+#ifdef FEATURE_TRUST
    /* The referer in this request, if one was specified. */
    char *referrer;
-#endif /* def TRUST_FILES */
+#endif /* def FEATURE_TRUST */
 
-#if defined(DETECT_MSIE_IMAGES)
+#if defined(FEATURE_IMAGE_DETECT_MSIE)
    /* Types the client will accept.
     * Bitmask - see ACCEPT_TYPE_XXX constants.
     */
    int accept_types;
-#endif /* defined(DETECT_MSIE_IMAGES) */
+#endif /* defined(FEATURE_IMAGE_DETECT_MSIE) */
 
    /* The URL that was requested */
    struct http_request http[1];
@@ -568,9 +628,9 @@ struct client_state
    struct file_list *rlist;   /* pcrs job file */
    size_t content_length;     /* Length after content modification */ 
 
-#ifdef TRUST_FILES
+#ifdef FEATURE_TRUST
    struct file_list *tlist;   /* trustfile */
-#endif /* def TRUST_FILES */
+#endif /* def FEATURE_TRUST */
 
    struct client_state *next;
 };
@@ -580,7 +640,7 @@ struct parsers
 {
    char *str;
    char  len;
-   char *(*parser)(const struct parsers *, char *, struct client_state *);
+   char *(*parser)(const struct parsers *, const char *, struct client_state *);
 };
 
 struct cgi_dispatcher
@@ -610,13 +670,6 @@ struct file_list
    /* Used internally by sweep().  Do not access from elsewhere. */
    int active;
 
-#ifndef SPLIT_PROXY_ARGS
-   /* String to be displayed as part of show-proxy-args display.
-    * Read-only once the structure has been created.
-    */
-   char *proxy_args;
-#endif /* ndef SPLIT_PROXY_ARGS */
-
    /* Following variables allow us to check if file has been changed.
     * Read-only once the structure has been created.
     */
@@ -633,14 +686,14 @@ struct file_list
 };
 
 
-#ifdef TRUST_FILES
+#ifdef FEATURE_TRUST
 struct block_spec
 {
    struct url_spec url[1];
    int    reject;
    struct block_spec *next;
 };
-#endif /* def TRUST_FILES */
+#endif /* def FEATURE_TRUST */
 
 
 #define SOCKS_NONE    0    /* Don't use a SOCKS server */
@@ -665,14 +718,18 @@ struct forward_spec
    /* For the linked list */
    struct forward_spec *next;
 };
+#define FORWARD_SPEC_INITIALIZER { URL_SPEC_INITIALIZER, 0, NULL, 0, NULL, 0, NULL }
+
 
 struct re_filterfile_spec
 {
+   char *username;
+   char *filtername;
    struct list patterns[1];
    pcrs_job *joblist;
 };
 
-#ifdef ACL_FILES
+#ifdef FEATURE_ACL
 #define ACL_PERMIT   1  /* accept connection request */
 #define ACL_DENY     2  /* reject connection request */
 
@@ -691,7 +748,7 @@ struct access_control_list
    short action;
    struct access_control_list *next;
 };
-#endif /* def ACL_FILES */
+#endif /* def FEATURE_ACL */
 
 
 /* Maximum number of loaders (actions, re_filter, ...) */
@@ -721,10 +778,10 @@ struct configuration_spec
 
    const char *re_filterfile;
 
-#ifdef JAR_FILES
+#ifdef FEATURE_COOKIE_JAR
    const char * jarfile;
    FILE * jar;
-#endif /* def JAR_FILES */
+#endif /* def FEATURE_COOKIE_JAR */
 
    /*
     * Port and IP to bind to.
@@ -733,25 +790,16 @@ struct configuration_spec
    const char *haddr;
    int         hport;
 
-#ifndef SPLIT_PROXY_ARGS
-   const char *suppress_message;
-#endif /* ndef SPLIT_PROXY_ARGS */
-
-#ifndef SPLIT_PROXY_ARGS
-   /* suppress listing config files */
-   int suppress_blocklists;
-#endif /* ndef SPLIT_PROXY_ARGS */
-
-#ifdef TRUST_FILES
+#ifdef FEATURE_TRUST
    const char * trustfile;
 
    struct list trust_info[1];
    struct url_spec *trust_list[64];
-#endif /* def TRUST_FILES */
+#endif /* def FEATURE_TRUST */
 
-#ifdef ACL_FILES
+#ifdef FEATURE_ACL
    struct access_control_list *acl;
-#endif /* def ACL_FILES */
+#endif /* def FEATURE_ACL */
 
    struct forward_spec *forward;
 
@@ -771,9 +819,9 @@ struct configuration_spec
 
 #define SZ(X)  (sizeof(X) / sizeof(*X))
 
-#ifdef FORCE_LOAD
+#ifdef FEATURE_FORCE_LOAD
 #define FORCE_PREFIX "/IJB-FORCE-LOAD"
-#endif /* def FORCE_LOAD */
+#endif /* def FEATURE_FORCE_LOAD */
 
 /* Hardwired URLs */
 #define HOME_PAGE_URL  "http://ijbswa.sourceforge.net"
@@ -792,7 +840,7 @@ static const char CHEADER[] =
 } /* extern "C" */
 #endif
 
-#endif /* ndef _PROJECT_H */
+#endif /* ndef PROJECT_H_INCLUDED */
 
 /*
   Local Variables: