Fixed BML link text
[privoxy.git] / project.h
index ef2437a..811cf22 100644 (file)
--- a/project.h
+++ b/project.h
@@ -1,6 +1,6 @@
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
-#define PROJECT_H_VERSION "$Id: project.h,v 1.51 2002/03/05 04:52:42 oes Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.67 2002/04/24 02:12:43 oes Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
@@ -10,7 +10,7 @@
  *                (though it does declare some macros).
  *
  * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
- *                IJBSWA team.  http://ijbswa.sourceforge.net
+ *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *                by and Copyright (C) 1997 Anonymous Coders and
  *
  * Revisions   :
  *    $Log: project.h,v $
+ *    Revision 1.67  2002/04/24 02:12:43  oes
+ *     - Jon's multiple AF patch:
+ *       - Make csp->actions_list an array
+ *       - #define MAX_ACTION_FILES
+ *     - Moved CGI_PARAM_LEN_MAX (500) here
+ *
+ *    Revision 1.66  2002/04/15 19:06:43  jongfoster
+ *    Typos
+ *
+ *    Revision 1.65  2002/04/04 00:36:36  gliptak
+ *    always use pcre for matching
+ *
+ *    Revision 1.64  2002/04/03 22:28:03  gliptak
+ *    Removed references to gnu_regex
+ *
+ *    Revision 1.63  2002/03/31 17:19:00  jongfoster
+ *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
+ *
+ *    Revision 1.62  2002/03/26 22:48:49  swa
+ *    new homepage url
+ *
+ *    Revision 1.61  2002/03/26 22:29:55  swa
+ *    we have a new homepage!
+ *
+ *    Revision 1.60  2002/03/24 15:52:17  jongfoster
+ *    Changing CGI URL prefixes for new name
+ *
+ *    Revision 1.59  2002/03/24 15:23:33  jongfoster
+ *    Name changes
+ *
+ *    Revision 1.58  2002/03/24 13:25:43  swa
+ *    name change related issues
+ *
+ *    Revision 1.57  2002/03/16 20:28:34  oes
+ *    Added descriptions to the filters so users will know what they select in the cgi editor
+ *
+ *    Revision 1.56  2002/03/13 20:27:30  oes
+ *    Fixing bug with CT_TABOO
+ *
+ *    Revision 1.55  2002/03/12 01:42:50  oes
+ *    Introduced modular filters
+ *
+ *    Revision 1.54  2002/03/09 20:03:52  jongfoster
+ *    - Making various functions return int rather than size_t.
+ *      (Undoing a recent change).  Since size_t is unsigned on
+ *      Windows, functions like read_socket that return -1 on
+ *      error cannot return a size_t.
+ *
+ *      THIS WAS A MAJOR BUG - it caused frequent, unpredictable
+ *      crashes, and also frequently caused JB to jump to 100%
+ *      CPU and stay there.  (Because it thought it had just
+ *      read ((unsigned)-1) == 4Gb of data...)
+ *
+ *    - The signature of write_socket has changed, it now simply
+ *      returns success=0/failure=nonzero.
+ *
+ *    - Trying to get rid of a few warnings --with-debug on
+ *      Windows, I've introduced a new type "jb_socket".  This is
+ *      used for the socket file descriptors.  On Windows, this
+ *      is SOCKET (a typedef for unsigned).  Everywhere else, it's
+ *      an int.  The error value can't be -1 any more, so it's
+ *      now JB_INVALID_SOCKET (which is -1 on UNIX, and in
+ *      Windows it maps to the #define INVALID_SOCKET.)
+ *
+ *    - The signature of bind_port has changed.
+ *
+ *    Revision 1.53  2002/03/08 16:48:55  oes
+ *    Added FEATURE_NO_GIFS and BUILTIN_IMAGE_MIMETYPE
+ *
+ *    Revision 1.52  2002/03/07 03:46:17  oes
+ *    Fixed compiler warnings
+ *
  *    Revision 1.51  2002/03/05 04:52:42  oes
  *    Deleted non-errlog debugging code
  *
  * and are included anyway.
  */
 
-#if defined(REGEX_PCRE) || defined (REGEX_GNU)
-# define REGEX
-#endif /* defined(REGEX_PCRE) || defined (REGEX_GNU) */
-
 #ifdef STATIC_PCRE
 #  include "pcre.h"
 #else
 #  include <pcrs.h>
 #endif
 
-#if defined(REGEX_PCRE)
-#  ifdef STATIC_PCRE
-#    include "pcreposix.h"
-#  else
-#    include <pcreposix.h>
-#  endif
-#endif /* defined(REGEX_PCRE) */
-
-#if defined(REGEX_GNU)
-#  include "gnu_regex.h"
+#ifdef STATIC_PCRE
+#  include "pcreposix.h"
+#else
+#  include <pcreposix.h>
 #endif
 
 #ifdef AMIGA
 #include "amiga.h"
 #endif /* def AMIGA */
 
+#ifdef _WIN32
+/*
+ * I don't want to have to #include all this just for the declaration
+ * of SOCKET.  However, it looks like we have to...
+ */
+#ifndef STRICT
+#define STRICT
+#endif
+#include <windows.h>
+#endif
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+/*
+ * The type used by sockets.  On UNIX it's an int.  Microsoft decided to
+ * make it an unsigned.
+ */
+#ifdef _WIN32
+typedef SOCKET jb_socket;
+#define JB_INVALID_SOCKET INVALID_SOCKET
+#else /* ndef _WIN32 */
+typedef int jb_socket;
+#define JB_INVALID_SOCKET (-1)
+#endif /* ndef _WIN32 */
+
 
 /*
  * Error codes.  Functions returning these should return a jb_err
@@ -442,6 +528,11 @@ typedef int jb_err;
  */
 #define BUFFER_SIZE 5000
 
+/*
+ * Max length of CGI parameters (arbitrary limit)
+ */
+#define CGI_PARAM_LEN_MAX 500
+
 /*
  * Buffer size for capturing struct hostent data in the
  * gethostby(name|addr)_r library calls. Since we don't
@@ -555,15 +646,9 @@ struct url_spec
    char *path;         /* The path prefix (if not using regex), or source   */
                        /* for the regex.                                    */
    int   pathlen;      /* ==strlen(path).  Needed for prefix matching.      */
-#ifdef REGEX
    regex_t *preg;      /* Regex for matching path part                      */
-#endif
 };
