privoxy.git
6 years agogenerate correct html - no 
 chars
Lee [Mon, 19 Mar 2018 01:16:39 +0000 (21:16 -0400)]
generate correct html - no 
 chars

a blank line right after a <para>, <literallayout>, <screen>
or just before the closing tag causes docbook 3.1 to generate
a '&#13;'

eg: this sgml
 following patterns</quote>, and <literal>-block</literal> means <quote>don't
 block URLs that match the following patterns, even if <literal>+block</literal>
 previously applied.</quote>

</para>

<para>
 Again, actions are invoked by placing them on a line, enclosed in curly braces and

leads to this html:
>, and <TT
CLASS="LITERAL"
>-block</TT
> means <SPAN
CLASS="QUOTE"
>"don't
 block URLs that match the following patterns, even if <TT
CLASS="LITERAL"
>+block</TT
>
 previously applied."</SPAN
>&#13;</P
><P
> Again, actions are invoked by placing them on a line, enclosed in curly braces and

having "&#13;" right after the "</SPAN>" is just wrong.

6 years agomake dok: don't run tidy on the docbook generated html
Lee [Sun, 18 Mar 2018 15:00:16 +0000 (11:00 -0400)]
make dok: don't run tidy on the docbook generated html

at least as of tidy 5.6.0, tidy -indent -wrap
breaks <pre> formatting if the line is wrapped

<pre>a long line
</pre>

when indented and wrapped ends up like this
      <pre>
      a long line
</pre>

The pre-formatted text shouldn't have leading spaces added.  It should look like
      <pre>
a long line
</pre>

6 years agouse the wayback machine for the docbook site that no longer exists
Lee [Sun, 18 Mar 2018 14:19:24 +0000 (10:19 -0400)]
use the wayback machine for the docbook site that no longer exists

 url="http://opensource.bureau-cornavin.com/crash-course/index.html"
$ nslookup opensource.bureau-cornavin.com.
** server can't find opensource.bureau-cornavin.com: Non-existent domain

6 years agorebuild docs
Lee [Thu, 15 Mar 2018 15:26:04 +0000 (11:26 -0400)]
rebuild docs

6 years agoadjust <literallayout> lines to not exceed the line wrap length
Lee [Thu, 15 Mar 2018 01:27:04 +0000 (21:27 -0400)]
adjust <literallayout> lines to not exceed the line wrap length

Ideally we shouldn't be creating pre-formatted text that exceeds
the line wrap length.
manually editing files after generating them with 'make dok' is
for the birds..

6 years agoadd faq for what to do if editing the config file is access denied
Lee [Wed, 14 Mar 2018 11:23:55 +0000 (07:23 -0400)]
add faq for what to do if editing the config file is access denied

6 years agoworkaround for tidy -indent -wrap breaking <pre> formatting
Lee [Wed, 14 Mar 2018 11:01:16 +0000 (07:01 -0400)]
workaround for tidy -indent -wrap breaking <pre> formatting

tidy -indent -wrap 78  messes up the formatting of a long
line following a <pre> tag by splitting the line into <pre>
and the text and indenting both.  eg
<pre>a really long line</pre>
is turned into
          <pre>
          a really long line</pre>
and we end up with lots of leading spaces.

change the line wrap to column 120 and hope that's enough
to keep this bug from happening

6 years agoUpdate mail address of Roland Rosenfeld and fix indentation.
Roland Rosenfeld [Tue, 13 Mar 2018 15:13:38 +0000 (16:13 +0100)]
Update mail address of Roland Rosenfeld and fix indentation.

6 years agolanguage nit
Lee [Sat, 10 Mar 2018 14:24:25 +0000 (09:24 -0500)]
language nit

Stopping to watch is like parking at a scenic overlook to admire the scenery.
We're ignoring the scenery and continuing to drive.

