New error-handling support: jb_err type and JB_ERR_xxx constants
authorjongfoster <jongfoster@users.sourceforge.net>
Tue, 23 Oct 2001 21:19:04 +0000 (21:19 +0000)
committerjongfoster <jongfoster@users.sourceforge.net>
Tue, 23 Oct 2001 21:19:04 +0000 (21:19 +0000)
CGI functions now return a jb_err, and their parameters map is const.
Support for RUNTIME_FEATUREs to enable/disable config editor
Adding a few comments

project.h

index 550d29d..2b2c625 100644 (file)
--- a/project.h
+++ b/project.h
@@ -1,6 +1,6 @@
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
-#define PROJECT_H_VERSION "$Id: project.h,v 1.36 2001/10/10 16:45:15 oes Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.37 2001/10/14 22:14:01 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
  *
  * Revisions   :
  *    $Log: project.h,v $
  *
  * Revisions   :
  *    $Log: project.h,v $
+ *    Revision 1.37  2001/10/14 22:14:01  jongfoster
+ *    Removing name_length field from struct cgi_dispatcher, as this is
+ *    now calculated at runtime from the "name" field.
+ *
  *    Revision 1.36  2001/10/10 16:45:15  oes
  *    Added LIMIT_CONNECT action and string
  *    Fixed HTTP message line termination
  *    Revision 1.36  2001/10/10 16:45:15  oes
  *    Added LIMIT_CONNECT action and string
  *    Fixed HTTP message line termination
 extern "C" {
 #endif
 
 extern "C" {
 #endif
 
+
+/*
+ * Error codes.  Functions returning these should return a jb_err
+ */
+#define JB_ERR_OK         0 /* Success, no error                        */
+#define JB_ERR_MEMORY     1 /* Out of memory                            */
+#define JB_ERR_CGI_PARAMS 2 /* Missing or corrupt CGI parameters        */
+#define JB_ERR_FILE       3 /* Error opening, reading or writing a file */
+#define JB_ERR_PARSE      4 /* Error parsing file                       */
+#define JB_ERR_MODIFIED   5 /* File has been modified outside of the    */
+                            /* CGI actions editor.                      */
+typedef int jb_err;
+
+
+/*
+ * This macro is used to free a pointer that may be NULL
+ */
 #define freez(X)  { if(X) { free(X); X = NULL ; } }
 
 #define freez(X)  { if(X) { free(X); X = NULL ; } }
 
+/*
+ * Use for statically allocated buffers if you have no other choice.
+ * Remember to check the length of what you write into the buffer
+ * - we don't want any buffer overflows!
+ */
 #define BUFFER_SIZE 5000
 
 #define BUFFER_SIZE 5000
 
+/*
+ * So you can say "while (FOREVER) { ...do something... }"
+ */
 #define FOREVER 1
 
 /* Default IP and port to listen on */
 #define FOREVER 1
 
 /* Default IP and port to listen on */
@@ -599,6 +628,9 @@ struct url_actions
 #define CSP_FLAG_REJECTED   0x10 /* Set if request was blocked.  */
 #define CSP_FLAG_TOGGLED_ON 0x20 /* Set if we are toggled on (FEATURE_TOGGLE) */
 
 #define CSP_FLAG_REJECTED   0x10 /* Set if request was blocked.  */
 #define CSP_FLAG_TOGGLED_ON 0x20 /* Set if we are toggled on (FEATURE_TOGGLE) */
 
+/*
+ * The state of a JunkBuster processing thread.
+ */
 struct client_state
 {
    /* The proxy's configuration */
 struct client_state
 {
    /* The proxy's configuration */
@@ -675,6 +707,9 @@ struct client_state
 };
 
 
 };
 
 
+/*
+ * List of functions to run on a list of headers
+ */
 struct parsers
 {
    char *str;
 struct parsers
 {
    char *str;
@@ -682,13 +717,21 @@ struct parsers
    char *(*parser)(const struct parsers *, const char *, struct client_state *);
 };
 
    char *(*parser)(const struct parsers *, const char *, struct client_state *);
 };
 
+
+/*
+ * List of available CGI functions.
+ */
 struct cgi_dispatcher
 {
 struct cgi_dispatcher
 {
-   const char *name;
-   int         (*handler)(struct client_state *csp, struct http_response *rsp, struct map *parameters);
-   const char *description;
+   const char * const name;
+   jb_err    (* const handler)(struct client_state *csp, struct http_response *rsp, const struct map *parameters);
+   const char * const description;
 };
 
 };
 
+
+/*
+ * A data file used by JunkBuster.  Kept in a linked list.
+ */
 struct file_list
 {
    /*
 struct file_list
 {
    /*
@@ -792,6 +835,11 @@ struct access_control_list
 /* Maximum number of loaders (actions, re_filter, ...) */
 #define NLOADERS 8
 
 /* Maximum number of loaders (actions, re_filter, ...) */
 #define NLOADERS 8
 
+
+#define RUNTIME_FEATURE_CGI_EDIT_ACTIONS  1
+#define RUNTIME_FEATURE_CGI_TOGGLE        2
+
+
 /*
  * Data loaded from the configuration file.
  *
 /*
  * Data loaded from the configuration file.
  *
@@ -802,6 +850,9 @@ struct configuration_spec
    int debug;
    int multi_threaded;
 
    int debug;
    int multi_threaded;
 
+   /* Features that can be enabled/disabled throuigh the config file */
+   unsigned feature_flags;
+
    const char *logfile;
 
    const char *confdir;
    const char *logfile;
 
    const char *confdir;