-#ifdef REGEX
 #define URL_SPEC_INITIALIZER { NULL, NULL, NULL, 0, 0, 0, NULL, 0, NULL }
-#else /* ifndef REGEX */
-#define URL_SPEC_INITIALIZER { NULL, NULL, NULL, 0, 0, 0, NULL, 0 }
-#endif /* ndef REGEX */
 
 /* Constants for host part matching in URLs */
 #define ANCHOR_LEFT  1
@@ -582,10 +667,10 @@ struct iob
 #define IOB_PEEK(CSP) ((CSP->iob->cur > CSP->iob->eod) ? (CSP->iob->eod - CSP->iob->cur) : 0)
 #define IOB_RESET(CSP) if(CSP->iob->buf) free(CSP->iob->buf); memset(CSP->iob, '\0', sizeof(CSP->iob));
 
-/* Keys for csp->content_type */
+/* Bits for csp->content_type */
 #define CT_TEXT   1 /* Suitable for pcrs filtering */
 #define CT_GIF    2 /* Suitable for GIF filtering */
-#define CT_TABOO  3 /* DONT filter */
+#define CT_TABOO  4 /* DONT filter */
 
 #define ACTION_MASK_ALL        (~0U)
 
@@ -595,20 +680,19 @@ struct iob
 #define ACTION_DEANIMATE       0x00000002UL
 #define ACTION_DOWNGRADE       0x00000004UL
 #define ACTION_FAST_REDIRECTS  0x00000008UL
