#ifndef PROJECT_H_INCLUDED
#define PROJECT_H_INCLUDED
/** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 1.81 2006/09/06 13:03:04 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.89 2007/01/27 13:09:16 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
* project. Does not define any variables or functions
* (though it does declare some macros).
*
- * Copyright : Written by and Copyright (C) 2001 - 2004 the SourceForge
+ * Copyright : Written by and Copyright (C) 2001 - 2007 the SourceForge
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
*
* Revisions :
* $Log: project.h,v $
+ * Revision 1.89 2007/01/27 13:09:16 fabiankeil
+ * Add new config option "templdir" to
+ * change the templates directory.
+ *
+ * Revision 1.88 2007/01/25 13:36:59 fabiankeil
+ * Add csp->error_message for failure reasons
+ * that should be embedded into the CGI pages.
+ *
+ * Revision 1.87 2007/01/01 19:36:37 fabiankeil
+ * Integrate a modified version of Wil Mahan's
+ * zlib patch (PR #895531).
+ *
+ * Revision 1.86 2006/12/31 17:56:37 fabiankeil
+ * Added config option accept-intercepted-requests
+ * and disabled it by default.
+ *
+ * Revision 1.85 2006/12/31 15:03:31 fabiankeil
+ * Fix gcc43 compiler warnings and a comment.
+ *
+ * Revision 1.84 2006/12/21 12:57:48 fabiankeil
+ * Add config option "split-large-forms"
+ * to work around the browser bug reported
+ * in BR #1570678.
+ *
+ * Revision 1.83 2006/12/06 19:26:29 fabiankeil
+ * Moved HTTP snipplets into jcc.c. They aren't
+ * used anywhere else.
+ *
+ * Revision 1.82 2006/09/20 15:50:31 fabiankeil
+ * Doubled size of HOSTENT_BUFFER_SIZE to mask
+ * problems with gethostbyname_r and some
+ * /etc/hosts configurations. Only a workaround
+ * until we get the real fix ready.
+ * Thanks FĂ©lix Rauch for reporting.
+ *
+ * Increased value of MAX_TRUSTED_REFERRERS from 64 to 512.
+ *
* Revision 1.81 2006/09/06 13:03:04 fabiankeil
* Respond with 400 and a short text message
* if the client tries to use Privoxy as FTP proxy.
#define JB_ERR_PARSE 4 /**< Error parsing file */
#define JB_ERR_MODIFIED 5 /**< File has been modified outside of the
CGI actions editor. */
-
+#define JB_ERR_COMPRESS 6 /**< Error on decompression */
/**
* This macro is used to free a pointer that may be NULL.
int dcount; /**< How many parts to this domain? (length of dvec) */
};
+/**
+ * Reasons for generating a http_response instead of delivering
+ * the requested resource. Mostly ordered the way they are checked
+ * for in chat().
+ */
+#define RSP_REASON_UNSUPPORTED 1
+#define RSP_REASON_BLOCKED 2
+#define RSP_REASON_UNTRUSTED 3
+#define RSP_REASON_REDIRECTED 4
+#define RSP_REASON_CGI_CALL 5
+#define RSP_REASON_NO_SUCH_DOMAIN 6
+#define RSP_REASON_FORWARDING_FAILED 7
+#define RSP_REASON_CONNECT_FAILED 8
+#define RSP_REASON_OUT_OF_MEMORY 9
+#define RSP_REASON_INTERNAL_ERROR 10
/**
* Response generated by CGI, blocker, or error handler
size_t 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 browser (e.g. images). */
+ int reason; /**< Why the response was generated in the first place. */
};
/**
int port; /**< The port number, or 0 to match all ports. */
char *path; /**< The source for the regex. */
- int pathlen; /**< ==strlen(path). Needed for prefix matching. FIXME: Now obsolete? */
+ size_t pathlen; /**< ==strlen(path). Needed for prefix matching. FIXME: Now obsolete? */
regex_t *preg; /**< Regex for matching path part */
};
*/
#define IOB_RESET(CSP) if(CSP->iob->buf) free(CSP->iob->buf); memset(CSP->iob, '\0', sizeof(CSP->iob));
-/* Bits for csp->content_type */
-#define CT_TEXT 1 /**< csp->content_type bitmask:
- Suitable for pcrs filtering. */
-#define CT_GIF 2 /**< csp->content_type bitmask:
- Suitable for GIF filtering. */
-#define CT_TABOO 4 /**< csp->content_type bitmask:
- DO NOT filter, irrespective of other flags. */
-#define CT_JPEG 8 /**< csp->content_type bitmask:
- Suitable for JPEG filtering. */
+/* Bits for csp->content_type bitmask: */
+#define CT_TEXT 0x0001U /**< Suitable for pcrs filtering. */
+#define CT_GIF 0x0002U /**< Suitable for GIF filtering. */
+#define CT_TABOO 0x0004U /**< DO NOT filter, irrespective of other flags. */
+#define CT_JPEG 0x0008U /**< Suitable for JPEG filtering. */
+
+/* Although these are not, strictly speaking, content types
+ * (they are content encodings), it is simple to handle them
+ * as such.
+ */
+#define CT_GZIP 0x0010U /**< gzip-compressed data. */
+#define CT_DEFLATE 0x0020U /**< zlib-compressed data. */
/**
* The mask which includes all actions.
jb_socket sfd;
/** Multi-purpose flag container, see CSP_FLAG_* above */
- unsigned short int flags;
+ unsigned int flags;
/** Client PC's IP address, as reported by the accept() function.
As a string. */
struct list cookie_list[1];
/** MIME-Type key, see CT_* above */
- unsigned short int content_type;
+ unsigned int content_type;
/** The "X-Forwarded-For:" header sent by the client */
char *x_forwarded;
#endif /* def FEATURE_TRUST */
+ /**
+ * Failure reason to embedded in the CGI error page,
+ * or NULL. Currently only used for socks errors.
+ */
+ char *error_message;
+
/** Next thread in linked list. Only read or modify from the main thread! */
struct client_state *next;
};
};
/**
- * Arbitrary limit for the number of trusted referrers
- * Privoxy can print in its blocking message.
+ * Arbitrary limit for the number of trusted referrers.
*/
#define MAX_TRUSTED_REFERRERS 512
/** configuration_spec::feature_flags: CGI actions editor. */
-#define RUNTIME_FEATURE_CGI_EDIT_ACTIONS 1
+#define RUNTIME_FEATURE_CGI_EDIT_ACTIONS 1
/** configuration_spec::feature_flags: Web-based toggle. */
-#define RUNTIME_FEATURE_CGI_TOGGLE 2
+#define RUNTIME_FEATURE_CGI_TOGGLE 2
/** configuration_spec::feature_flags: HTTP-header-based toggle. */
-#define RUNTIME_FEATURE_HTTP_TOGGLE 4
+#define RUNTIME_FEATURE_HTTP_TOGGLE 4
+
+/** configuration_spec::feature_flags: Split large forms to limit the number of GET arguments. */
+#define RUNTIME_FEATURE_SPLIT_LARGE_FORMS 8
+
+/** configuration_spec::feature_flags: Check the host header for requests with host-less request lines. */
+#define RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS 16
+
/**
* Data loaded from the configuration file.
* - RUNTIME_FEATURE_CGI_EDIT_ACTIONS
* - RUNTIME_FEATURE_CGI_TOGGLE
* - RUNTIME_FEATURE_HTTP_TOGGLE
+ * - RUNTIME_FEATURE_SPLIT_LARGE_FORMS
*/
unsigned feature_flags;
/** The config file directory. */
const char *confdir;
+ /** The directory for customized CGI templates. */
+ const char *templdir;
+
/** The log file directory. */
const char *logdir;
*/
#define CGI_PREFIX "http://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
-
-/* HTTP snipplets.
- *
- * FIXME: This is very inefficient. There could be one copy of these strings
- * for each .c file!! They should be "extern", not "static".
- */
-static const char CSUCCEED[] =
- "HTTP/1.0 200 Connection established\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";
-
-static const char CFORBIDDEN[] =
- "HTTP/1.0 403 Connection not allowable\r\nX-Hint: If you read this message interactively, then you know why this happens ,-)\r\n\r\n";
-
-static const char FTP_RESPONSE[] =
- "HTTP/1.0 400 Invalid header received from browser\r\n\r\nPrivoxy doesn't support FTP. Please fix your setup.";
-
-
#ifdef __cplusplus
} /* extern "C" */
#endif