6 years agoRemove Id tag
Fabian Keil [Fri, 9 Mar 2018 12:08:50 +0000 (13:08 +0100)]
Remove Id tag

6 years agoRemove Id tag
Fabian Keil [Fri, 9 Mar 2018 11:55:14 +0000 (12:55 +0100)]
Remove Id tag

6 years agoBump copyright
Fabian Keil [Fri, 9 Mar 2018 11:51:22 +0000 (12:51 +0100)]
Bump copyright

6 years agoRemove id tag
Fabian Keil [Fri, 9 Mar 2018 11:48:03 +0000 (12:48 +0100)]
Remove id tag

6 years agofix typo in FAQ.
Roland Rosenfeld [Thu, 8 Mar 2018 12:25:42 +0000 (13:25 +0100)]
fix typo in FAQ.

6 years agoExpect a 404 for /show-version which no longer exists
Fabian Keil [Thu, 1 Mar 2018 11:15:12 +0000 (12:15 +0100)]
Expect a 404 for /show-version which no longer exists

6 years agoRemove cgi_show_version()
Fabian Keil [Thu, 1 Mar 2018 11:13:03 +0000 (12:13 +0100)]
Remove cgi_show_version()

It's no longer useful now that we are using git.

Eventually the git hash should be added to the
version number shown on each page.

6 years agoRemove show_rcs() and the CVS ids it relied upon
Fabian Keil [Thu, 1 Mar 2018 11:08:52 +0000 (12:08 +0100)]
Remove show_rcs() and the CVS ids it relied upon

6 years agofix comment
Lee [Wed, 7 Mar 2018 06:11:07 +0000 (01:11 -0500)]
fix comment
it's the nagle algorithm being disabled, so call it by it's name

6 years agoChange write_pid_file()'s prototype to take the path as argument
Fabian Keil [Thu, 17 Aug 2017 17:12:15 +0000 (19:12 +0200)]
Change write_pid_file()'s prototype to take the path as argument

6 years agoConsistently use the U(ngreedy) flag in the 'img-reorder' filter
Fabian Keil [Sat, 18 Mar 2017 17:54:11 +0000 (18:54 +0100)]
Consistently use the U(ngreedy) flag in the 'img-reorder' filter

6 years agoAdd brief HTTP/2 FAQ
Fabian Keil [Sat, 30 Dec 2017 10:11:14 +0000 (11:11 +0100)]
Add brief HTTP/2 FAQ

6 years ago#121: Fix typo
Fabian Keil [Fri, 29 Dec 2017 16:54:57 +0000 (17:54 +0100)]
#121: Fix typo

6 years agoAdd a web-sponsors target to only update the sponsoring page
Fabian Keil [Mon, 25 Dec 2017 12:17:48 +0000 (13:17 +0100)]
Add a web-sponsors target to only update the sponsoring page

6 years agoAdd betrugstest.com as Privoxy sponsor
Fabian Keil [Mon, 25 Dec 2017 12:05:22 +0000 (13:05 +0100)]
Add betrugstest.com as Privoxy sponsor

6 years agoRegenerate docs
Fabian Keil [Fri, 25 Aug 2017 10:47:11 +0000 (10:47 +0000)]
Regenerate docs

6 years agoFAQ: Change two more SPI links to https
Fabian Keil [Fri, 25 Aug 2017 10:46:37 +0000 (10:46 +0000)]
FAQ: Change two more SPI links to https

6 years agoFix server-response fuzzing
Fabian Keil [Sat, 12 Aug 2017 09:42:31 +0000 (09:42 +0000)]
Fix server-response fuzzing

... which I broke when I added the receive-buffer-size directive.

When fuzzing, a zero-size buffer was used which resulted in all
fuzzing inputs that were supposed to be treated as server-response
being rejected.

Setting a receive_buffer_size in process_fuzzed_input() prevents
this. The other fuzzing modes weren't affected by the regression.

