+ <listitem>
+ <para>
+ Added the config file option handle-as-empty-doc-returns-ok to
+ work around Firefox bug #492459, which causes Firefox to hang
+ if JavaScripts are blocked in certain situations. The option is
+ enabled in the default config file.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Added the config file option default-server-timeout to control the
+ assumed default server timeout. Since Privoxy no longer returns
+ an error message for connection resets on reused client connections,
+ assuming larger server timeout values appears to actually work
+ pretty well as long as connections aren't shared.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Added optional support for FreeBSD's accf_http(9). Use the
+ configure option --enable-accept-filter to enable it.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Added fancier Privoxy icons for win32. Contributed by Jeff H.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In daemon mode, fd 0, 1 and 2 are bound to /dev/null.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Resolve localhost using whatever address family the operating
+ system feels like. Previous betas would try to use IPv4 as this
+ is what most users expect, but this didn't work reliably on
+ GNU/Linux systems.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In the action lists on CGI pages, actions and their parameters are
+ no longer separated with a space. The action file parser doesn't
+ actually allow this and will throw an invalid syntax error if actions
+ and parameters in the action files are separated. Not adding the
+ spaces means copy and pasting CGI output into the action files works.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The default keep-alive timeout has been reduced to 5 seconds to work
+ around hangs in clients that treat the proxy like any other host and
+ stop allowing any new connections if the "maximum number of
+ connections per host" is reached.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Several webbug URLs that look like they are leading to images are now
+ blocked as image instead of empty documents. Doing the latter causes
+ WebKit-based clients to show a "missing image" icon which may mess up
+ the layout.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The no-such-domain template is used for DNS resolution
+ problems with FEATURE_IPV6_SUPPORT enabled. Previously the
+ connect-failed template was used. Reported by 'zebul666'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Accepts quoted expiration dates even though RFC 2109 10.1.2
+ doesn't seem to allow them. Reported anonymously.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Don't try to forget connections if connection sharing is disabled.
+ This wasn't a real problem but caused an unnecessary log message.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The still undocumented --enable-extended-host-patterns configure
+ option has a better description.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed an error message that would claim a write to the server
+ failed when actually writing to the client failed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Log the crunch reason before trying to write to the client.
+ The log is easier to read that way.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Several log messages about client connections also mention
+ the socket number.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ handle-as-empty-document no longer depends on the image blocking
+ code being enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Privoxy-Log-Parser is roughly 40% faster in highlighting mode.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ uagen, a Firefox User-Agent generator for Privoxy and Mozilla
+ browsers has been imported and is available in the tarball's
+ tools directory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The scripts in the tools directory treat unknown parameters
+ as fatal errors.
+ </para>
+ </listitem>
+ </itemizedlist>
+</para>
+
+<para>
+ If you missed the previous three beta versions, you may also be
+ interested in the additional changes since 3.0.12, the
+ last stable release:
+</para>
+
+<para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Added IPv6 support. Thanks to Petr Pisar who not only provided
+ the initial patch but also helped a lot with the integration.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Added client-side keep-alive support.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The connection sharing code is only used if the connection-sharing
+ option is enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The latency is taken into account when evaluating whether or not to
+ reuse a connection. This should significantly reduce the number of
+ connections problems several users reported.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The max-client-connections option has been added to restrict
+ the number of client connections below a value enforced by
+ the operating system.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If the server doesn't specify how long the connection stays alive,
+ Privoxy errs on the safe side of caution and assumes it's only a second.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Setting keep-alive-timeout to 0 disables keep-alive support. Previously
+ Privoxy would claim to allow persistence but not reuse the connection.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Pipelined requests are less likely to be mistaken for the request
+ body of the previous request. Note that Privoxy still has no real
+ pipeline support and will either serialize pipelined requests or
+ drop them in which case the client has to resent them.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed a crash on some Windows versions when header randomization
+ is enabled and the date couldn't be parsed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Privoxy's keep-alive timeout for the current connection is reduced
+ to the one specified in the client's Keep-Alive header.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ For HTTP/1.1 requests, Privoxy implies keep-alive support by not
+ setting any Connection header instead of using 'Connection: keep-alive'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If the socket isn't reusable, Privoxy doesn't temporarily waste
+ a socket slot to remember the connection.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If keep-alive support is disabled but compiled in, the client's
+ Keep-Alive header is removed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed a bug on mingw32 where downloading large files failed if
+ keep-alive support was enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed a bug that (at least theoretically) could cause log
+ timestamps to be occasionally off by about a second.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The configure script respects the $PATH variable when searching
+ for groups and id.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Compressed content with extra fields couldn't be decompressed
+ and would get passed to the client unfiltered. This problem
+ has only be detected through statical analysis with clang as
+ nobody seems to be using extra fields anyway.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If the server resets the Connection after sending only the headers
+ Privoxy forwards what it got to the client. Previously Privoxy
+ would deliver an error message instead.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Error messages in case of connection timeouts use the right
+ HTTP status code.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If spawning a child to handle a request fails, the client
+ gets an error message and Privoxy continues to listen for
+ new requests right away.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The error messages in case of server-connection timeouts or
+ prematurely closed server connections are now template-based.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If zlib support isn't compiled in, Privoxy no longer tries to
+ filter compressed content unless explicitly asked to do so.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In case of connections that are denied based on ACL directives,
+ the memory used for the client IP is no longer leaked.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed another small memory leak if the client request times out
+ while waiting for client headers other than the request line.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The client socket is kept open until the server socket has
+ been marked as unused. This should increase the chances that
+ the still-open connection will be reused for the client's next
+ request to the same destination. Note that this only matters
+ if connection-sharing is enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A TODO list has been added to the source tarball to give potential
+ volunteers a better idea of what the current goals are. Donations
+ are still welcome too: http://www.privoxy.org/faq/general.html#DONATE
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In case of missing server data, no error message is send to the
+ client if the request arrived on a reused connection. The client
+ is then supposed to silently retry the request without bothering
+ the user. This should significantly reduce the frequency of the
+ "No server or forwarder data received" error message many users
+ reported.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ More reliable detection of prematurely closed client sockets
+ with keep-alive enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ FEATURE_CONNECTION_KEEP_ALIVE is decoupled from
+ FEATURE_CONNECTION_SHARING and now available on
+ all platforms.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Improved handling of POST requests on reused connections.
+ Should fix problems with stalled connections after submitting
+ form data with some browser configurations.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed various latency calculation issues.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Allows the client to pass NTLM authentication requests to a
+ forwarding proxy. This was already assumed and hinted to work
+ in 3.0.13 beta but actually didn't. Now it's confirmed to work
+ with IE, Firefox and Chrome.
+ Thanks to Francois Botha and Wan-Teh Chang
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed a calculation problem if receiving the server headers
+ takes more than two reads, that could cause Privoxy to terminate
+ the connection prematurely. Reported by Oliver.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Compiles again on platforms such as OpenBSD and systems
+ using earlier glibc version that don't support AI_ADDRCONFIG.
+ Anonymously submitted in #2872591.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A bunch of MS VC project files and Suse and Redhat RPM spec
+ files have been removed as they were no longer maintained for
+ quite some time.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Overly long action lines are properly rejected with a proper
+ error message. Previously they would be either rejected as
+ invalid or cause a core dump through abort().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Already timed-out connections are no longer temporarily remembered.
+ They weren't reused anyway, but wasted a socket slot.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ len refers to the number of bytes actually read which might
+ differ from the ones received. Adjust log messages accordingly.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The optional JavaScript on the CGI page uses encodeURIComponent()
+ instead of escape() which doesn't encode all characters that matter.
+ Anonymously reported in #2832722.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fix gcc45 warnings in decompress_iob().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Various log message improvements.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Privoxy-Regression-Test supports redirect tests.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Privoxy-Log-Parser can gather some connection statistics.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+</para>
+
+
+<!-- ~~~~~ New section ~~~~~ -->
+
+<sect2 id="upgradersnote">
+<title>Note to Upgraders</title>
+
+<para>
+ A quick list of things to be aware of before upgrading from earlier
+ versions of <application>Privoxy</application>:
+</para>
+
+<para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ The recommended way to upgrade &my-app; is to backup your old
+ configuration files, install the new ones, verify that &my-app;
+ is working correctly and finally merge back your changes using
+ <application>diff</application> and maybe <application>patch</application>.
+ </para>
+ <para>
+ There are a number of new features in each &my-app; release and
+ most of them have to be explicitly enabled in the configuration
+ files. Old configuration files obviously don't do that and due
+ to syntax changes using old configuration files with a new
+ &my-app; isn't always possible anyway.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Note that some installers remove earlier versions completely,
+ including configuration files, therefore you should really save
+ any important configuration files!
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ On the other hand, other installers don't overwrite existing configuration
+ files, thinking you will want to do that yourself.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <filename>standard.action</filename> has been merged into
+ the <filename>default.action</filename> file.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In the default configuration only fatal errors are logged now.
+ You can change that in the <link linkend="DEBUG">debug section</link>
+ of the configuration file. You may also want to enable more verbose
+ logging until you verified that the new &my-app; version is working
+ as expected.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Three other config file settings are now off by default:
+ <link linkend="enable-remote-toggle">enable-remote-toggle</link>,
+ <link linkend="enable-remote-http-toggle">enable-remote-http-toggle</link>,
+ and <link linkend="enable-edit-actions">enable-edit-actions</link>.
+ If you use or want these, you will need to explicitly enable them, and
+ be aware of the security issues involved.
+ </para>
+ </listitem>
+
+<!--
+ <listitem>
+ <para>
+ What constitutes a <quote>default</quote> configuration has changed,
+ and you may want to review which actions are <quote>on</quote> by
+ default. This is primarily a matter of emphasis, but some features
+ you may have been used to, may now be <quote>off</quote> by default.
+ There are also a number of new actions and filters you may want to
+ consider, most of which are not fully incorporated into the default
+ settings as yet (see above).
+ </para>
+ </listitem>
+-->
+<!--
+ <listitem>
+ <para>
+ The default actions setting is now <literal>Cautious</literal>. Previous
+ releases had a default setting of <literal>Medium</literal>. Experienced
+ users may want to adjust this, as it is fairly conservative by &my-app;
+ standards and past practices. See <ulink
+ url="http://config.privoxy.org/edit-actions-list?f=default">
+ http://config.privoxy.org/edit-actions-list?f=default</ulink>. New users
+ should try the default settings for a while before turning up the volume.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The default setting has filtering turned <emphasis>off</emphasis>, which
+ subsequently means that compression is <emphasis>on</emphasis>. Remember
+ that filtering does not work on compressed pages, so if you use, or want to
+ use, filtering, you will need to force compression off. Example:
+ </para>
+ <para>
+ <screen>
+ { +<link linkend="filter">filter</link>{google} +<link linkend="prevent-compression">prevent-compression</link> }
+ .google.</screen>
+ </para>
+ <para>
+ Or if you use a number of filters, or filter many sites, you may just want
+ to turn off compression for all sites in
+ <filename>default.action</filename> (or
+ <filename>user.action</filename>).
+ </para>
+
+ </listitem>
+
+ <listitem>
+ <para>
+ Also, <link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> is
+ off by default now. If you've liked this feature in the past, you may want
+ to turn it back on in <filename>user.action</filename> now.
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Some installers may not automatically start
+ <application>Privoxy</application> after installation.
+ </para>
+ </listitem>
+-->
+
+ </itemizedlist>
+</para>
+
+</sect2>
+</sect1>
+
+<!-- ~~~~~ New section ~~~~~ -->
+<sect1 id="quickstart"><title>Quickstart to Using Privoxy</title>
+<para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Install <application>Privoxy</application>. See the <link
+ linkend="installation">Installation Section</link> below for platform specific
+ information.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Advanced users and those who want to offer <application>Privoxy</application>
+ service to more than just their local machine should check the <link
+ linkend="config">main config file</link>, especially the <link
+ linkend="access-control">security-relevant</link> options. These are
+ off by default.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Start <application>Privoxy</application>, if the installation program has
+ not done this already (may vary according to platform). See the section
+ <link linkend="startup">Starting <application>Privoxy</application></link>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Set your browser to use <application>Privoxy</application> as HTTP and
+ HTTPS (SSL) <ulink url="http://en.wikipedia.org/wiki/Proxy_server">proxy</ulink>
+ by setting the proxy configuration for address of
+ <literal>127.0.0.1</literal> and port <literal>8118</literal>.
+ <emphasis>DO NOT</emphasis> activate proxying for <literal>FTP</literal> or
+ any protocols besides HTTP and HTTPS (SSL) unless you intend to prevent your
+ browser from using these protocols.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Flush your browser's disk and memory caches, to remove any cached ad images.
+ If using <application>Privoxy</application> to manage
+ <ulink url="http://en.wikipedia.org/wiki/Browser_cookie">cookies</ulink>,
+ you should remove any currently stored cookies too.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A default installation should provide a reasonable starting point for
+ most. There will undoubtedly be occasions where you will want to adjust the
+ configuration, but that can be dealt with as the need arises. Little
+ to no initial configuration is required in most cases, you may want
+ to enable the
+ <ulink url="config.html#ENABLE-EDIT-ACTIONS">web-based action editor</ulink> though.
+ Be sure to read the warnings first.
+ </para>
+ <para>
+ See the <link linkend="configuration">Configuration section</link> for more
+ configuration options, and how to customize your installation.
+ You might also want to look at the <link
+ linkend="quickstart-ad-blocking">next section</link> for a quick
+ introduction to how <application>Privoxy</application> blocks ads and
+ banners.
+</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ If you experience ads that slip through, innocent images that are
+ blocked, or otherwise feel the need to fine-tune
+ <application>Privoxy's</application> behavior, take a look at the <link
+ linkend="actions-file">actions files</link>. As a quick start, you might
+ find the <link linkend="act-examples">richly commented examples</link>
+ helpful. You can also view and edit the actions files through the <ulink
+ url="http://config.privoxy.org">web-based user interface</ulink>. The
+ Appendix <quote><link linkend="actionsanat">Troubleshooting: Anatomy of an
+ Action</link></quote> has hints on how to understand and debug actions that
+ <quote>misbehave</quote>.
+ </para>
+ </listitem>
+
+<!--
+ Did anyone test these lately?
+ fk 2007-11-10
+ <listitem>
+ <para>
+ For easy access to &my-app;'s most important controls, drag the provided
+ <link linkend="bookmarklets">Bookmarklets</link> into your browser's
+ personal toolbar.
+ </para>
+ </listitem>
+-->
+
+ <listitem>
+ <para>
+ Please see the section <link linkend="contact">Contacting the
+ Developers</link> on how to report bugs, problems with websites or to get
+ help.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Now enjoy surfing with enhanced control, comfort and privacy!
+ </para>
+ </listitem>
+
+ </itemizedlist>
+</para>
+
+
+<!-- ~~~~~ New section ~~~~~ -->
+
+<sect2 id="quickstart-ad-blocking">
+<title>Quickstart to Ad Blocking</title>
+<!--
+ NOTE: This section is deliberately redundant for those that don't
+ want to read the whole thing (which is getting lengthy).
+-->
+<para>
+ Ad blocking is but one of <application>Privoxy's</application>
+ array of features. Many of these features are for the technically minded advanced
+ user. But, ad and banner blocking is surely common ground for everybody.
+</para>
+<para>
+ This section will provide a quick summary of ad blocking so
+ you can get up to speed quickly without having to read the more extensive
+ information provided below, though this is highly recommended.
+</para>
+<para>
+ First a bit of a warning ... blocking ads is much like blocking SPAM: the
+ more aggressive you are about it, the more likely you are to block
+ things that were not intended. And the more likely that some things
+ may not work as intended. So there is a trade off here. If you want
+ extreme ad free browsing, be prepared to deal with more
+ <quote>problem</quote> sites, and to spend more time adjusting the
+ configuration to solve these unintended consequences. In short, there is
+ not an easy way to eliminate <emphasis>all</emphasis> ads. Either take
+ the easy way and settle for <emphasis>most</emphasis> ads blocked with the
+ default configuration, or jump in and tweak it for your personal surfing
+ habits and preferences.
+</para>
+<para>
+ Secondly, a brief explanation of <application>Privoxy's </application>
+ <quote>actions</quote>. <quote>Actions</quote> in this context, are
+ the directives we use to tell <application>Privoxy</application> to perform
+ some task relating to HTTP transactions (i.e. web browsing). We tell
+ <application>Privoxy</application> to take some <quote>action</quote>. Each
+ action has a unique name and function. While there are many potential
+ <application>actions</application> in <application>Privoxy's</application>
+ arsenal, only a few are used for ad blocking. <link
+ linkend="actions">Actions</link>, and <link linkend="actions-file">action
+ configuration files</link>, are explained in depth below.
+</para>
+<para>
+ Actions are specified in <application>Privoxy's</application> configuration,
+ followed by one or more URLs to which the action should apply. URLs
+ can actually be URL type <link linkend="af-patterns">patterns</link> that use
+ wildcards so they can apply potentially to a range of similar URLs. The
+ actions, together with the URL patterns are called a section.
+</para>
+<para>
+ When you connect to a website, the full URL will either match one or more
+ of the sections as defined in <application>Privoxy's</application> configuration,
+ or not. If so, then <application>Privoxy</application> will perform the
+ respective actions. If not, then nothing special happens. Furthermore, web
+ pages may contain embedded, secondary URLs that your web browser will
+ use to load additional components of the page, as it parses the
+ original page's HTML content. An ad image for instance, is just an URL
+ embedded in the page somewhere. The image itself may be on the same server,
+ or a server somewhere else on the Internet. Complex web pages will have many
+ such embedded URLs. &my-app; can deal with each URL individually, so, for
+ instance, the main page text is not touched, but images from such-and-such
+ server are blocked.
+</para>
+
+<para>
+ The most important actions for basic ad blocking are: <literal><link
+ linkend="block">block</link></literal>, <literal><link
+ linkend="handle-as-image">handle-as-image</link></literal>,
+ <literal><link
+ linkend="handle-as-empty-document">handle-as-empty-document</link></literal>,and
+ <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>:
+</para>
+
+<para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <literal><link linkend="block">block</link></literal> - this is perhaps
+ the single most used action, and is particularly important for ad blocking.
+ This action stops any contact between your browser and any URL patterns
+ that match this action's configuration. It can be used for blocking ads,
+ but also anything that is determined to be unwanted. By itself, it simply
+ stops any communication with the remote server and sends
+ <application>Privoxy</application>'s own built-in BLOCKED page instead to
+ let you now what has happened (with some exceptions, see below).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal><link linkend="handle-as-image">handle-as-image</link></literal> -
+ tells <application>Privoxy</application> to treat this URL as an image.
+ <application>Privoxy</application>'s default configuration already does this
+ for all common image types (e.g. GIF), but there are many situations where this
+ is not so easy to determine. So we'll force it in these cases. This is particularly
+ important for ad blocking, since only if we know that it's an image of
+ some kind, can we replace it with an image of our choosing, instead of the
+ <application>Privoxy</application> BLOCKED page (which would only result in
+ a <quote>broken image</quote> icon). There are some limitations to this
+ though. For instance, you can't just brute-force an image substitution for
+ an entire HTML page in most situations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal><link linkend="handle-as-empty-document">handle-as-empty-document</link></literal> -
+ sends an empty document instead of <application>Privoxy's</application>
+ normal BLOCKED HTML page. This is useful for file types that are neither
+ HTML nor images, such as blocking JavaScript files.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal><link
+ linkend="set-image-blocker">set-image-blocker</link></literal> - tells
+ <application>Privoxy</application> what to display in place of an ad image that
+ has hit a block rule. For this to come into play, the URL must match a
+ <literal><link linkend="block">block</link></literal> action somewhere in the
+ configuration, <emphasis>and</emphasis>, it must also match an
+ <literal><link linkend="handle-as-image">handle-as-image</link></literal> action.
+ </para>
+ <para>
+ The configuration options on what to display instead of the ad are:
+ </para>
+ <simplelist>
+ <member>
+ <emphasis>pattern</emphasis> - a checkerboard pattern, so that an ad
+ replacement is obvious. This is the default.
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <emphasis>blank</emphasis> - A very small empty GIF image is displayed.
+ This is the so-called <quote>invisible</quote> configuration option.
+ </member>
+ </simplelist>
+ <simplelist>
+ <member>
+ <emphasis>http://<URL></emphasis> - A redirect to any image anywhere
+ of the user's choosing (advanced usage).
+ </member>
+ </simplelist>
+ </listitem>
+
+</itemizedlist>
+</para>
+
+<para>
+ Advanced users will eventually want to explore &my-app;
+ <literal><link linkend="filter">filters</link></literal> as well. Filters
+ are very different from <literal><link
+ linkend="block">blocks</link></literal>.
+ A <quote>block</quote> blocks a site, page, or unwanted contented. Filters
+ are a way of filtering or modifying what is actually on the page. An example
+ filter usage: a text replacement of <quote>no-no</quote> for
+ <quote>nasty-word</quote>. That is a very simple example. This process can be
+ used for ad blocking, but it is more in the realm of advanced usage and has
+ some pitfalls to be wary off.
+</para>
+
+<para>
+ The quickest way to adjust any of these settings is with your browser through
+ the special <application>Privoxy</application> editor at <ulink
+ url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
+ (shortcut: <ulink url="http://p.p/">http://p.p/show-status</ulink>). This
+ is an internal page, and does not require Internet access.
+</para>
+
+<para>
+ Note that as of <application>Privoxy</application> 3.0.7 beta the
+ action editor is disabled by default. Check the
+ <ulink url="config.html#ENABLE-EDIT-ACTIONS">enable-edit-actions
+ section in the configuration file</ulink> to learn why and in which
+ cases it's safe to enable again.
+</para>
+
+<para>
+ If you decided to enable the action editor, select the appropriate
+ <quote>actions</quote> file, and click
+ <quote><guibutton>Edit</guibutton></quote>. It is best to put personal or
+ local preferences in <filename>user.action</filename> since this is not
+ meant to be overwritten during upgrades, and will over-ride the settings in
+ other files. Here you can insert new <quote>actions</quote>, and URLs for ad
+ blocking or other purposes, and make other adjustments to the configuration.
+ <application>Privoxy</application> will detect these changes automatically.
+</para>
+
+<para>
+ A quick and simple step by step example:
+</para>
+
+<para>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Right click on the ad image to be blocked, then select
+ <quote><guimenuitem>Copy Link Location</guimenuitem></quote> from the
+ pop-up menu.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Set your browser to
+ <ulink
+ url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Find <filename>user.action</filename> in the top section, and click
+ on <quote><guibutton>Edit</guibutton></quote>:
+ </para>
+
+ <!-- image of editor and actions files selections -->
+ <para>
+ <figure pgwide="0" float="0"><title>Actions Files in Use</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="files-in-use.jpg" format="jpg">
+ </imageobject>
+ <textobject>
+ <phrase>[ Screenshot of Actions Files in Use ]</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ You should have a section with only
+ <literal><link linkend="block">block</link></literal> listed under
+ <quote>Actions:</quote>.
+ If not, click a <quote><guibutton>Insert new section below</guibutton></quote>
+ button, and in the new section that just appeared, click the
+ <guibutton>Edit</guibutton> button right under the word <quote>Actions:</quote>.
+ This will bring up a list of all actions. Find
+ <literal><link linkend="block">block</link></literal> near the top, and click
+ in the <quote>Enabled</quote> column, then <quote><guibutton>Submit</guibutton></quote>
+ just below the list.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Now, in the <literal><link linkend="block">block</link></literal> actions section,
+ click the <quote><guibutton>Add</guibutton></quote> button, and paste the URL the
+ browser got from <quote><guimenuitem>Copy Link Location</guimenuitem></quote>.
+ Remove the <literal>http://</literal> at the beginning of the URL. Then, click
+ <quote><guibutton>Submit</guibutton></quote> (or
+ <quote><guibutton>OK</guibutton></quote> if in a pop-up window).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Now go back to the original page, and press <keycap>SHIFT-Reload</keycap>
+ (or flush all browser caches). The image should be gone now.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+</para>
+
+<para>
+ This is a very crude and simple example. There might be good reasons to use a
+ wildcard pattern match to include potentially similar images from the same
+ site. For a more extensive explanation of <quote>patterns</quote>, and
+ the entire actions concept, see <link linkend="actions-file">the Actions
+ section</link>.
+</para>
+
+<para>
+ For advanced users who want to hand edit their config files, you might want
+ to now go to the <link linkend="act-examples">Actions Files Tutorial</link>.
+ The ideas explained therein also apply to the web-based editor.
+</para>
+<para>
+ There are also various
+ <link linkend="filter">filters</link> that can be used for ad blocking
+ (filters are a special subset of actions). These
+ fall into the <quote>advanced</quote> usage category, and are explained in
+ depth in later sections.
+</para>
+
+</sect2>
+
+</sect1>
+
+<!-- ~ End section ~ -->
+
+