-#define ACTION_FILTER          0x00000010UL
-#define ACTION_HIDE_FORWARDED  0x00000020UL
-#define ACTION_HIDE_FROM       0x00000040UL
-#define ACTION_HIDE_REFERER    0x00000080UL /* sic - follow HTTP, not English */
-#define ACTION_HIDE_USER_AGENT 0x00000100UL
-#define ACTION_IMAGE           0x00000200UL
-#define ACTION_IMAGE_BLOCKER   0x00000400UL
-#define ACTION_NO_COMPRESSION  0x00000800UL
-#define ACTION_NO_COOKIE_KEEP  0x00001000UL
-#define ACTION_NO_COOKIE_READ  0x00002000UL
-#define ACTION_NO_COOKIE_SET   0x00004000UL
-#define ACTION_NO_POPUPS       0x00008000UL
-#define ACTION_VANILLA_WAFER   0x00010000UL
-#define ACTION_LIMIT_CONNECT   0x00020000UL
+#define ACTION_HIDE_FORWARDED  0x00000010UL
+#define ACTION_HIDE_FROM       0x00000020UL
+#define ACTION_HIDE_REFERER    0x00000040UL /* sic - follow HTTP, not English */
+#define ACTION_HIDE_USER_AGENT 0x00000080UL
+#define ACTION_IMAGE           0x00000100UL
+#define ACTION_IMAGE_BLOCKER   0x00000200UL
+#define ACTION_NO_COMPRESSION  0x00000400UL
+#define ACTION_NO_COOKIE_KEEP  0x00000800UL
+#define ACTION_NO_COOKIE_READ  0x00001000UL
+#define ACTION_NO_COOKIE_SET   0x00002000UL
+#define ACTION_NO_POPUPS       0x00004000UL
+#define ACTION_VANILLA_WAFER   0x00008000UL
+#define ACTION_LIMIT_CONNECT   0x00010000UL
 
 #define ACTION_STRING_DEANIMATE     0
 #define ACTION_STRING_FROM          1
@@ -620,7 +704,9 @@ struct iob
 
 #define ACTION_MULTI_ADD_HEADER     0
 #define ACTION_MULTI_WAFER          1
