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.
Fabian Keil [Sat, 12 Aug 2017 09:35:32 +0000 (09:35 +0000)]
load_config(): Rearrange code to prevent a useless store
Fabian Keil [Sat, 12 Aug 2017 09:33:25 +0000 (09:33 +0000)]
Warn when still using select()
Fabian Keil [Sat, 12 Aug 2017 09:33:14 +0000 (09:33 +0000)]
Warn when compiling without calloc()
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'
Lee [Sat, 1 Jul 2017 18:34:07 +0000 (18:34 +0000)]
bump copyright
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]
Lee [Sat, 1 Jul 2017 17:08:25 +0000 (17:08 +0000)]
fix format specifier in log_error for unsigned long long variables
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
Fabian Keil [Mon, 26 Jun 2017 12:18:06 +0000 (12:18 +0000)]
Remove an obsolete NULL check
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
Fabian Keil [Mon, 26 Jun 2017 12:17:43 +0000 (12:17 +0000)]
Factor free_csp_resources() out of sweep()
Sponsored by: Robert Klemme
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.
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
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
Fabian Keil [Mon, 26 Jun 2017 12:16:32 +0000 (12:16 +0000)]
Document the enable-accept-filter directive
Sponsored by: Robert Klemme
Fabian Keil [Mon, 26 Jun 2017 12:16:21 +0000 (12:16 +0000)]
Rebuild config file with listen-backlog documentation
Sponsored by: Robert Klemme
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
Fabian Keil [Mon, 26 Jun 2017 12:14:38 +0000 (12:14 +0000)]
Document the listen-backlog directive
Sponsored by: Robert Klemme
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
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
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
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
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.
Fabian Keil [Mon, 26 Jun 2017 12:10:18 +0000 (12:10 +0000)]
Add fast-redirects exception for '.youtube.com/.*origin=http'
Fabian Keil [Mon, 26 Jun 2017 12:10:07 +0000 (12:10 +0000)]
Update reference to the 'show-version' page
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'
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.
Fabian Keil [Mon, 26 Jun 2017 12:09:30 +0000 (12:09 +0000)]
Unblock .golang.org/
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 ...
Fabian Keil [Thu, 8 Jun 2017 13:13:26 +0000 (13:13 +0000)]
get_content_length(): Replace an assertion with a compile-time check
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.
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.
Fabian Keil [Thu, 8 Jun 2017 13:10:42 +0000 (13:10 +0000)]
Rebuild HTML docs
Sponsored by: Robert Klemme
Fabian Keil [Thu, 8 Jun 2017 13:09:45 +0000 (13:09 +0000)]
Rebuild AUTHORS
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
Fabian Keil [Thu, 8 Jun 2017 13:08:39 +0000 (13:08 +0000)]
Add a small fuzzing section to the developer documentation
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).
Fabian Keil [Thu, 8 Jun 2017 13:05:09 +0000 (13:05 +0000)]
Fix indentation in handle_established_connection()
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
Fabian Keil [Thu, 8 Jun 2017 13:04:34 +0000 (13:04 +0000)]
Fix indentation
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.
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.
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.
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.
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.
Fabian Keil [Sun, 4 Jun 2017 14:37:05 +0000 (14:37 +0000)]
Fix comments that still called Privoxy Junkbuster
Fabian Keil [Sun, 4 Jun 2017 14:36:44 +0000 (14:36 +0000)]
socket_is_still_alive(): Remove superfluous empty line
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.
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.
Fabian Keil [Mon, 29 May 2017 10:40:35 +0000 (10:40 +0000)]
Remove #157 which is done
Fabian Keil [Mon, 29 May 2017 10:40:28 +0000 (10:40 +0000)]
Remove #149 which is done
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.
Fabian Keil [Mon, 29 May 2017 10:13:36 +0000 (10:13 +0000)]
cgi_show_client_tags(): Fix a harmless 'dead store' warning
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.
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.
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
Fabian Keil [Mon, 29 May 2017 10:06:09 +0000 (10:06 +0000)]
log_error(): Declare log_buffer_size constant
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
Fabian Keil [Mon, 29 May 2017 10:02:37 +0000 (10:02 +0000)]
Document the receive-buffer-size directive
Sponsored by: Robert Klemme
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
Fabian Keil [Thu, 25 May 2017 11:17:38 +0000 (11:17 +0000)]
Bump copyright
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
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
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
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.
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.
Fabian Keil [Thu, 25 May 2017 11:14:38 +0000 (11:14 +0000)]
Add missing space
Fabian Keil [Thu, 25 May 2017 11:14:27 +0000 (11:14 +0000)]
Add a 'reproducible-tarball-dist' target
It's currently separate from the "tarball-dist" target
because it requires a tar implementation with mtree spec
support.
It's far from being perfect and does not enforce a
reproducible mode, but it's better than nothing.
After the git migration it can probably be removed anyway.
Fabian Keil [Sat, 20 May 2017 09:28:11 +0000 (09:28 +0000)]
Fix a path pattern explanation by extending it
Issue pointed out by Lee on privoxy-users@.
Fabian Keil [Sat, 20 May 2017 09:27:54 +0000 (09:27 +0000)]
Fix a path pattern explanation
Fabian Keil [Sat, 20 May 2017 09:27:17 +0000 (09:27 +0000)]
Fix typo
Fabian Keil [Sat, 20 May 2017 09:27:07 +0000 (09:27 +0000)]
Add a web-homepage target
... which only updates the index.html
Fabian Keil [Sat, 20 May 2017 09:25:14 +0000 (09:25 +0000)]
Add #158: Use a single thread to wait for new requests on reused client connections
Fabian Keil [Sat, 20 May 2017 09:25:00 +0000 (09:25 +0000)]
Add #157: Add a directive to control the currently hardcoded receive-buffer size
Fabian Keil [Sat, 20 May 2017 09:24:35 +0000 (09:24 +0000)]
Remove a pointless comment
Fabian Keil [Sat, 20 May 2017 09:24:08 +0000 (09:24 +0000)]
Remove pointless-looking bzero() define for OS/2
bzero() isn't used anywhere in the file.
Fabian Keil [Thu, 4 May 2017 14:45:21 +0000 (14:45 +0000)]
Regenerate homepage with updated sponsor footer
Fabian Keil [Thu, 4 May 2017 14:35:02 +0000 (14:35 +0000)]
Remove ChameleonJohn from the sponsor footer on the homepage
The sponsor period started more than a year ago and
presumably they don't want to sponsor Privoxy for
another year (I asked but didn't get a reply).
Fabian Keil [Thu, 4 May 2017 14:34:28 +0000 (14:34 +0000)]
Bump copyright
Fabian Keil [Thu, 4 May 2017 14:34:18 +0000 (14:34 +0000)]
Use arc4random() if it's available
While Privoxy doesn't need high quality pseudo-random numbers
there's no reason not to use them when we can and this silences
a warning emitted by code checkers that can't tell whether or not
the quality matters.
Fabian Keil [Thu, 4 May 2017 14:33:17 +0000 (14:33 +0000)]
Show the FEATURE_EXTERNAL_FILTERS status on the status page
Better late than never.
Previously a couple of tests weren't executed as
Privoxy-Regression-Test couldn't detect that the
FEATURE_EXTERNAL_FILTERS dependency was sattisfied.
Fabian Keil [Thu, 27 Apr 2017 17:14:10 +0000 (17:14 +0000)]
Unblock msdn.microsoft.com/
It (presumably) isn't used to serve the kind of ads Privoxy should
block by default but happens to serve lots of pages with URLs that
are likely to result in false positives.
Reported by bugreporter1694 in AF#939.
Fabian Keil [Thu, 20 Apr 2017 11:12:12 +0000 (11:12 +0000)]
Bump copyright
Fabian Keil [Thu, 20 Apr 2017 11:11:43 +0000 (11:11 +0000)]
Add a client-header-tagger{client-ip-address} example
Fabian Keil [Thu, 20 Apr 2017 11:11:22 +0000 (11:11 +0000)]
Use https in URLs for our website
Fabian Keil [Thu, 20 Apr 2017 11:10:54 +0000 (11:10 +0000)]
Add TODO #156: Reject socks requests with an explicit error message
Fabian Keil [Sun, 9 Apr 2017 09:11:46 +0000 (09:11 +0000)]
Disable gif deanimation for requests tagged with CSS-REQUEST
The action will ignore content that isn't considered text
anyway and explicitly disabling it makes this more obvious
if "action" debugging (debug 65536) is enabled while
"gif deanimation" debugging (debug 256) isn't.
As noted by Lee this could have been done in r1.333 already.
Fabian Keil [Mon, 27 Mar 2017 10:22:27 +0000 (10:22 +0000)]
FAQ: Fix invalid syntax added in r2.134
Fabian Keil [Mon, 27 Mar 2017 10:21:18 +0000 (10:21 +0000)]
Rebuild website index with updated copyright and sponsor trailer
Fabian Keil [Mon, 27 Mar 2017 10:20:52 +0000 (10:20 +0000)]
Bump copyright
Fabian Keil [Mon, 27 Mar 2017 10:20:42 +0000 (10:20 +0000)]
Move the 'Become a sponsor' link into the SGML source
... instead of inserting it at build-time through the
dok-webserver target.
Fabian Keil [Mon, 27 Mar 2017 10:20:27 +0000 (10:20 +0000)]
Update sponsor trailer on the website to include the new sponsor 7binaryoptions.com
Fabian Keil [Mon, 27 Mar 2017 10:19:42 +0000 (10:19 +0000)]
Use https:// for the website
Fabian Keil [Mon, 27 Mar 2017 10:19:31 +0000 (10:19 +0000)]
Bump copyright
Fabian Keil [Mon, 27 Mar 2017 10:19:19 +0000 (10:19 +0000)]
Explicitly disable HTML filters for requests with CSS-REQUEST tag
The filters are unlikely to break CSS files but executing
them without (intentionally) getting any hits is a waste of
cpu time and makes the log more noisy when running with
"debug 64".
Fabian Keil [Wed, 8 Mar 2017 13:21:52 +0000 (13:21 +0000)]
Fix spelling in a comment added in r1.173
Fabian Keil [Wed, 8 Mar 2017 13:16:26 +0000 (13:16 +0000)]
Remove the 'View the source code version numbers' link from the CGI menu
It's rarely needed and likely to be completely removed
after the git migration anyway.
Fabian Keil [Wed, 8 Mar 2017 13:16:08 +0000 (13:16 +0000)]
Add TODO #155: The sig_handler() shouldn't call log_error()
Fabian Keil [Wed, 8 Mar 2017 13:15:49 +0000 (13:15 +0000)]
Explain why SIGPIPE is ignored and remove the 'FIXME: Why?' about it