6 years agoBump copyright
Fabian Keil [Sat, 12 Aug 2017 09:41:48 +0000 (09:41 +0000)]
Bump copyright

6 years agopcrs_compile_replacement(): Remove an assertion that could be triggered with invalid...
Fabian Keil [Sat, 12 Aug 2017 09:40:50 +0000 (09:40 +0000)]
pcrs_compile_replacement(): Remove an assertion that could be triggered with invalid input

Without the assertion the invalid input is properly rejected:
Error: Failed to compile pcrs replacement. Error: (pcrs:) Backreference out of range

This reverts one half of r1.50 which apparently wasn't
properly tested.

6 years agoRemove an obsolete comment
Fabian Keil [Sat, 12 Aug 2017 09:40:22 +0000 (09:40 +0000)]
Remove an obsolete comment

6 years agoCompile socks fuzzing code depending on FUZZ instead of FUZZ_SOCKS
Fabian Keil [Sat, 12 Aug 2017 09:40:14 +0000 (09:40 +0000)]
Compile socks fuzzing code depending on FUZZ instead of FUZZ_SOCKS

We no longer allow to use a fuzzing build for non-fuzzing work
so unconditionally including the socks fuzzing code doesn't add
any additional inconvenience.

6 years agoAdd the pointer to the receive buffer to the csp
Fabian Keil [Sat, 12 Aug 2017 09:37:17 +0000 (09:37 +0000)]
Add the pointer to the receive buffer to the csp

It allows to free it outside of handle_established_connection()
and will allow to use it in other functions in the future.

6 years agoStreamline handle_established_connection()'s parameter list
Fabian Keil [Sat, 12 Aug 2017 09:36:42 +0000 (09:36 +0000)]
Streamline handle_established_connection()'s parameter list

csp references fwd already so there's no need to pass
it as separate parameter as well.

6 years agoload_config(): Rearrange code to prevent a useless store
Fabian Keil [Sat, 12 Aug 2017 09:35:32 +0000 (09:35 +0000)]
load_config(): Rearrange code to prevent a useless store

6 years agoWarn when still using select()
Fabian Keil [Sat, 12 Aug 2017 09:33:25 +0000 (09:33 +0000)]
Warn when still using select()

6 years agoWarn when compiling without calloc()
Fabian Keil [Sat, 12 Aug 2017 09:33:14 +0000 (09:33 +0000)]
Warn when compiling without calloc()

6 years agoadd 'make dok-tidy' to the list of things to do for a 'make dok'
Lee [Mon, 10 Jul 2017 21:19:36 +0000 (21:19 +0000)]
add 'make dok-tidy' to the list of things to do for a 'make dok'

6 years agobump copyright
Lee [Sat, 1 Jul 2017 18:34:07 +0000 (18:34 +0000)]
bump copyright

6 years agoget rid of another compiler warning on Windows for %llu
Lee [Sat, 1 Jul 2017 17:14:12 +0000 (17:14 +0000)]
get rid of another compiler warning on Windows for %llu

i686-w64-mingw32-gcc -c -pipe -O2 -DWINVER=0x501   -mwindows -Wall -Ipcre  parsers.c -o parsers.o
parsers.c: In function 'create_content_length_header':
parsers.c:4671:36: warning: unknown conversion type character 'l' in format [-Wformat=]
    snprintf(header, buffer_length, "Content-Length: %llu", content_length);
                                    ^
parsers.c:4671:36: warning: too many arguments for format [-Wformat-extra-args]

6 years agofix format specifier in log_error for unsigned long long variables
Lee [Sat, 1 Jul 2017 17:08:25 +0000 (17:08 +0000)]
fix format specifier in log_error for unsigned long long variables

6 years agolisten_loop(): Reuse a single thread attribute object
Fabian Keil [Mon, 26 Jun 2017 12:18:21 +0000 (12:18 +0000)]
listen_loop(): Reuse a single thread attribute object

