X-Git-Url: http://www.privoxy.org/gitweb/new.html?a=blobdiff_plain;f=project.h;h=dac701376c49e14b9005152cb22926725af6f4f1;hb=cce59922fb749693e74882cb52ced0fb43b652c7;hp=5eab88fbe8a4c40c5d30d7e37c9024125079b489;hpb=25fc4d8f8d4e53ec0f7b1ff4ecc5a9e6301cd6c0;p=privoxy.git
diff --git a/project.h b/project.h
index 5eab88fb..dac70137 100644
--- a/project.h
+++ b/project.h
@@ -1,7 +1,7 @@
#ifndef PROJECT_H_INCLUDED
#define PROJECT_H_INCLUDED
/** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 1.151 2009/10/04 15:45:11 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.162 2011/02/19 13:56:55 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
@@ -10,7 +10,7 @@
* project. Does not define any variables or functions
* (though it does declare some macros).
*
- * Copyright : Written by and Copyright (C) 2001-2009 the
+ * Copyright : Written by and Copyright (C) 2001-2010 the
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
@@ -46,9 +46,17 @@
/* Needed for pcre choice */
#include "config.h"
-#ifdef HAVE_RFC2553
/* Need for struct sockaddr_storage */
-#include
+#ifdef HAVE_RFC2553
+# ifndef _WIN32
+# include
+# include
+# else
+# include
+# include
+# include
+ typedef unsigned short in_port_t;
+# endif
#endif
@@ -308,33 +316,36 @@ struct http_request
* 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
-#define RSP_REASON_CONNECTION_TIMEOUT 11
-#define RSP_REASON_NO_SERVER_DATA 12
+enum crunch_reason
+{
+ UNSUPPORTED,
+ BLOCKED,
+ UNTRUSTED,
+ REDIRECTED,
+ CGI_CALL,
+ NO_SUCH_DOMAIN,
+ FORWARDING_FAILED,
+ CONNECT_FAILED,
+ OUT_OF_MEMORY,
+ INTERNAL_ERROR,
+ CONNECTION_TIMEOUT,
+ NO_SERVER_DATA
+};
/**
* Response generated by CGI, blocker, or error handler
*/
struct http_response
{
- char *status; /**< HTTP status (string). */
- struct list headers[1]; /**< List of header lines. */
- char *head; /**< Formatted http response head. */
- size_t head_length; /**< Length of http response head. */
- char *body; /**< HTTP document body. */
- 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. */
+ enum crunch_reason crunch_reason; /**< Why the response was generated in the first place. */
+ char *status; /**< HTTP status (string). */
+ struct list headers[1]; /**< List of header lines. */
+ char *head; /**< Formatted http response head. */
+ size_t head_length; /**< Length of http response head. */
+ char *body; /**< HTTP document body. */
+ 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). */
};
/**
@@ -698,6 +709,11 @@ struct reusable_connection
*/
#define CSP_FLAG_TOGGLED_ON 0x20U
+/**
+ * Flag for csp->flags: Set if we answered the request ourselve.
+ */
+#define CSP_FLAG_CRUNCHED 0x40U
+
/**
* Flag for csp->flags: Set if an acceptable Connection header
* has already been set by the client.
@@ -749,7 +765,7 @@ struct reusable_connection
#define CSP_FLAG_SERVER_CONTENT_LENGTH_SET 0x00002000U
/**
- * Flag for csp->flags: Set if we know the content lenght,
+ * Flag for csp->flags: Set if we know the content length,
* either because the server set it, or we figured it out
* on our own.
*/
@@ -906,11 +922,17 @@ struct client_state
* 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;
};
+/**
+ * List of client states so the main thread can keep
+ * track of them and garbage collect their resources.
+ */
+struct client_states
+{
+ struct client_states *next;
+ struct client_state csp;
+};
/**
* A function to add a header
@@ -1009,12 +1031,16 @@ struct block_spec
#endif /* def FEATURE_TRUST */
-
-#define SOCKS_NONE 0 /**< Don't use a SOCKS server */
-#define SOCKS_4 40 /**< original SOCKS 4 protocol */
-#define SOCKS_4A 41 /**< as modified for hosts w/o external DNS */
-#define SOCKS_5 50 /**< as modified for hosts w/o external DNS */
-
+enum forwarder_type {
+ /**< Don't use a SOCKS server */
+ SOCKS_NONE = 0,
+ /**< original SOCKS 4 protocol */
+ SOCKS_4 = 40,
+ /**< SOCKS 4A, DNS resolution is done by the SOCKS server */
+ SOCKS_4A = 41,
+ /**< SOCKS 5 with hostnames, DNS resolution is done by the SOCKS server */
+ SOCKS_5 = 50,
+};
/**
* How to forward a connection to a parent proxy.
@@ -1025,7 +1051,7 @@ struct forward_spec
struct url_spec url[1];
/** Connection type. Must be SOCKS_NONE, SOCKS_4, SOCKS_4A or SOCKS_5. */
- int type;
+ enum forwarder_type type;
/** SOCKS server hostname. Only valid if "type" is SOCKS_4 or SOCKS_4A. */
char *gateway_host;
@@ -1050,12 +1076,14 @@ struct forward_spec
#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
-
+enum filter_type
+{
+ FT_CONTENT_FILTER = 0,
+ FT_CLIENT_HEADER_FILTER = 1,
+ FT_SERVER_HEADER_FILTER = 2,
+ FT_CLIENT_HEADER_TAGGER = 3,
+ FT_SERVER_HEADER_TAGGER = 4,
+};
#define MAX_FILTER_TYPES 5
/**
@@ -1070,7 +1098,7 @@ struct re_filterfile_spec
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). */
+ enum filter_type 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. */
@@ -1148,6 +1176,9 @@ struct access_control_list
/** configuration_spec::feature_flags: Share outgoing connections between different client connections. */
#define RUNTIME_FEATURE_CONNECTION_SHARING 256U
+/** configuration_spec::feature_flags: Pages blocked with +handle-as-empty-doc get a return status of 200 OK. */
+#define RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK 512U
+
/**
* Data loaded from the configuration file.
*
@@ -1174,6 +1205,7 @@ struct configuration_spec
* - RUNTIME_FEATURE_CGI_CRUNCHING
* - RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE
* - RUNTIME_FEATURE_CONNECTION_SHARING
+ * - RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK
*/
unsigned feature_flags;
@@ -1257,6 +1289,9 @@ struct configuration_spec
#ifdef FEATURE_CONNECTION_KEEP_ALIVE
/* Maximum number of seconds after which an open connection will no longer be reused. */
unsigned int keep_alive_timeout;
+
+ /* Assumed server-side keep alive timeout if none is specified. */
+ unsigned int default_server_timeout;
#endif
/** All options from the config file, HTML-formatted. */