Add optional support for FreeBSD's accf_http(9).
authorFabian Keil <fk@fabiankeil.de>
Wed, 16 Dec 2009 08:35:47 +0000 (08:35 +0000)
committerFabian Keil <fk@fabiankeil.de>
Wed, 16 Dec 2009 08:35:47 +0000 (08:35 +0000)
acconfig.h
configure.in
jbsockets.c

index b3953b9..3adead6 100644 (file)
  */
 #undef FEATURE_ACL
 
  */
 #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.
 /*
  * Enables the web-based configuration (actionsfile) editor.  If you
  * have a shared proxy, you might want to turn this off.
index d84de50..2658be0 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl 
 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/
 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 =================================================================
 
 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
 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_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:
 dnl pcre/pcrs is needed for CGI anyway, so
 dnl the choice is only between static and
 dnl dynamic:
index ebfea1b..5de9a54 100644 (file)
@@ -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 $
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
@@ -1042,6 +1042,12 @@ int accept_connection(struct client_state * csp, jb_socket fd)
 #else
    do
    {
 #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)
       afd = accept (fd, (struct sockaddr *) &client, &c_length);
    } while (afd < 1 && errno == EINTR);
    if (afd < 0)