#ifndef PROJECT_H_INCLUDED
#define PROJECT_H_INCLUDED
/** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 1.130 2009/04/17 11:27:49 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.133 2009/04/24 15:29:43 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
*
* Revisions :
* $Log: project.h,v $
+ * Revision 1.133 2009/04/24 15:29:43 fabiankeil
+ * Allow to limit the number of of client connections.
+ *
+ * Revision 1.132 2009/04/17 11:45:19 fabiankeil
+ * Replace HAVE_GETADDRINFO and HAVE_GETNAMEINFO macros
+ * with HAVE_RFC2553 macro. Original patch by Petr Pisar.
+ *
+ * Revision 1.131 2009/04/17 11:34:35 fabiankeil
+ * Style cosmetics for the IPv6 code.
+ *
* Revision 1.130 2009/04/17 11:27:49 fabiankeil
* Petr Pisar's privoxy-3.0.12-ipv6-3.diff.
*
/* Needed for pcre choice */
#include "config.h"
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_RFC2553
/* Need for struct sockaddr_storage */
#include <sys/socket.h>
#endif
};
+/*
+ * Structure to make sure we only reuse the server socket
+ * if the host and forwarding settings are the same.
+ */
+struct reusable_connection
+{
+ jb_socket sfd;
+ int in_use;
+ time_t timestamp;
+
+ char *host;
+ int port;
+ int forwarder_type;
+ char *gateway_host;
+ int gateway_port;
+ char *forward_host;
+ int forward_port;
+};
+
+
/*
* Flags for use in csp->flags
*/
/**
* Flag for csp->flags: Set if an acceptable Connection header
- * is already set.
+ * has already been set by the client.
*/
#define CSP_FLAG_CLIENT_CONNECTION_HEADER_SET 0x00000040U
/**
- * Flag for csp->flags: Set if adding the 'Connection: close' header
- * for the server isn't necessary.
+ * Flag for csp->flags: Set if an acceptable Connection header
+ * has already been set by the server.
*/
-#define CSP_FLAG_SERVER_CONNECTION_CLOSE_SET 0x00000080U
+#define CSP_FLAG_SERVER_CONNECTION_HEADER_SET 0x00000080U
/**
* Flag for csp->flags: Signals header parsers whether they
* content length.
*/
#define CSP_FLAG_CONTENT_LENGTH_SET 0x00002000U
+
+/**
+ * Flag for csp->flags: Set if the client wants to keep
+ * the connection alive.
+ */
+#define CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE 0x00004000U
#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
/*
/** socket to talk to server (web server or proxy) */
jb_socket sfd;
+ /** current connection to the server (may go through a proxy) */
+ struct reusable_connection server_connection;
+
/** Multi-purpose flag container, see CSP_FLAG_* above */
unsigned int flags;
/** Client PC's IP address, as reported by the accept() function.
As a string. */
char *ip_addr_str;
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_RFC2553
/** Client PC's TCP address, as reported by the accept() function.
As a sockaddr. */
struct sockaddr_storage tcp_addr;
/** Client PC's IP address, as reported by the accept() function.
As a number. */
unsigned long ip_addr_long;
-#endif /* def HAVE_GETADDRINFO */
+#endif /* def HAVE_RFC2553 */
/** The URL that was requested */
struct http_request http[1];
*/
struct access_control_addr
{
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_RFC2553
struct sockaddr_storage addr; /* <The TCP address in network order. */
struct sockaddr_storage mask; /* <The TCP mask in network order. */
#else
unsigned long addr; /**< The IP address as an integer. */
unsigned long mask; /**< The network mask as an integer. */
unsigned long port; /**< The port number. */
-#endif /* HAVE_GETADDRINFO */
+#endif /* HAVE_RFC2553 */
};
/**
{
struct access_control_addr src[1]; /**< Client IP address */
struct access_control_addr dst[1]; /**< Website or parent proxy IP address */
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_RFC2553
int wildcard_dst; /** < dst address is wildcard */
#endif
struct forward_spec *forward;
/** Number of retries in case a forwarded connection attempt fails */
- int forwarded_connect_retries;
+ int forwarded_connect_retries;
+
+ /** Maximum number of client connections. */
+ int max_client_connections;
/* Timeout when waiting on sockets for data to become available. */
int socket_timeout;
+#ifdef FEATURE_CONNECTION_KEEP_ALIVE
+ /* Number of seconds after which an open connection will no longer be reused. */
+ int keep_alive_timeout;
+#endif
+
/** All options from the config file, HTML-formatted. */
char *proxy_args;