The object doesn't change and creating a new one for
every thread is a waste of (cpu) time.

Sponsored by: Robert Klemme

6 years agoRemove an obsolete NULL check
Fabian Keil [Mon, 26 Jun 2017 12:18:06 +0000 (12:18 +0000)]
Remove an obsolete NULL check

6 years agoFree csp resources in the thread that belongs to the csp
Fabian Keil [Mon, 26 Jun 2017 12:17:57 +0000 (12:17 +0000)]
Free csp resources in the thread that belongs to the csp

... instead of the main thread which has enough on
its plate already.

Sponsored by: Robert Klemme

6 years agoFactor free_csp_resources() out of sweep()
Fabian Keil [Mon, 26 Jun 2017 12:17:43 +0000 (12:17 +0000)]
Factor free_csp_resources() out of sweep()

Sponsored by: Robert Klemme

6 years agoFix a comment that described the effect of debug 1024 incorrectly
Fabian Keil [Mon, 26 Jun 2017 12:17:34 +0000 (12:17 +0000)]
Fix a comment that described the effect of debug 1024 incorrectly

The comment is correct in the source file already but the config
file generation requires manual labour and the "[m]anual config fixes"
I applied in r1.100 (2009) added the comment at the wrong place.

6 years agoRebuild config file with enable-accept-filter documentation
Fabian Keil [Mon, 26 Jun 2017 12:17:17 +0000 (12:17 +0000)]
Rebuild config file with enable-accept-filter documentation

Sponsored by: Robert Klemme

6 years agoRebuild user-manual with enable-accept-filter documentation
Fabian Keil [Mon, 26 Jun 2017 12:16:47 +0000 (12:16 +0000)]
Rebuild user-manual with enable-accept-filter documentation

Sponsored by: Robert Klemme

6 years agoDocument the enable-accept-filter directive
Fabian Keil [Mon, 26 Jun 2017 12:16:32 +0000 (12:16 +0000)]
Document the enable-accept-filter directive

Sponsored by: Robert Klemme

6 years agoRebuild config file with listen-backlog documentation
Fabian Keil [Mon, 26 Jun 2017 12:16:21 +0000 (12:16 +0000)]
Rebuild config file with listen-backlog documentation

Sponsored by: Robert Klemme

6 years agoRebuild the user manual with listen-backlog documentation
Fabian Keil [Mon, 26 Jun 2017 12:15:27 +0000 (12:15 +0000)]
Rebuild the user manual with listen-backlog documentation

Sponsored by: Robert Klemme

6 years agoDocument the listen-backlog directive
Fabian Keil [Mon, 26 Jun 2017 12:14:38 +0000 (12:14 +0000)]
Document the listen-backlog directive

Sponsored by: Robert Klemme

6 years agoImprove 'socket timeout reached' message
Fabian Keil [Mon, 26 Jun 2017 12:14:25 +0000 (12:14 +0000)]
Improve 'socket timeout reached' message

Log the timeout that was triggered and downgrade the
log level to LOG_LEVEL_CONNECT to reduce the log noise
with common debug settings.

The timeout isn't necessary the result of an error and
usually merely indicates that Privoxy's socket timeout
is lower than the relevant timeouts used by client and
server.

Sponsored by: Robert Klemme

6 years agoAdd a listen-backlog directive
Fabian Keil [Mon, 26 Jun 2017 12:13:52 +0000 (12:13 +0000)]
Add a listen-backlog directive

Which specifies the backlog value passed to listen().

Sponsored by: Robert Klemme

6 years agoEnable accept filter only once
Fabian Keil [Mon, 26 Jun 2017 12:12:55 +0000 (12:12 +0000)]
Enable accept filter only once

Previously Privoxy would (attempt to) enable it before
each accept call which isn't necessary.

Sponsored by: Robert Klemme