-#define ACTION_MULTI_COUNT          2
+#define ACTION_MULTI_FILTER         2
+#define ACTION_MULTI_COUNT          3
+
 
 /*
  * This structure contains a list of actions to apply to a URL.
@@ -698,7 +784,13 @@ struct url_actions
 #define CSP_FLAG_TOGGLED_ON 0x20 /* Set if we are toggled on (FEATURE_TOGGLE) */
 
 /*
- * The state of a JunkBuster processing thread.
+ * Maximum number of actions files.  This limit is arbitrary - it's just used
+ * to size an array.
+ */
+#define MAX_ACTION_FILES 10
+
+/*
+ * The state of a Privoxy processing thread.
  */
 struct client_state
 {
@@ -709,10 +801,10 @@ struct client_state
    struct current_action_spec  action[1];
 
    /* socket to talk to client (web browser) */
-   int  cfd;
+   jb_socket cfd;
 
    /* socket to talk to server (web server or proxy) */
-   int  sfd;
+   jb_socket sfd;
 
    /* Multi-purpose flag container, see CSP_FLAG_* above */
    unsigned short int flags;
@@ -751,7 +843,7 @@ struct client_state
    char   *x_forwarded;
 
    /* files associated with this client */
-   struct file_list *actions_list;
+   struct file_list *actions_list[MAX_ACTION_FILES];
 
    struct file_list *rlist;   /* pcrs job file */
    size_t content_length;     /* Length after content modification */
@@ -797,7 +889,7 @@ struct cgi_dispatcher
 
 
 /*
- * A data file used by JunkBuster.  Kept in a linked list.
+ * A data file used by Privoxy.  Kept in a linked list.
  */
 struct file_list
 {
@@ -869,12 +961,19 @@ struct forward_spec
 #define FORWARD_SPEC_INITIALIZER { { URL_SPEC_INITIALIZER }, 0, NULL, 0, NULL, 0, NULL }
 
 
+/*
+ * This struct represents one filter (one block) from
+ * the re_filterfile. If there is more than one filter
+ * in the file, the file will be represented by a
+ * chained list of re_filterfile specs.
+ */
 struct re_filterfile_spec
 {
-   char *username;
-   char *filtername;
-   struct list patterns[1];
-   pcrs_job *joblist;
+   char *name;                      /* Name from FILTER: statement in re_filterfile */
+   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 */
+   struct re_filterfile_spec *next; /* The pointer for chaining */
 };
 
 #ifdef FEATURE_ACL
@@ -917,14 +1016,15 @@ struct configuration_spec
    int debug;
    int multi_threaded;
 
-   /* Features that can be enabled/disabled throuigh the config file */
+   /* Features that can be enabled/disabled through the config file */
    unsigned feature_flags;
 
    const char *logfile;
 
    const char *confdir;
    const char *logdir;
-   const char *actions_file;
+   const char *actions_file[MAX_ACTION_FILES];
+   const char *actions_file_short[MAX_ACTION_FILES];
 
    /* The administrator's email address */
    char *admin_address;
@@ -932,6 +1032,9 @@ struct configuration_spec
    /* A URL with info on this proxy */
    char *proxy_info_url;
 
+   /* URL to the user manual (on our website or local copy) */
+   char *usermanual;
+
    const char *re_filterfile;
 
 #ifdef FEATURE_COOKIE_JAR
@@ -979,12 +1082,20 @@ struct configuration_spec
 #define SZ(X)  (sizeof(X) / sizeof(*X))
 
 #ifdef FEATURE_FORCE_LOAD
-#define FORCE_PREFIX "/IJB-FORCE-LOAD"
+#define FORCE_PREFIX "/PRIVOXY-FORCE"
 #endif /* def FEATURE_FORCE_LOAD */
 
+#ifdef FEATURE_NO_GIFS
+#define BUILTIN_IMAGE_MIMETYPE "image/png"
+#else
+#define BUILTIN_IMAGE_MIMETYPE "image/gif"
+#endif /* def FEATURE_NO_GIFS */
+
+
 /* Hardwired URLs */
-#define HOME_PAGE_URL       "http://ijbswa.sourceforge.net"
-#define REDIRECT_URL        HOME_PAGE_URL "/redirect.php?v=" VERSION "&to="
+#define HOME_PAGE_URL     "http://www.privoxy.org"
+#define USER_MANUAL_URL   HOME_PAGE_URL "/" VERSION "/user-manual/"
+#define HELP_LINK_PREFIX  "configuration.html#"
 
 /*
  * The "hosts" to intercept and display CGI pages.
@@ -995,9 +1106,9 @@ struct configuration_spec
  * 2) CGI_SITE_2_PATH must not end with /, one will be added automatically.
  * 3) CGI_SITE_2_PATH must start with /, unless it is the empty string.
  */
-#define CGI_SITE_1_HOST "i.j.b"
-#define CGI_SITE_2_HOST "ijbswa.sourceforge.net"
-#define CGI_SITE_2_PATH "/config"
+#define CGI_SITE_1_HOST "p.p"
+#define CGI_SITE_2_HOST "config.privoxy.org"
+#define CGI_SITE_2_PATH ""
 
 /*
  * The prefix for CGI pages.  Written out in generated HTML.
@@ -1009,7 +1120,7 @@ struct configuration_spec
 /* HTTP snipplets */
 static const char CSUCCEED[] =
    "HTTP/1.0 200 Connection established\n"
-   "Proxy-Agent: IJ/" VERSION "\r\n\r\n";
+   "Proxy-Agent: Privoxy/" VERSION "\r\n\r\n";
 
 static const char CHEADER[] =
    "HTTP/1.0 400 Invalid header received from browser\r\n\r\n";