From: Fabian Keil <fk@fabiankeil.de>
Date: Wed, 16 Dec 2009 08:35:47 +0000 (+0000)
Subject: Add optional support for FreeBSD's accf_http(9).
X-Git-Tag: v_3_0_16~105
X-Git-Url: http://www.privoxy.org/gitweb/%22https:/faq/@default-cgi@/@default-cgi@toggle?a=commitdiff_plain;h=52feb95cca9309b54829313054d8f4befabbd028;p=privoxy.git

Add optional support for FreeBSD's accf_http(9).
---

diff --git a/acconfig.h b/acconfig.h
index b3953b99..3adead6e 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -85,6 +85,11 @@
  */
 #undef FEATURE_ACL
 
+/*
+ * Allow Privoxy to use accf_http(9) if supported.
+ */
+#undef FEATURE_ACCEPT_FILTER
+
 /*
  * Enables the web-based configuration (actionsfile) editor.  If you
  * have a shared proxy, you might want to turn this off.
diff --git a/configure.in b/configure.in
index d84de501..2658be07 100644
--- a/configure.in
+++ b/configure.in
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl 
-dnl $Id: configure.in,v 1.139 2009/10/24 11:11:33 fabiankeil Exp $
+dnl $Id: configure.in,v 1.140 2009/11/07 13:44:43 fabiankeil Exp $
 dnl 
 dnl Written by and Copyright (C) 2001-2009 the
 dnl Privoxy team. http://www.privoxy.org/
@@ -32,7 +32,7 @@ dnl =================================================================
 dnl AutoConf Initialization
 dnl =================================================================
 
-AC_REVISION($Revision: 1.139 $)
+AC_REVISION($Revision: 1.140 $)
 AC_INIT(jcc.c)
 
 if test ! -f config.h.in; then
@@ -848,6 +848,12 @@ AC_ARG_ENABLE(extended-host-patterns,
   AC_DEFINE(FEATURE_EXTENDED_HOST_PATTERNS)
 fi])
 
+AC_ARG_ENABLE(accept-filter,
+[  --enable-accept-filter          Try to use accf_http(9) if supported.],
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_ACCEPT_FILTER)
+fi])
+
 dnl pcre/pcrs is needed for CGI anyway, so
 dnl the choice is only between static and
 dnl dynamic:
diff --git a/jbsockets.c b/jbsockets.c
index ebfea1b5..5de9a54b 100644
--- a/jbsockets.c
+++ b/jbsockets.c
@@ -1,4 +1,4 @@
-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.69 2009/12/15 17:41:36 fabiankeil Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.70 2009/12/15 17:51:14 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
@@ -1042,6 +1042,12 @@ int accept_connection(struct client_state * csp, jb_socket fd)
 #else
    do
    {
+#if defined(FEATURE_ACCEPT_FILTER) && defined(SO_ACCEPTFILTER)
+      struct accept_filter_arg af_options;
+      bzero(&af_options, sizeof(af_options));
+      strlcpy(af_options.af_name, "httpready", sizeof(af_options.af_name));
+      setsockopt(fd, SOL_SOCKET, SO_ACCEPTFILTER, &af_options, sizeof(af_options));
+#endif
       afd = accept (fd, (struct sockaddr *) &client, &c_length);
    } while (afd < 1 && errno == EINTR);
    if (afd < 0)