6 years agoAdd an enable-accept-filter directive
Fabian Keil [Mon, 26 Jun 2017 12:11:13 +0000 (12:11 +0000)]
Add an enable-accept-filter directive

Which allows to toggle accept filter support at
run time when compiled with FEATURE_ACCEPT_FILTER
support.

It makes testing more convenient and now that it's
optional we can emit an error message if enabling
the accept filter fails.

Sponsored by: Robert Klemme

6 years agoExplicitly taint the server socket in case of CONNECT requests
Fabian Keil [Mon, 26 Jun 2017 12:10:31 +0000 (12:10 +0000)]
Explicitly taint the server socket in case of CONNECT requests

This doesn't fix any known problems, but makes
some log messages less confusing.

6 years agoAdd fast-redirects exception for '.youtube.com/.*origin=http'
Fabian Keil [Mon, 26 Jun 2017 12:10:18 +0000 (12:10 +0000)]
Add fast-redirects exception for '.youtube.com/.*origin=http'

6 years agoUpdate reference to the 'show-version' page
Fabian Keil [Mon, 26 Jun 2017 12:10:07 +0000 (12:10 +0000)]
Update reference to the 'show-version' page

6 years agoUpdate comments that still mentioned 'show-proxy-args' instead of 'show-status'
Fabian Keil [Mon, 26 Jun 2017 12:09:56 +0000 (12:09 +0000)]
Update comments that still mentioned 'show-proxy-args' instead of 'show-status'

6 years agoRemove list of supposedly declared functions from a comment
Fabian Keil [Mon, 26 Jun 2017 12:09:43 +0000 (12:09 +0000)]
Remove list of supposedly declared functions from a comment

The list was out of date and people who care about the
information can simply scroll down a bit.

6 years agoUnblock .golang.org/
Fabian Keil [Mon, 26 Jun 2017 12:09:30 +0000 (12:09 +0000)]
Unblock .golang.org/

6 years agoSkip a regex if we don't need the captured result
Fabian Keil [Thu, 8 Jun 2017 13:13:48 +0000 (13:13 +0000)]
Skip a regex if we don't need the captured result

At least in theory this is more efficient but the gains
don't seem impressive enough to be clearly measurable with
real world log files.

At least it looks faster now ...

6 years agoget_content_length(): Replace an assertion with a compile-time check
Fabian Keil [Thu, 8 Jun 2017 13:13:26 +0000 (13:13 +0000)]
get_content_length(): Replace an assertion with a compile-time check

6 years agoRemove a mysterious comment with a GNU FDL link
Fabian Keil [Thu, 8 Jun 2017 13:12:45 +0000 (13:12 +0000)]
Remove a mysterious comment with a GNU FDL link

... as it isn't useful and could confuse license scanners.

In May 2002 it was briefly claimed that "this document" was covered
by the GNU FDL. The commit message (r1.5) doesn't explain the motivation
or whether all copyright holders were actually asked and agreed to the
declared license change.

It's thus hard to tell whether or not the license change was legit,
but luckily two days later the "doc license" was "put" "back to GPL"
anyway (r1.6).

At the same time the offending comment with a link to the FDL
(not the GPL) was added for no obvious reason.

Now it's gone again.

6 years agoLet write_pid_file() terminate if the pid file can't be opened
Fabian Keil [Thu, 8 Jun 2017 13:11:08 +0000 (13:11 +0000)]
Let write_pid_file() terminate if the pid file can't be opened

Logging the issue at info level is unlikely to help.

6 years agoRebuild HTML docs
Fabian Keil [Thu, 8 Jun 2017 13:10:42 +0000 (13:10 +0000)]
Rebuild HTML docs

Sponsored by: Robert Klemme

6 years agoRebuild AUTHORS
Fabian Keil [Thu, 8 Jun 2017 13:09:45 +0000 (13:09 +0000)]
Rebuild AUTHORS

6 years agoRegenerate config file with 'receive-buffer-size' and 'trusted-cgi-referer' sections
Fabian Keil [Thu, 8 Jun 2017 13:09:34 +0000 (13:09 +0000)]
Regenerate config file with 'receive-buffer-size' and 'trusted-cgi-referer' sections

Sponsored by: Robert Klemme

6 years agoAdd a small fuzzing section to the developer documentation
Fabian Keil [Thu, 8 Jun 2017 13:08:39 +0000 (13:08 +0000)]
Add a small fuzzing section to the developer documentation

6 years agoAdd Johan Sintorn as contributor
Fabian Keil [Thu, 8 Jun 2017 13:08:11 +0000 (13:08 +0000)]
Add Johan Sintorn as contributor

He reporting a performance issue in 2015 (SF#894, jbsockets.c,v 1.133).

6 years agoFix indentation in handle_established_connection()
Fabian Keil [Thu, 8 Jun 2017 13:05:09 +0000 (13:05 +0000)]
Fix indentation in handle_established_connection()

6 years agorfc2553_connect_to(): Properly detect and log when poll() reached the time out
Fabian Keil [Thu, 8 Jun 2017 13:04:56 +0000 (13:04 +0000)]
rfc2553_connect_to(): Properly detect and log when poll() reached the time out

Previously this was logged as:
Could not connect to [...]: No error: 0.
which isn't very helpful.

The select() code path doesn't look like it would handle timeouts
properly either but apparently nobody noticed this yet ...

Sponsored by: Robert Klemme

6 years agoFix indentation
Fabian Keil [Thu, 8 Jun 2017 13:04:34 +0000 (13:04 +0000)]
Fix indentation

6 years agoLet sockaddr_storage_to_ip() return void
Fabian Keil [Sun, 4 Jun 2017 14:43:31 +0000 (14:43 +0000)]
Let sockaddr_storage_to_ip() return void

The previous failure conditions weren't (supposed to be)
reachable and weren't consistently checked anyway.

6 years agoLet sockaddr_storage_to_ip() assert that the address family is AF_INET or AF_INET6
Fabian Keil [Sun, 4 Jun 2017 14:43:10 +0000 (14:43 +0000)]
Let sockaddr_storage_to_ip() assert that the address family is AF_INET or AF_INET6

Privoxy currently doesn't support any other address families
so there's no need to pretent to handle them.

6 years agoLet sockaddr_storage_to_ip() assert that addr isn't NULL
Fabian Keil [Sun, 4 Jun 2017 14:42:54 +0000 (14:42 +0000)]
Let sockaddr_storage_to_ip() assert that addr isn't NULL

Calling the function with a NULL pointer is unreasonable,
we currently don't do it (intentionally) and shouldn't start
to do it (intentionally) in the future.

6 years agoRelocate the DEFAULT_KEEP_ALIVE_TIMEOUT definition to loadcfg.c
Fabian Keil [Sun, 4 Jun 2017 14:42:32 +0000 (14:42 +0000)]
Relocate the DEFAULT_KEEP_ALIVE_TIMEOUT definition to loadcfg.c

It's no longer referenced anywhere else.

6 years agoRemove code that has been pointless since 2009
Fabian Keil [Sun, 4 Jun 2017 14:42:13 +0000 (14:42 +0000)]
Remove code that has been pointless since 2009

This should have been done with gateway.c r1.52 which
rendered the global keep_alive_timeout obsolete.

6 years agoFix comments that still called Privoxy Junkbuster
Fabian Keil [Sun, 4 Jun 2017 14:37:05 +0000 (14:37 +0000)]
Fix comments that still called Privoxy Junkbuster

6 years agosocket_is_still_alive(): Remove superfluous empty line
Fabian Keil [Sun, 4 Jun 2017 14:36:44 +0000 (14:36 +0000)]
socket_is_still_alive(): Remove superfluous empty line

6 years agohard-code windres output format to pe-i386
Lee [Thu, 1 Jun 2017 13:22:46 +0000 (13:22 +0000)]
hard-code windres output format to pe-i386

  ideally windres output would be based on the
    ./configure --host=XXX
  type.  Maybe someday I'll figure it out but for now,
  when using cygwin to build privoxy, use
    ./configure --host=i686-w64-mingw32
  and it'll work using either the 32 or 64 bit version of cygwin.

6 years agoUnbreak the 'Windows with GUI' build after r1.129
Fabian Keil [Wed, 31 May 2017 19:05:12 +0000 (19:05 +0000)]
Unbreak the 'Windows with GUI' build after r1.129

Reported by Lee.

6 years agoRemove #157 which is done
Fabian Keil [Mon, 29 May 2017 10:40:35 +0000 (10:40 +0000)]
Remove #157 which is done

6 years agoRemove #149 which is done
Fabian Keil [Mon, 29 May 2017 10:40:28 +0000 (10:40 +0000)]
Remove #149 which is done

6 years agoremove_tag_for_client(): Remove a harmless 'dead store'
Fabian Keil [Mon, 29 May 2017 10:15:15 +0000 (10:15 +0000)]
remove_tag_for_client(): Remove a harmless 'dead store'

... and make the code easier to understand.

6 years agocgi_show_client_tags(): Fix a harmless 'dead store' warning
Fabian Keil [Mon, 29 May 2017 10:13:36 +0000 (10:13 +0000)]
cgi_show_client_tags(): Fix a harmless 'dead store' warning

6 years agoMake sure binaries with fuzzing support are used for fuzzing-related things
Fabian Keil [Mon, 29 May 2017 10:12:50 +0000 (10:12 +0000)]
Make sure binaries with fuzzing support are used for fuzzing-related things

... and exit otherwise.

In case of fuzzing builds various data structures are static
which is unsafe when using threads.

6 years agopcrs_compile_replacement(): Fix a clang warning when building with FUZZ support
Fabian Keil [Mon, 29 May 2017 10:09:37 +0000 (10:09 +0000)]
pcrs_compile_replacement(): Fix a clang warning when building with FUZZ support

The warning was:
"Address of stack memory associated with local variable 'length' is
still referred to by the static variable 'length_stack' upon returning
to the caller. This will be a dangling reference"

For the fuzzing use case it didn't matter but it still shouldn't be done.

While at it, remove a couple of variables that were only used
to make debugging more convenient.

6 years agolog_error(): Reduce the mutex-protected area
Fabian Keil [Mon, 29 May 2017 10:06:57 +0000 (10:06 +0000)]
log_error(): Reduce the mutex-protected area

... by not using a heap-allocated buffer that is
shared between all threads.

This increases performance and reduces the latency
with verbose debug settings and multiple concurrent
connections.

Sponsored by: Robert Klemme

6 years agolog_error(): Declare log_buffer_size constant
Fabian Keil [Mon, 29 May 2017 10:06:09 +0000 (10:06 +0000)]
log_error(): Declare log_buffer_size constant

6 years agoLet zalloc() use calloc() if it's available
Fabian Keil [Mon, 29 May 2017 10:05:46 +0000 (10:05 +0000)]
Let zalloc() use calloc() if it's available

In some situations using calloc() can be faster than
malloc() + memset() and it should never be slower.

In the real world the impact of this change is not
expected to be noticeable.

Sponsored by: Robert Klemme

6 years agoDocument the receive-buffer-size directive
Fabian Keil [Mon, 29 May 2017 10:02:37 +0000 (10:02 +0000)]
Document the receive-buffer-size directive

Sponsored by: Robert Klemme

6 years agoAdd a receive-buffer-size directive
Fabian Keil [Mon, 29 May 2017 10:02:11 +0000 (10:02 +0000)]
Add a receive-buffer-size directive

... which can be used to set the size of the previously statically
allocated buffer in handle_established_connection().

Increasing the buffer size increases Privoxy's memory usage but
can lower the number of context switches and thereby reduce the
cpu usage and potentially increase the throughput.

This is mostly relevant for fast network connections and
large downloads that don't require filtering.

Currently BUFFER_SIZE is kept as default and lower limit
but the default should be increased after some more testing.

A dtrace command like:
sudo dtrace -n 'syscall::read:return /execname == "privoxy"/ { @[execname] = llquantize(arg0, 10, 0, 5, 20); @m = max(arg0)}'
can be used to properly tune the receive-buffer-size.

If the buffer is too large it will increase Privoxy's memory
footprint without any benefit. As the memory is (currently)
cleared before using it, a buffer that is too large can
actually reduce the throughput.

Things could be improved further by upwards scaling the buffer
dynamically based on how much of the previous allocation
was actually used.

Additionally the buffer should be referenced through csp and
also be used for other receive-related functions.

Measured throughput when using four connections to
constantly request a 10 MB file:

~320 MB/s with the default
~400 MB/s with "receive-buffer-size    8192"
~490 MB/s with "receive-buffer-size   16384"
~610 MB/s with "receive-buffer-size   32768"
~700 MB/s with "receive-buffer-size   65536"
~755 MB/s with "receive-buffer-size  131072"
~795 MB/s with "receive-buffer-size  262144"
~804 MB/s with "receive-buffer-size  524288"
~798 MB/s with "receive-buffer-size 1048576"
~780 MB/s with "receive-buffer-size 2097152"

Sponsored by: Robert Klemme

6 years agoBump copyright
Fabian Keil [Thu, 25 May 2017 11:17:38 +0000 (11:17 +0000)]
Bump copyright

6 years agoMake it more obvious that the --with-fdsetsize configure switch is pointless if poll...
Fabian Keil [Thu, 25 May 2017 11:17:11 +0000 (11:17 +0000)]
Make it more obvious that the --with-fdsetsize configure switch is pointless if poll() is available

6 years agoNever use select() when poll() is available
Fabian Keil [Thu, 25 May 2017 11:16:56 +0000 (11:16 +0000)]
Never use select() when poll() is available

On most platforms select() is limitted by FD_SETSIZE while
poll() is not. This was a scaling issue for multi-user setups.

Using poll() has no downside other than the usual risk
that code modifications may introduce new bugs that have
yet to be found and fixed.

At least in theory this commit could also reduce the latency
when there are lots of connections and select() would use
"bit fields in arrays of integers" to store file descriptors.

Another side effect is that Privoxy no longer has to stop
monitoring the client sockets when pipelined requests are
waiting but can't be read yet.

This code keeps the select()-based code behind ifdefs for
now but hopefully it can be removed soonish to make the
code more readable.

Sponsored by: Robert Klemme

6 years agoReduce chat()'s stack usage
Fabian Keil [Thu, 25 May 2017 11:16:04 +0000 (11:16 +0000)]
Reduce chat()'s stack usage

... by removing a buffer that was left from a previous
refactoring.

Sponsored by: Robert Klemme

6 years agoRegister missing dependencies for fuzz.c and client-tags.c
Fabian Keil [Thu, 25 May 2017 11:15:34 +0000 (11:15 +0000)]
Register missing dependencies for fuzz.c and client-tags.c

Previously project.h modificiations would not result in
rebuilds of fuzz.o and client-tags.o. This could cause
SIGBUS crashes in case of structure changes etc.

6 years agoProperly disable fuzz support when it hasn't been requested
Fabian Keil [Thu, 25 May 2017 11:14:53 +0000 (11:14 +0000)]
Properly disable fuzz support when it hasn't been requested

Previously fuzz.o was compiled and linked in anyway
while the code was unreachable.

6 years agoAdd missing space
Fabian Keil [Thu, 25 May 2017 11:14:38 +0000 (11:14 +0000)]
Add missing space