+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Coding Guidelines</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="CODING"
-></A
->4. Coding Guidelines</H1
+>4. Coding Guidelines</A
+></H1
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="S1"
-></A
->4.1. Introduction</H2
+>4.1. Introduction</A
+></H2
><P
>This set of standards is designed to make our lives easier. It is
developed with the simple goal of helping us keep the "new and improved
CLASS="SECT2"
><A
NAME="S2"
-></A
->4.2. Using Comments</H2
+>4.2. Using Comments</A
+></H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="S3"
-></A
->4.2.1. Comment, Comment, Comment</H3
+>4.2.1. Comment, Comment, Comment</A
+></H3
><P
><SPAN
CLASS="emphasis"
></P
><P
>Comment as much as possible without commenting the obvious.
- For example do not comment "aVariable is equal to bVariable".
- Instead explain why aVariable should be equal to the bVariable.
+ For example do not comment "variable_a is equal to variable_b".
+ Instead explain why variable_a should be equal to the variable_b.
Just because a person can read code does not mean they will
understand why or what is being done. A reader may spend a lot
more time figuring out what is going on when a simple comment
><PRE
CLASS="PROGRAMLISTING"
>/* if page size greater than 1k ... */
-if ( PageLength() > 1024 )
+if ( page_length() > 1024 )
{
... "block" the page up ...
}
/* if page size is small, send it in blocks */
-if ( PageLength() > 1024 )
+if ( page_length() > 1024 )
{
... "block" the page up ...
}
CLASS="SECT3"
><A
NAME="S4"
-></A
->4.2.2. Use blocks for comments</H3
+>4.2.2. Use blocks for comments</A
+></H3
><P
><SPAN
CLASS="emphasis"
>/*********************************************************************
* This will stand out clearly in your code!
*********************************************************************/
-if ( thisVariable == thatVariable )
+if ( this_variable == that_variable )
{
- DoSomethingVeryImportant();
+ do_something_very_important();
}
/* unfortunately, this may not */
-if ( thisVariable == thatVariable )
+if ( this_variable == that_variable )
{
- DoSomethingVeryImportant();
+ do_something_very_important();
}
-if ( thisVariable == thatVariable ) /* this may not either */
+if ( this_variable == that_variable ) /* this may not either */
{
- DoSomethingVeryImportant();
+ do_something_very_important();
}</PRE
></TD
></TR
CLASS="SECT3"
><A
NAME="S5"
-></A
->4.2.3. Keep Comments on their own line</H3
+>4.2.3. Keep Comments on their own line</A
+></H3
><P
><SPAN
CLASS="emphasis"
* This will stand out clearly in your code,
* But the second example won't.
*********************************************************************/
-if ( thisVariable == thatVariable )
+if ( this_variable == this_variable )
{
- DoSomethingVeryImportant();
+ do_something_very_important();
}
-if ( thisVariable == thatVariable ) /*can you see me?*/
+if ( this_variable == this_variable ) /*can you see me?*/
{
- DoSomethingVeryImportant(); /*not easily*/
+ do_something_very_important(); /*not easily*/
}
if ( 1 == X )
{
- DoSomethingVeryImportant();
+ do_something_very_important();
}
-short DoSomethingVeryImportant(
+short do_something_very_important(
short firstparam, /* represents something */
short nextparam /* represents something else */ )
{
...code here...
-} /* -END- DoSomethingVeryImportant */</PRE
+} /* -END- do_something_very_important */</PRE
></TD
></TR
></TABLE
CLASS="SECT3"
><A
NAME="S6"
-></A
->4.2.4. Comment each logical step</H3
+>4.2.4. Comment each logical step</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S7"
-></A
->4.2.5. Comment All Functions Thoroughly</H3
+>4.2.5. Comment All Functions Thoroughly</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S8"
-></A
>4.2.6. Comment at the end of braces if the
- content is more than one screen length</H3
+ content is more than one screen length</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="PROGRAMLISTING"
>if ( 1 == X )
{
- DoSomethingVeryImportant();
+ do_something_very_important();
...some long list of commands...
} /* -END- if x is 1 */
if ( 1 == X )
{
- DoSomethingVeryImportant();
+ do_something_very_important();
...some long list of commands...
} /* -END- if ( 1 == X ) */</PRE
></TD
CLASS="SECT2"
><A
NAME="S9"
-></A
->4.3. Naming Conventions</H2
+>4.3. Naming Conventions</A
+></H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="S10"
-></A
->4.3.1. Variable Names</H3
+>4.3.1. Variable Names</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S11"
-></A
->4.3.2. Function Names</H3
+>4.3.2. Function Names</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S12"
-></A
->4.3.3. Header file prototypes</H3
+>4.3.3. Header file prototypes</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S13"
-></A
->4.3.4. Enumerations, and #defines</H3
+>4.3.4. Enumerations, and #defines</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S14"
-></A
->4.3.5. Constants</H3
+>4.3.5. Constants</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT2"
><A
NAME="S15"
-></A
->4.4. Using Space</H2
+>4.4. Using Space</A
+></H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="S16"
-></A
->4.4.1. Put braces on a line by themselves.</H3
+>4.4.1. Put braces on a line by themselves.</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S17"
-></A
>4.4.2. ALL control statements should have a
- block</H3
+ block</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="PROGRAMLISTING"
>if ( this == that )
{
- DoSomething();
- DoSomethingElse();
+ do_something();
+ do_something_else();
}</PRE
></TD
></TR
></SPAN
></P
><P
->if ( this == that ) DoSomething(); DoSomethingElse();</P
+>if ( this == that ) do_something(); do_something_else();</P
><P
>or</P
><P
->if ( this == that ) DoSomething();</P
+>if ( this == that ) do_something();</P
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S18"
-></A
>4.4.3. Do not belabor/blow-up boolean
- expressions</H3
+ expressions</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S19"
-></A
>4.4.4. Use white space freely because it is
- free</H3
+ free</A
+></H3
><P
><SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
->int firstValue = 0;
-int someValue = 0;
-int anotherValue = 0;
-int thisVariable = 0;
+>int first_value = 0;
+int some_value = 0;
+int another_value = 0;
+int this_variable = 0;
-if ( thisVariable == thatVariable )
+if ( this_variable == this_variable )
-firstValue = oldValue + ( ( someValue - anotherValue ) - whatever )</PRE
+first_value = old_value + ( ( some_value - another_value ) - whatever )</PRE
></TD
></TR
></TABLE
CLASS="SECT3"
><A
NAME="S20"
-></A
>4.4.5. Don't use white space around structure
- operators</H3
+ operators</A
+></H3
><P
><SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
->aStruct->aMember;
-aStruct.aMember;
-FunctionName();</PRE
+>a_struct->a_member;
+a_struct.a_member;
+function_name();</PRE
></TD
></TR
></TABLE
CLASS="EMPHASIS"
>Instead of:</I
></SPAN
-> aStruct -> aMember; aStruct . aMember;
- FunctionName ();</P
+> a_struct -> a_member; a_struct . a_member;
+ function_name ();</P
></DIV
><DIV
CLASS="SECT3"
CLASS="SECT3"
><A
NAME="S21"
-></A
>4.4.6. Make the last brace of a function stand
- out</H3
+ out</A
+></H3
><P
><SPAN
CLASS="emphasis"
>int function1( ... )
{
...code...
- return( retCode );
+ return( ret_code );
} /* -END- function1 */
></SPAN
></P
><P
->int function1( ... ) { ...code... return( retCode ); } int
+>int function1( ... ) { ...code... return( ret_code ); } int
function2( ... ) { }</P
><P
><SPAN
CLASS="SECT3"
><A
NAME="S22"
-></A
->4.4.7. Use 3 character indentions</H3
+>4.4.7. Use 3 character indentions</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT2"
><A
NAME="S23"
-></A
->4.5. Initializing</H2
+>4.5. Initializing</A
+></H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="S24"
-></A
->4.5.1. Initialize all variables</H3
+>4.5.1. Initialize all variables</A
+></H3
><P
><SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
->short anShort = 0;
-float aFloat = 0;
+>short a_short = 0;
+float a_float = 0;
struct *ptr = NULL;</PRE
></TD
></TR
></SPAN
> It is much easier to debug a SIGSEGV if the
message says you are trying to access memory address 00000000
- and not 129FA012; or arrayPtr[20] causes a SIGSEV vs.
- arrayPtr[0].</P
+ and not 129FA012; or array_ptr[20] causes a SIGSEV vs.
+ array_ptr[0].</P
><P
><SPAN
CLASS="emphasis"
CLASS="SECT2"
><A
NAME="S25"
-></A
->4.6. Functions</H2
+>4.6. Functions</A
+></H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="S26"
-></A
>4.6.1. Name functions that return a boolean as a
- question.</H3
+ question.</A
+></H3
><P
><SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
->ShouldWeBlockThis();
-ContainsAnImage();
-IsWebPageBlank();</PRE
+>should_we_block_this();
+contains_an_image();
+is_web_page_blank();</PRE
></TD
></TR
></TABLE
CLASS="SECT3"
><A
NAME="S27"
-></A
>4.6.2. Always specify a return type for a
- function.</H3
+ function.</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S28"
-></A
>4.6.3. Minimize function calls when iterating by
- using variables</H3
+ using variables</A
+></H3
><P
><SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
->for ( size_t cnt = 0; cnt < blockListLength(); cnt ++ )
+>for ( size_t cnt = 0; cnt < block_list_length(); cnt++ )
{
....
}</PRE
each and every iteration. This increases the overhead in the
program, because the compiler has to look up the function each
time, call it, and return a value. Depending on what occurs in
- the blockListLength() call, it might even be creating and
+ the block_list_length() call, it might even be creating and
destroying structures with each iteration, even though in each
case it is comparing "cnt" to the same value, over and over.
- Remember too - even a call to blockListLength() is a function
+ Remember too - even a call to block_list_length() is a function
call, with the same overhead.</P
><P
>Instead of using a function call during the iterations,
><TD
><PRE
CLASS="PROGRAMLISTING"
->size_t len = blockListLength();
+>size_t len = block_list_length();
-for ( size_t cnt = 0; cnt < len; cnt ++ )
+for ( size_t cnt = 0; cnt < len; cnt++ )
{
....
}</PRE
CLASS="EMPHASIS"
>Exceptions:</I
></SPAN
-> if the value of blockListLength() *may*
- change or could *potentially* change, then you must code the
+> if the value of block_list_length()
+ *may* change or could *potentially* change, then you must code the
function call in the for/while loop.</P
></DIV
><DIV
CLASS="SECT3"
><A
NAME="S29"
-></A
->4.6.4. Pass and Return by Const Reference</H3
+>4.6.4. Pass and Return by Const Reference</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S30"
-></A
->4.6.5. Pass and Return by Value</H3
+>4.6.5. Pass and Return by Value</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S31"
-></A
->4.6.6. Names of include files</H3
+>4.6.6. Names of include files</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S32"
-></A
>4.6.7. Provide multiple inclusion
- protection</H3
+ protection</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S33"
-></A
->4.6.8. Use `extern "C"` when appropriate</H3
+>4.6.8. Use `extern "C"` when appropriate</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S34"
-></A
>4.6.9. Where Possible, Use Forward Struct
- Declaration Instead of Includes</H3
+ Declaration Instead of Includes</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT2"
><A
NAME="S35"
-></A
->4.7. General Coding Practices</H2
+>4.7. General Coding Practices</A
+></H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="S36"
-></A
->4.7.1. Turn on warnings</H3
+>4.7.1. Turn on warnings</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S37"
-></A
>4.7.2. Provide a default case for all switch
- statements</H3
+ statements</A
+></H3
><P
><SPAN
CLASS="emphasis"
> This is not so much a readability issue
as a robust programming issue. The "anomaly code goes here" may
be no more than a print to the STDERR stream (as in
- load_config). Or it may really be an ABEND condition.</P
+ load_config). Or it may really be an abort condition.</P
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S38"
-></A
>4.7.3. Try to avoid falling through cases in a
- switch statement.</H3
+ switch statement.</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S39"
-></A
>4.7.4. Use 'long' or 'short' Instead of
- 'int'</H3
+ 'int'</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S40"
-></A
->4.7.5. Don't mix size_t and other types</H3
+>4.7.5. Don't mix size_t and other types</A
+></H3
><P
><SPAN
CLASS="emphasis"
assumptions about whether it is signed or unsigned, or about
how long it is. Do not compare a size_t against another
variable of a different type (or even against a constant)
- without casting one of the values. Try to avoid using size_t if
- you can.</P
+ without casting one of the values.</P
></DIV
><DIV
CLASS="SECT3"
CLASS="SECT3"
><A
NAME="S41"
-></A
>4.7.6. Declare each variable and struct on its
- own line.</H3
+ own line.</A
+></H3
><P
><SPAN
CLASS="emphasis"
></SPAN
> when you want to declare a bunch of loop
variables or other trivial variables; feel free to declare them
- on 1 line. You should, although, provide a good comment on
+ on one line. You should, although, provide a good comment on
their functions.</P
><P
><SPAN
CLASS="SECT3"
><A
NAME="S42"
-></A
->4.7.7. Use malloc/zalloc sparingly</H3
+>4.7.7. Use malloc/zalloc sparingly</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S43"
-></A
>4.7.8. The Programmer Who Uses 'malloc' is
- Responsible for Ensuring 'free'</H3
+ Responsible for Ensuring 'free'</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S44"
-></A
>4.7.9. Add loaders to the `file_list' structure
- and in order</H3
+ and in order</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="S45"
-></A
>4.7.10. "Uncertain" new code and/or changes to
- existing code, use FIXME</H3
+ existing code, use FIXME or XXX</A
+></H3
><P
><SPAN
CLASS="emphasis"
CLASS="SECT2"
><A
NAME="S46"
-></A
>4.8. Addendum: Template for files and function
- comment blocks:</H2
+ comment blocks:</A
+></H2
><P
><SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
->const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.11 2006/09/26 02:36:29 hal9 Exp $";
+>const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.13 2007/10/30 17:59:31 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source$
*
* Purpose : (Fill me in with a good description!)
*
- * Copyright : Written by and Copyright (C) 2001-2006 the SourceForge
+ * Copyright : Written by and Copyright (C) 2001-2007 the SourceForge
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
CLASS="PROGRAMLISTING"
>#ifndef _FILENAME_H
#define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.11 2006/09/26 02:36:29 hal9 Exp $"
+#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.13 2007/10/30 17:59:31 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source$
*
* Purpose : (Fill me in with a good description!)
*
- * Copyright : Written by and Copyright (C) 2001-2006 the SourceForge
+ * Copyright : Written by and Copyright (C) 2001-2007 the SourceForge
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Contacting the developers, Bug Reporting and Feature Requests</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="CONTACT"
-></A
->8. Contacting the developers, Bug Reporting and Feature Requests</H1
+>8. Contacting the developers, Bug Reporting and Feature Requests</A
+></H1
><P
> We value your feedback. In fact, we rely on it to improve
<SPAN
CLASS="SECT2"
><A
NAME="CONTACT-SUPPORT"
-></A
->8.1. Get Support</H2
+>8.1. Get Support</A
+></H2
><P
> For casual users, our
<A
>users
mailing list</A
>, where the developers also hang around.</P
+><P
+> Note that the Privoxy mailing lists are moderated. Posts from unsubscribed
+ addresses have to be accepted manually by a moderator. This may cause a
+ delay of several days and if you use a subject that doesn't clearly
+ mention Privoxy or one of its features, your message may be accidentally
+ discarded as spam.</P
+><P
+> If you aren't subscribed, you should therefore spend a few seconds
+ to come up with a proper subject. Additionally you should make it clear
+ that you want to get CC'd. Otherwise some responses will be directed to
+ the mailing list only, and you won't see them.</P
></DIV
><DIV
CLASS="SECT2"
CLASS="SECT2"
><A
NAME="REPORTING"
-></A
->8.2. Reporting Problems</H2
+>8.2. Reporting Problems</A
+></H2
><P
><SPAN
CLASS="QUOTE"
CLASS="SECT3"
><A
NAME="CONTACT-ADS"
-></A
->8.2.1. Reporting Ads or Other Configuration Problems</H3
+>8.2.1. Reporting Ads or Other Configuration Problems</A
+></H3
><P
> Please send feedback on ads that slipped through, innocent images that were
blocked, sites that don't work properly, and other configuration related problem of
CLASS="SECT3"
><A
NAME="CONTACT-BUGS"
-></A
->8.2.2. Reporting Bugs</H3
+>8.2.2. Reporting Bugs</A
+></H3
><P
-> Please report all bugs <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->only</I
-></SPAN
-> through our
- bug tracker:
+> Please report all bugs through our bug tracker:
<A
HREF="http://sourceforge.net/tracker/?group_id=11118&atid=111118"
TARGET="_top"
>. If already submitted, please feel free to add any info to the
original report that might help to solve the issue.</P
><P
->
- Please try to verify that it is a <SPAN
+> Please try to verify that it is a <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
> bug,
- and not a browser or site bug first. If unsure,
+ and not a browser or site bug or documented behaviour that just happens
+ to be different than what you expected. If unsure,
try <A
HREF="http://config.privoxy.org/toggle?set=disable"
TARGET="_top"
> <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
->, and see if the problem persists.
- If you are using your own custom configuration, please try
- the stock configs to see if the problem is configuration related.</P
+>, and see if the problem persists.</P
+><P
+> If you are using your own custom configuration, please try
+ the stock configs to see if the problem is configuration related.
+ If you're having problems with a feature that is disabled by default,
+ please ask around on the mailing list if others can reproduce the problem.</P
><P
-> If not using the latest version, the bug may have been found
+> If you aren't using the latest Privoxy version, the bug may have been found
and fixed in the meantime. We would appreciate if you could take the time
to <A
HREF="http://www.privoxy.org/user-manual/installation.html"
>upgrade
to the latest version</A
> (or even the latest CVS snapshot) and verify
- your bug.</P
+ that your bug still exists.</P
><P
>Please be sure to provide the following information:</P
><P
> The exact <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
-> version of the proxy software
+> version you are using
(if you got the source from CVS, please also provide the source code revisions
as shown in <A
HREF="http://config.privoxy.org/show-version"
sending the output of <SPAN
CLASS="QUOTE"
>"uname -a"</SPAN
-> should do.
+> should do,
+ in case of GNU/Linux, please also name the distribution.
</P
></LI
><LI
CLASS="APPLICATION"
>Privoxy</SPAN
> is one supplied
- by the developers of <SPAN
+ by the <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
-> via SourceForge,
- or somewhere else.
+> developers via SourceForge,
+ or if you got your copy somewhere else.
</P
></LI
><LI
another proxy such as <SPAN
CLASS="APPLICATION"
>Tor</SPAN
->. If so, please try
- disabling the other proxy.
+>. If so, please
+ temporary disable the other proxy to see if the symptoms change.
</P
></LI
><LI
action taken).
</P
></LI
-><LI
-><P
-> <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->Please provide your SF login, or email address</I
-></SPAN
->, in case we
- need to contact you.
- </P
-></LI
></UL
></P
><P
+> You don't have to tell us your actual name when filing a problem
+ report, but please use a nickname so we can differentiate between
+ your messages and the ones entered by other "anonymous" users that
+ may respond to your request if they have the same problem or already
+ found a solution.</P
+><P
+> Please also check the status of your request a few days after submitting
+ it, as we may request additional information. If you use a SF id,
+ you should automatically get a mail when someone responds to your request.</P
+><P
> The <A
HREF="http://www.privoxy.org/user-manual/appendix.html#ACTIONSANAT"
TARGET="_top"
CLASS="SECT2"
><A
NAME="CONTACT-FEATURE"
-></A
->8.3. Request New Features</H2
+>8.3. Request New Features</A
+></H2
><P
> You are welcome to submit ideas on new features or other proposals
for improvement through our feature request tracker at
CLASS="SECT2"
><A
NAME="CONTACT-OTHER"
-></A
->8.4. Other</H2
+>8.4. Other</A
+></H2
><P
>For any other issues, feel free to use the mailing lists. Technically interested users
and people who wish to contribute to the project are also welcome on the developers list!
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Privoxy Copyright, License and History</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="COPYRIGHT"
-></A
->9. Privoxy Copyright, License and History</H1
+>9. Privoxy Copyright, License and History</A
+></H1
><P
-> Copyright © 2001 - 2006 by Privoxy Developers <TT
+> Copyright © 2001 - 2007 by Privoxy Developers <CODE
CLASS="EMAIL"
><<A
HREF="mailto:ijbswa-developers@lists.sourceforge.net"
>ijbswa-developers@lists.sourceforge.net</A
->></TT
+>></CODE
></P
><P
> Some source code is based on code Copyright © 1997 by Anonymous Coders
><H2
CLASS="SECT2"
><A
-NAME="AEN1222"
-></A
->9.1. License</H2
+NAME="AEN1223"
+>9.1. License</A
+></H2
><P
> <SPAN
CLASS="APPLICATION"
><H2
CLASS="SECT2"
><A
-NAME="AEN1238"
-></A
->9.2. History</H2
+NAME="AEN1239"
+>9.2. History</A
+></H2
><P
> A long time ago, there was the
<A
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>The CVS Repository</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="CVS"
-></A
->2. The CVS Repository</H1
+>2. The CVS Repository</A
+></H1
><P
> If you become part of the active development team, you will eventually
need write access to our holy grail, the CVS repository. One of the
CLASS="SECT2"
><A
NAME="CVSACCESS"
-></A
->2.1. Access to CVS</H2
+>2.1. Access to CVS</A
+></H2
><P
> The project's CVS repository is hosted on
<A
CLASS="SECT2"
><A
NAME="CVSBRANCHES"
-></A
->2.2. Branches</H2
+>2.2. Branches</A
+></H2
><P
> Within the CVS repository, there are modules and branches. As
mentioned, the sources are in the <TT
CLASS="SECT2"
><A
NAME="CVSCOMMIT"
-></A
->2.3. CVS Commit Guidelines</H2
+>2.3. CVS Commit Guidelines</A
+></H2
><P
> The source tree is the heart of every software project. Every effort must
be made to ensure that it is readable, compilable and consistent at all
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Documentation Guidelines</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="DOCUMENTATION"
-></A
->3. Documentation Guidelines</H1
+>3. Documentation Guidelines</A
+></H1
><P
> All formal documents are maintained in Docbook SGML and located in the
- <TT
+ <SAMP
CLASS="COMPUTEROUTPUT"
->doc/source/*</TT
+>doc/source/*</SAMP
> directory. You will need
<A
HREF="http://www.docbook.org"
</P
><P
> Formal documents are built with the Makefile targets of
- <TT
+ <SAMP
CLASS="COMPUTEROUTPUT"
->make dok</TT
+>make dok</SAMP
>, or alternately
- <TT
+ <SAMP
CLASS="COMPUTEROUTPUT"
->make redhat-dok</TT
+>make redhat-dok</SAMP
>. If you have problems,
try both. The build process uses the document SGML sources in
- <TT
+ <SAMP
CLASS="COMPUTEROUTPUT"
->doc/source/*/*</TT
+>doc/source/*/*</SAMP
> to update all text files in
- <TT
+ <SAMP
CLASS="COMPUTEROUTPUT"
->doc/text/</TT
+>doc/text/</SAMP
> and to update all HTML
- documents in <TT
+ documents in <SAMP
CLASS="COMPUTEROUTPUT"
->doc/webserver/</TT
+>doc/webserver/</SAMP
>.
</P
><P
TYPE="1"
><LI
><P
-> First, build the docs by running <TT
+> First, build the docs by running <SAMP
CLASS="COMPUTEROUTPUT"
>make
- dok</TT
-> (or alternately <TT
+ dok</SAMP
+> (or alternately <SAMP
CLASS="COMPUTEROUTPUT"
>make
- redhat-dok</TT
->). For PDF docs, do <TT
+ redhat-dok</SAMP
+>). For PDF docs, do <SAMP
CLASS="COMPUTEROUTPUT"
>make
- dok-pdf</TT
+ dok-pdf</SAMP
>.
</P
></LI
><LI
><P
-> Run <TT
+> Run <SAMP
CLASS="COMPUTEROUTPUT"
->make webserver</TT
+>make webserver</SAMP
> which copies all
- files from <TT
+ files from <SAMP
CLASS="COMPUTEROUTPUT"
->doc/webserver</TT
+>doc/webserver</SAMP
> to the
sourceforge webserver via scp.
</P
CLASS="SECT2"
><A
NAME="SGML"
-></A
->3.1. Quickstart to Docbook and SGML</H2
+>3.1. Quickstart to Docbook and SGML</A
+></H2
><P
> If you are not familiar with SGML, it is a markup language similar to HTML.
Actually, not a mark up language per se, but a language used to define
CLASS="SECT2"
><A
NAME="DOCSTYLE"
-></A
>3.2. <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
-> Documentation Style</H2
+> Documentation Style</A
+></H2
><P
> It will be easier if everyone follows a similar writing style. This
just makes it easier to read what someone else has written if it
CLASS="SECT2"
><A
NAME="AEN217"
-></A
->3.3. Privoxy Custom Entities</H2
+>3.3. Privoxy Custom Entities</A
+></H2
><P
> <SPAN
CLASS="APPLICATION"
>
version string, e.g. <SPAN
CLASS="QUOTE"
->"3.0.6"</SPAN
+>"3.0.7"</SPAN
>.
</TD
></TR
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Privoxy Developer Manual</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="NEXT"
TITLE="Introduction"
HREF="introduction.html"><LINK
CLASS="TITLE"
><A
NAME="AEN2"
-></A
->Privoxy Developer Manual</H1
+>Privoxy Developer Manual</A
+></H1
><P
CLASS="PUBDATE"
> <SUB
<A
HREF="copyright.html"
>Copyright</A
-> © 2001-2006 by
+> © 2001-2007 by
<A
-HREF="http://www.privoxy.org"
+HREF="http://www.privoxy.org/"
TARGET="_top"
>Privoxy Developers</A
>
<BR></P
><P
CLASS="PUBDATE"
->$Id: developer-manual.sgml,v 2.11 2006/09/26 02:36:29 hal9 Exp $<BR></P
+>$Id: developer-manual.sgml,v 2.13 2007/10/30 17:59:31 fabiankeil Exp $<BR></P
><DIV
><DIV
CLASS="ABSTRACT"
+><P
+></P
><A
NAME="AEN9"
></A
><P
-></P
-><P
> The developer manual provides guidance on coding, testing, packaging, documentation
and other issues of importance to those involved with
<SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
> development. It is mandatory (and helpful!) reading
- for anyone who wants to join the team.</P
+ for anyone who wants to join the team. Note that it's currently out of date
+ and may not be entirely correct. As always, patches are welcome.</P
><P
> Please note that this document is constantly evolving. This copy represents
- the state at the release of version 3.0.6.
+ the state at the release of version 3.0.7.
You can find the latest version of the this manual at <A
HREF="http://www.privoxy.org/developer-manual/"
TARGET="_top"
>4.7.10. <A
HREF="coding.html#S45"
>"Uncertain" new code and/or changes to
- existing code, use FIXME</A
+ existing code, use FIXME or XXX</A
></DT
></DL
></DD
><DL
><DT
>9.1. <A
-HREF="copyright.html#AEN1222"
+HREF="copyright.html#AEN1223"
>License</A
></DT
><DT
>9.2. <A
-HREF="copyright.html#AEN1238"
+HREF="copyright.html#AEN1239"
>History</A
></DT
></DL
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Introduction</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="INTRODUCTION"
-></A
->1. Introduction</H1
+>1. Introduction</A
+></H1
><P
> <SPAN
CLASS="APPLICATION"
<SPAN
CLASS="APPLICATION"
>Junkbuster</SPAN
->, is an Open Source project
- and licensed under the GPL. As such, <SPAN
+>, is a Free Software project
+ and the code is licensed under the GPL. As such,
+ <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
->
- development is potentially open to anyone who has the time, knowledge,
- and desire to contribute in any capacity. Our goals are simply to
- continue the mission, to improve <SPAN
+> development is potentially open
+ to anyone who has the time, knowledge, and desire to contribute
+ in any capacity. Our goals are simply to continue the mission,
+ to improve <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
>, and
</P
><P
> One does not have to be a programmer to contribute. Packaging, testing,
- and porting, are all important jobs as well.
+ documenting and porting, are all important jobs as well.
</P
><DIV
CLASS="SECT2"
CLASS="SECT2"
><A
NAME="QUICKSTART"
-></A
->1.1. Quickstart to Privoxy Development</H2
+>1.1. Quickstart to Privoxy Development</A
+></H2
><P
> The first step is to join the <A
HREF="mailto:ijbswa-developers@lists.sourceforge.net"
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Releasing a New Version</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="NEWRELEASE"
-></A
->6. Releasing a New Version</H1
+>6. Releasing a New Version</A
+></H1
><P
> When we release versions of <SPAN
CLASS="APPLICATION"
CLASS="SECT2"
><A
NAME="VERSIONNUMBERS"
-></A
->6.1. Version numbers</H2
+>6.1. Version numbers</A
+></H2
><P
> First you need to determine which version number the release will have.
<SPAN
CLASS="SECT2"
><A
NAME="BEFORERELEASE"
-></A
->6.2. Before the Release: Freeze</H2
+>6.2. Before the Release: Freeze</A
+></H2
><P
> The following <SPAN
CLASS="emphasis"
CLASS="SECT2"
><A
NAME="THERELEASE"
-></A
->6.3. Building and Releasing the Packages</H2
+>6.3. Building and Releasing the Packages</A
+></H2
><P
> Now the individual packages can be built and released. Note that for
GPL reasons the first package to be released is always the source tarball.
CLASS="SECT3"
><A
NAME="PACK-GUIDELINES"
-></A
->6.3.1. Note on Privoxy Packaging</H3
+>6.3.1. Note on Privoxy Packaging</A
+></H3
><P
> Please keep these general guidelines in mind when putting together
your package. These apply to <SPAN
CLASS="SECT3"
><A
NAME="NEWRELEASE-TARBALL"
-></A
->6.3.2. Source Tarball</H3
+>6.3.2. Source Tarball</A
+></H3
><P
> First, <SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="NEWRELEASE-RPM"
-></A
->6.3.3. SuSE, Conectiva or Red Hat RPM</H3
+>6.3.3. SuSE, Conectiva or Red Hat RPM</A
+></H3
><P
> In following text, replace <TT
CLASS="REPLACEABLE"
CLASS="SECT3"
><A
NAME="NEWRELEASE-OS2"
-></A
->6.3.4. OS/2</H3
+>6.3.4. OS/2</A
+></H3
><P
> First, <SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="NEWRELEASE-SOLARIS"
-></A
->6.3.5. Solaris</H3
+>6.3.5. Solaris</A
+></H3
><P
> Login to Sourceforge's compilefarm via ssh:
</P
CLASS="SECT3"
><A
NAME="NEWRELEASE-WINDOWS"
-></A
->6.3.6. Windows</H3
+>6.3.6. Windows</A
+></H3
><P
> You should ensure you have the latest version of Cygwin (from
<A
CLASS="SECT3"
><A
NAME="NEWRELEASE-DEBIAN"
-></A
->6.3.7. Debian</H3
+>6.3.7. Debian</A
+></H3
><P
> First, <SPAN
CLASS="emphasis"
><TD
><PRE
CLASS="PROGRAMLISTING"
-> debchange -v 3.0.6-stable-1 "New upstream version"</PRE
+> debchange -v 3.0.7-beta-1 "New upstream version"</PRE
></TD
></TR
></TABLE
> This will create
<TT
CLASS="FILENAME"
->../privoxy_3.0.6-stable-1_i386.deb</TT
+>../privoxy_3.0.7-beta-1_i386.deb</TT
>
which can be uploaded. To upload the package to Sourceforge, simply
issue
CLASS="SECT3"
><A
NAME="NEWRELEASE-MACOSX"
-></A
->6.3.8. Mac OSX</H3
+>6.3.8. Mac OSX</A
+></H3
><P
> First, <SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="NEWRELEASE-FREEBSD"
-></A
->6.3.9. FreeBSD</H3
+>6.3.9. FreeBSD</A
+></H3
><P
> Login to Sourceforge's compile-farm via ssh:
</P
CLASS="SECT3"
><A
NAME="NEWRELEASE-HPUX"
-></A
->6.3.10. HP-UX 11</H3
+>6.3.10. HP-UX 11</A
+></H3
><P
> First, <SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="NEWRELEASE-AMIGA"
-></A
->6.3.11. Amiga OS</H3
+>6.3.11. Amiga OS</A
+></H3
><P
> First, <SPAN
CLASS="emphasis"
CLASS="SECT3"
><A
NAME="NEWRELEASE-AIX"
-></A
->6.3.12. AIX</H3
+>6.3.12. AIX</A
+></H3
><P
> Login to Sourceforge's compilefarm via ssh:
</P
CLASS="SECT2"
><A
NAME="RELEASING"
-></A
->6.4. Uploading and Releasing Your Package</H2
+>6.4. Uploading and Releasing Your Package</A
+></H2
><P
> After the package is ready, it is time to upload it
to SourceForge, and go through the release steps. The upload
CLASS="emphasis"
><I
CLASS="EMPHASIS"
->3.0.6
+>3.0.7
(beta)</I
></SPAN
>.
CLASS="SECT2"
><A
NAME="AFTERRELEASE"
-></A
->6.5. After the Release</H2
+>6.5. After the Release</A
+></H2
><P
> When all (or: most of the) packages have been uploaded and made available,
send an email to the <A
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>See also</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="SEEALSO"
-></A
->10. See also</H1
+>10. See also</A
+></H1
><P
> Other references and sites of interest to <SPAN
CLASS="APPLICATION"
HREF="http://www.squid-cache.org/"
TARGET="_top"
>http://www.squid-cache.org/</A
->, a very popular
+>, a popular
caching proxy, which is often used together with <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
><TR
><TD
> <A
+HREF="http://www.pps.jussieu.fr/~jch/software/polipo/"
+TARGET="_top"
+>http://www.pps.jussieu.fr/~jch/software/polipo/</A
+>,
+ <SPAN
+CLASS="APPLICATION"
+>Polipo</SPAN
+> is a caching proxy with advanced features
+ like pipelining, multiplexing and caching of partial instances. In many setups
+ it can be used as <SPAN
+CLASS="APPLICATION"
+>Squid</SPAN
+> replacement.
+ </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+ <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+> <A
HREF="http://tor.eff.org/"
TARGET="_top"
>http://tor.eff.org/</A
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Testing Guidelines</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="TESTING"
-></A
->5. Testing Guidelines</H1
+>5. Testing Guidelines</A
+></H1
><P
>To be filled.</P
><DIV
CLASS="SECT2"
><A
NAME="TESTING-PLAN"
-></A
->5.1. Testplan for releases</H2
+>5.1. Testplan for releases</A
+></H2
><P
> Explain release numbers. major, minor. developer releases. etc.
CLASS="SECT2"
><A
NAME="TESTING-REPORT"
-></A
->5.2. Test reports</H2
+>5.2. Test reports</A
+></H2
><P
>Please submit test reports only with the <A
HREF="http://sourceforge.net/tracker/?func=add&group_id=11118&atid=395005"
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Update the Webserver</TITLE
><META
NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Privoxy Developer Manual"
HREF="index.html"><LINK
CLASS="SECT1"
><A
NAME="WEBSERVER-UPDATE"
-></A
->7. Update the Webserver</H1
+>7. Update the Webserver</A
+></H1
><P
> The webserver should be updated at least with each stable release. When
updating, please follow these steps to make sure that no broken links,
><BR></P
><P
CLASS="PUBDATE"
->$Id: faq.sgml,v 2.31 2007/11/05 02:34:53 hal9 Exp $<BR></P
+>$Id: faq.sgml,v 2.33 2007/11/15 03:30:20 hal9 Exp $<BR></P
><DIV
><DIV
CLASS="ABSTRACT"
>.</P
><P
> On the other hand, if you use non-Microsoft products, and you occasionally
- notice wierd characters on pages, you might want to try it.</P
+ notice weird characters on pages, you might want to try it.</P
></DIV
><DIV
CLASS="SECT2"
-
-<HTML><HEAD><TITLE>Manpage of PRIVOXY</TITLE>
-<LINK REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></HEAD><BODY>
-<H1>PRIVOXY</H1>
-Section: (1)<BR>Updated: 13 November 2006<BR><A HREF="#index">Index</A>
-<HR>
-
-<A NAME="lbAB"> </A>
-<H2>NAME</H2>
-
-privoxy - Privacy Enhancing Proxy
-<A NAME="lbAC"> </A>
-<H2>SYNOPSIS</H2>
-
-<P>
-<B>privoxy</B> [<B>--help</B> ] [<B>--version</B> ] [<B>--no-daemon</B> ] [<B>--pidfile </B><I>pidfile</I><B></B> ] [<B>--user </B><I>user[.group]</I><B></B> ] [<B>--chroot</B> ] [<B></B><I>configfile</I><B></B> ]
-<P>
-<A NAME="lbAD"> </A>
-<H2>OPTIONS</H2>
-
-<P>
-
-<B>Privoxy</B> may be invoked with the following command line
-options:
-<DL COMPACT>
-<DT><B>--help</B><DD>
-Print brief usage info and exit.
-<DT><B>--version</B><DD>
-Print version info and exit.
-<DT><B>--no-daemon</B><DD>
-Don't become a daemon, i.e. don't fork and become process group
-leader, don't detach from controlling tty, and do all logging there.
-<DT><B>--pidfile </B><I>pidfile</I><B></B><DD>
-On startup, write the process ID to <I>pidfile</I>.
-Delete the <I>pidfile</I> on exit.
-Failure to create or delete the <I>pidfile</I>
-is non-fatal. If no <B>--pidfile</B> option is given, no PID file will be used.
-<DT><B>--user </B><I>user[.group]</I><B></B><DD>
-After (optionally) writing the PID file, assume the user ID of
-<I>user</I> and the GID of
-<I>group</I>, or, if the optional
-<I>group</I> was not given, the default group of
-<I>user</I>. Exit if the privileges are not
-sufficient to do so.
-<DT><B>--chroot</B><DD>
-Before changing to the user ID given in the --user option, chroot to
-that user's home directory, i.e. make the kernel pretend to the
-<B>Privoxy</B> process that the directory tree starts
-there. If set up carefully, this can limit the impact of possible
-vulnerabilities in <B>Privoxy</B> to the files contained in
-that hierarchy.
-</DL>
-<P>
-
-If the <I>configfile</I> is not specified on the command line,
-<B>Privoxy</B> will look for a file named
-<I>config</I> in the current directory . If no
-<I>configfile</I> is found, <B>Privoxy</B> will
-fail to start.
-<A NAME="lbAE"> </A>
-<H2>DESCRIPTION</H2>
-
-<P>
-
-Privoxy is a
-web proxy
-with advanced filtering capabilities for protecting
-privacy, modifying web page data, managing
-cookies,
-controlling access, and removing ads, banners, pop-ups and other obnoxious
-Internet junk. Privoxy has a very flexible configuration and can be
-customized to suit individual needs and tastes. Privoxy has application for
-both stand-alone systems and multi-user networks.
-<P>
-
-Privoxy is based on Internet Junkbuster (tm).
-<A NAME="lbAF"> </A>
-<H2>INSTALLATION AND USAGE</H2>
-
-<P>
-
-Browsers must be individually configured to use <B>Privoxy</B> as
-a HTTP proxy. The default setting is for localhost, on port 8118
-(configurable in the main config file). To set the HTTP proxy in Netscape
-and Mozilla, go through: <B>Edit</B>;
-<B>Preferences</B>; <B>Advanced</B>;
-<B>Proxies</B>; <B>Manual Proxy Configuration</B>;
-<B>View</B>.
-<P>
-
-For Firefox, go through: <B>Tools</B>;
-<B>Options</B>; <B>General</B>;
-<B>Connection Settings</B>;
-<B>Manual Proxy Configuration</B>.
-<P>
-
-For Internet Explorer, go through: <B>Tools</B>;
-<B>Internet Properties</B>; <B>Connections</B>;
-<B>LAN Settings</B>.
-<P>
-
-The Secure (SSL) Proxy should also be set to the same values, otherwise
-https: URLs will not be proxied. Note: <B>Privoxy</B> can only
-proxy HTTP and HTTPS traffic. Do not try it with FTP or other protocols.
-HTTPS presents some limitations, and not all features will work with HTTPS
-connections.
-<P>
-
-For other browsers, check the documentation.
-<A NAME="lbAG"> </A>
-<H2>CONFIGURATION</H2>
-
-<P>
-
-<B>Privoxy</B> can be configured with the various configuration
-files. The default configuration files are: <I>config</I>,
-<I>default.filter</I>, and
-<I>default.action</I>. <I>user.action</I> should
-be used for locally defined exceptions to the default rules of
-<I>default.action</I>, and <I>user.filter</I> for
-locally defined filters. These are well commented. On Unix
-and Unix-like systems, these are located in
-<I>/etc/privoxy/</I> by default.
-<P>
-
-<B>Privoxy</B> uses the concept of <B>actions</B>
-in order to manipulate the data stream between the browser and remote sites.
-There are various actions available with specific functions for such things
-as blocking web sites, managing cookies, etc. These actions can be invoked
-individually or combined, and used against individual URLs, or groups of URLs
-that can be defined using wildcards and regular expressions. The result is
-that the user has greatly enhanced control and freedom.
-<P>
-
-The actions list (ad blocks, etc) can also be configured with your
-web browser at <A HREF="http://config.privoxy.org/">http://config.privoxy.org/.</A>
-<B>Privoxy's</B> configuration parameters can also be viewed at
-the same page. In addition, <B>Privoxy</B> can be toggled on/off.
-This is an internal page, and does not require Internet access.
-<P>
-
-See the <I>User Manual</I> for a detailed
-explanation of installation, general usage, all configuration options, new
-features and notes on upgrading.
-<A NAME="lbAH"> </A>
-<H2>SAMPLE CONFIGURATION</H2>
-
-<P>
-
-A brief example of what a simple <I>default.action</I>
-configuration might look like:
-<P>
-<PRE>
- # Define a few useful custom aliases for later use
- {{alias}}
-
- # Useful aliases that combine more than one action
- +crunch-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
- -crunch-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
- +block-as-image = +block +handle-as-image
-
- # Fragile sites should have the minimum changes
- fragile = -block -deanimate-gifs -fast-redirects -filter \
- -hide-referer -prevent-cookies -kill-popups
-
- ## Turn some actions on ################################
- ## NOTE: Actions are off by default, unless explictily turned on
- ## otherwise with the '+' operator.
-
-{ \
--add-header \
--block \
--content-type-overwrite \
--crunch-client-header \
--crunch-if-none-match \
--crunch-outgoing-cookies \
--crunch-incoming-cookies \
--crunch-server-header \
-+deanimate-gifs{last} \
--downgrade-http-version \
--fast-redirects \
--filter{js-annoyances} \
--filter{js-events} \
--filter{html-annoyances} \
--filter{content-cookies} \
-+filter{refresh-tags} \
--filter{unsolicited-popups} \
--filter{all-popups} \
--filter{img-reorder} \
--filter{banners-by-size} \
--filter{banners-by-link} \
-+filter{webbugs} \
--filter{tiny-textforms} \
-+filter{jumping-windows} \
--filter{frameset-borders} \
--filter{demoronizer} \
--filter{shockwave-flash} \
--filter{quicktime-kioskmode} \
--filter{fun} \
--filter{crude-parental} \
-+filter{ie-exploits} \
--filter{site-specifics} \
--filter{google} \
--filter{yahoo} \
--filter{msn} \
--filter{blogspot} \
--filter{xml-to-html} \
--filter{html-to-xml} \
--filter{no-ping} \
--filter{hide-tor-exit-notation} \
--filter-client-headers \
--filter-server-headers \
--force-text-mode \
--handle-as-empty-document
--handle-as-image \
--hide-accept-language \
--hide-content-disposition \
--hide-if-modified-since \
-+hide-forwarded-for-headers \
-+hide-from-header{block} \
-+hide-referrer{forge} \
--hide-user-agent \
--inspect-jpegs \
--kill-popups \
--limit-connect \
--overwrite-last-modified \
--redirect \
-+prevent-compression \
--send-vanilla-wafer \
--send-wafer \
-+session-cookies-only \
-+set-image-blocker{pattern} \
--treat-forbidden-connects-like-blocks \
-}
-/ # '/' Match *all* URL patterns
-
-
- # Block all URLs that match these patterns
- { +block }
- ad.
- ad[sv].
- .*ads.
- banner?.
- /.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)
- .hitbox.com
- media./.*(ads|banner)
-
- # Block, and treat these URL patterns as if they were 'images'.
- # We would expect these to be ads.
- { +block-as-image }
- .ad.doubleclick.net
- .a[0-9].yimg.com/(?:(?!/i/).)*$
- ad.*.doubleclick.net
-
- # Make exceptions for these harmless ones that would be
- # caught by our +block patterns just above.
- { -block }
- adsl.
- adobe.
- advice.
- .*downloads.
- # uploads or downloads
- /.*loads
-</PRE>
-
-<P>
-
-Then for a <I>user.action</I>, we would put local,
-narrowly defined exceptions:
-<P>
-<PRE>
- # Re-define aliases as needed here
- {{alias}}
-
- # Useful aliases
- -crunch-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
-
- # Set personal exceptions to the policies in default.action #######
-
- # Sites where we want persistent cookies, so allow *all* cookies
- { -crunch-cookies -session-cookies-only }
- .redhat.com
- .sun.com
- .msdn.microsoft.com
-
- # These sites breaks easily. Use our "fragile" alias here.
- { fragile }
- .forbes.com
- mybank.example.com
-
- # Replace example.com's style sheet with one of my choosing
- { +redirect{<A HREF="http://localhost/css-replacements/example.com.css}">http://localhost/css-replacements/example.com.css}</A> }
- example.com/stylesheet.css
-</PRE>
-
-<P>
-
-See the comments in the configuration files themselves, or the
-<I>User Manual</I>
-for full explanations of the above syntax, and other <B>Privoxy</B>
-configuration options.
-<A NAME="lbAI"> </A>
-<H2>FILES</H2>
-
-<P>
-<PRE>
-
- <I>/usr/sbin/privoxy</I>
- <I>/etc/privoxy/config</I>
- <I>/etc/privoxy/default.action</I>
- <I>/etc/privoxy/standard.action</I>
- <I>/etc/privoxy/user.action</I>
- <I>/etc/privoxy/default.filter</I>
- <I>/etc/privoxy/user.filter</I>
- <I>/etc/privoxy/trust</I>
- <I>/etc/privoxy/templates/*</I>
- <I>/var/log/privoxy/logfile</I>
-</PRE>
-
-<P>
-
-Various other files should be included, but may vary depending on platform
-and build configuration. Additional documentation should be included in the local
-documentation directory.
-<A NAME="lbAJ"> </A>
-<H2>SIGNALS</H2>
-
-<P>
-
-<B>Privoxy</B> terminates on the <B>SIGINT</B>,
-<B>SIGTERM</B> and <B>SIGABRT</B> signals. Log
-rotation scripts may cause a re-opening of the logfile by sending a
-<B>SIGHUP</B> to <B>Privoxy</B>. Note that unlike
-other daemons, <B>Privoxy</B> does not need to be made aware of
-config file changes by <B>SIGHUP</B> -- it will detect them
-automatically.
-<A NAME="lbAK"> </A>
-<H2>NOTES</H2>
-
-<P>
-
-Please see the <I>User Manual</I> on how to contact the
-developers, for feature requests, reporting problems, and other questions.
-<A NAME="lbAL"> </A>
-<H2>SEE ALSO</H2>
-
-<P>
-
-Other references and sites of interest to <B>Privoxy</B>
-users:
-<P>
-
-<P>
-<A HREF="http://www.privoxy.org/">http://www.privoxy.org/,</A>
-the <B>Privoxy</B> Home page.
-<P>
-<A HREF="http://www.privoxy.org/faq/">http://www.privoxy.org/faq/,</A>
-the <B>Privoxy</B> FAQ.
-<P>
-<A HREF="http://sourceforge.net/projects/ijbswa/">http://sourceforge.net/projects/ijbswa/,</A>
-the Project Page for <B>Privoxy</B> on
-SourceForge.
-<P>
-<A HREF="http://config.privoxy.org/">http://config.privoxy.org/,</A>
-the web-based user interface. <B>Privoxy</B> must be
-running for this to work. Shortcut: <A HREF="http://p.p/">http://p.p/</A>
-<P>
-<A HREF="http://sourceforge.net/tracker/?group_id=11118">http://sourceforge.net/tracker/?group_id=11118</A>&atid=460288, to submit ``misses'' and other
-configuration related suggestions to the developers.
-<P>
-<A HREF="http://www.junkbusters.com/ht/en/cookies.html">http://www.junkbusters.com/ht/en/cookies.html,</A>
-an explanation how cookies are used to track web users.
-<P>
-<A HREF="http://www.junkbusters.com/ijb.html">http://www.junkbusters.com/ijb.html,</A>
-the original Internet Junkbuster.
-<P>
-<A HREF="http://privacy.net/">http://privacy.net/,</A> a useful site
-to check what information about you is leaked while you browse the web.
-<P>
-<A HREF="http://www.squid-cache.org/">http://www.squid-cache.org/,</A> a very popular
-caching proxy, which is often used together with <B>Privoxy</B>.
-<P>
-<A HREF="http://tor.eff.org/">http://tor.eff.org/,</A>
-<B>Tor</B> can help anonymize web browsing,
-web publishing, instant messaging, IRC, SSH, and other applications.
-<P>
-<A HREF="http://www.privoxy.org/developer-manual/">http://www.privoxy.org/developer-manual/,</A>
-the <B>Privoxy</B> developer manual.
-<A NAME="lbAM"> </A>
-<H2>DEVELOPMENT TEAM</H2>
-
-<P>
-<PRE>
- Fabian Keil, developer
- David Schmidt, developer
-
- Hal Burgiss
- Ian Cummings
- Roland Rosenfeld
-</PRE>
-
-<A NAME="lbAN"> </A>
-<H2>COPYRIGHT AND LICENSE</H2>
-
-<A NAME="lbAO"> </A>
-<H3>COPYRIGHT</H3>
-
-<P>
-
-Copyright (C) 2001 - 2006 by Privoxy Developers <<A HREF="mailto:ijbswa-developers@lists.sourceforge.net">ijbswa-developers@lists.sourceforge.net</A>>
-<P>
-
-Some source code is based on code Copyright (C) 1997 by Anonymous Coders
-and Junkbusters, Inc. and licensed under the <I>GNU General Public
-License</I>.
-<A NAME="lbAP"> </A>
-<H3>LICENSE</H3>
-
-<P>
-
-<B>Privoxy</B> is free software; you can
-redistribute it and/or modify it under the terms of the
-<I>GNU General Public
-License</I>, version 2, as published by the Free Software Foundation.
-<P>
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the
-<I>GNU General Public License</I> for
-more details, which is available from the Free Software Foundation, Inc,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-<P>
-
-You should have received a copy of the <I>GNU General Public License</I>
-along with this program; if not, write to the Free Software
-Foundation, Inc. 51 Franklin Street, Fifth Floor
-Boston, MA 02110-1301
-USA
-<P>
-
-<HR>
-<A NAME="index"> </A><H2>Index</H2>
-<DL>
-<DT><A HREF="#lbAB">NAME</A><DD>
-<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
-<DT><A HREF="#lbAD">OPTIONS</A><DD>
-<DT><A HREF="#lbAE">DESCRIPTION</A><DD>
-<DT><A HREF="#lbAF">INSTALLATION AND USAGE</A><DD>
-<DT><A HREF="#lbAG">CONFIGURATION</A><DD>
-<DT><A HREF="#lbAH">SAMPLE CONFIGURATION</A><DD>
-<DT><A HREF="#lbAI">FILES</A><DD>
-<DT><A HREF="#lbAJ">SIGNALS</A><DD>
-<DT><A HREF="#lbAK">NOTES</A><DD>
-<DT><A HREF="#lbAL">SEE ALSO</A><DD>
-<DT><A HREF="#lbAM">DEVELOPMENT TEAM</A><DD>
-<DT><A HREF="#lbAN">COPYRIGHT AND LICENSE</A><DD>
-<DL>
-<DT><A HREF="#lbAO">COPYRIGHT</A><DD>
-<DT><A HREF="#lbAP">LICENSE</A><DD>
-</DL>
-</DL>
-<HR>
-This document was created by
-man2html,
-using the manual pages.<BR>
-Time: 01:57:58 GMT, November 14, 2006
-</BODY>
-</HTML>
> <DIV
CLASS="TABLE"
><A
-NAME="AEN2145"
+NAME="AEN2149"
></A
><P
><B
><H2
CLASS="SECT2"
><A
-NAME="AEN2244"
+NAME="AEN2248"
>8.1. Finding the Right Mix</A
></H2
><P
><H2
CLASS="SECT2"
><A
-NAME="AEN2251"
+NAME="AEN2255"
>8.2. How to Edit</A
></H2
><P
>.
Note: the config file option <A
HREF="config.html#ENABLE-EDIT-ACTIONS"
->enale-edit-actions</A
+>enable-edit-actions</A
> must be enabled for
this to work. The editor allows both fine-grained control over every single
feature on a per-URL basis, and easy choosing from wholesale sets of defaults
><H3
CLASS="SECT3"
><A
-NAME="AEN2342"
+NAME="AEN2346"
>8.4.1. The Domain Pattern</A
></H3
><P
><H3
CLASS="SECT3"
><A
-NAME="AEN2413"
+NAME="AEN2417"
>8.4.2. The Path Pattern</A
></H3
><P
can tell them apart from URL patterns. Everything after the colon
including white space, is interpreted as a regular expression with
path pattern syntax, except that tag patterns aren't left-anchored
- automatically (Privoxy doesn't silently add a <SPAN
+ automatically (<SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> doesn't silently add a <SPAN
CLASS="QUOTE"
>"^"</SPAN
>,
tags can be used to activate other tagger actions, as long as these other
taggers look for headers that haven't already be parsed.</P
><P
-> For example you could tag client requests which use the POST method,
- use this tag to activate another tagger that adds a tag if cookies
- are send, and then block based on the cookie tag. However if you'd
- reverse the position of the described taggers, and activated the method
- tagger based on the cookie tagger, no method tags would be created.
+> For example you could tag client requests which use the
+ <TT
+CLASS="LITERAL"
+>POST</TT
+> method,
+ then use this tag to activate another tagger that adds a tag if cookies
+ are sent, and then use a block action based on the cookie tag. This allows
+ the outcome of one action, to be input into a subsequent action. However if
+ you'd reverse the position of the described taggers, and activated the
+ method tagger based on the cookie tagger, no method tags would be created.
The method tagger would look for the request line, but at the time
- the cookie tag is created the request line has already been parsed.</P
+ the cookie tag is created, the request line has already been parsed.</P
><P
> While this is a limitation you should be aware of, this kind of
indirection is seldom needed anyway and even the example doesn't
>Typical use:</DT
><DD
><P
-> Disable or disable filters based on the Content-Type header.
+> Enable or disable filters based on the Content-Type header.
</P
></DD
><DT
><TD
><PRE
CLASS="SCREEN"
-># Tag every request with the declared content type
+># Tag every request with the content type declared by the server
{+server-header-tagger{content-type}}
/
</PRE
><H3
CLASS="SECT3"
><A
-NAME="AEN4217"
+NAME="AEN4223"
>8.5.39. Summary</A
></H3
><P
><H3
CLASS="SECT3"
><A
-NAME="AEN4282"
+NAME="AEN4288"
>8.7.1. default.action</A
></H3
><P
><H3
CLASS="SECT3"
><A
-NAME="AEN4469"
+NAME="AEN4475"
>8.7.2. user.action</A
></H3
><P
><H2
CLASS="SECT2"
><A
-NAME="AEN5351"
+NAME="AEN5359"
>14.2. Privoxy's Internal Pages</A
></H2
><P
Privoxy main page:
</P
><A
-NAME="AEN5365"
+NAME="AEN5373"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
editing of actions files:
</P
><A
-NAME="AEN5373"
+NAME="AEN5381"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
Show the source code version numbers:
</P
><A
-NAME="AEN5378"
+NAME="AEN5386"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
Show the browser's request headers:
</P
><A
-NAME="AEN5383"
+NAME="AEN5391"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
Show which actions apply to a URL and why:
</P
><A
-NAME="AEN5388"
+NAME="AEN5396"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
><LI
><P
>
- Toggle Privoxy on or off. In this case, <SPAN
+ Toggle Privoxy on or off. This feature can be turned off/on in the main
+ <TT
+CLASS="FILENAME"
+>config</TT
+> file. When toggled <SPAN
+CLASS="QUOTE"
+>"off"</SPAN
+>, <SPAN
CLASS="QUOTE"
>"Privoxy"</SPAN
-> continues
- to run, but only as a pass-through proxy, with no actions taking place:
+>
+ continues to run, but only as a pass-through proxy, with no actions taking
+ place:
</P
><A
-NAME="AEN5394"
+NAME="AEN5404"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
> Short cuts. Turn off, then on:
</P
><A
-NAME="AEN5398"
+NAME="AEN5408"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
</P
></BLOCKQUOTE
><A
-NAME="AEN5401"
+NAME="AEN5411"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
>the Bookmarklets</A
> section on a quick
and easy way to do this (be sure to flush caches afterward!). Looking at the
- logs is a good idea too.</P
+ logs is a good idea too. (Note that both the toggle feature and logging are
+ enabled via <TT
+CLASS="FILENAME"
+>config</TT
+> file settings, and may need to be
+ turned <SPAN
+CLASS="QUOTE"
+>"on"</SPAN
+>.)</P
><P
> Another easy troubleshooting step to try is if you have done any
customization of your installation, revert back to the installed
> CGI forms can lead to
rather long URLs. This isn't a problem as far as the HTTP
standard is concerned, but it can confuse clients with arbitrary
- URL lenght limitations.
+ URL length limitations.
</P
><P
> Enabling split-large-forms causes <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
>
- to devide big forms into smaller ones to keep the URL length down.
+ to divide big forms into smaller ones to keep the URL length down.
It makes editing a lot less convenient and you can no longer
submit all changes at once, but at least it works around this
browser bug.
><H2
CLASS="SECT2"
><A
-NAME="AEN790"
+NAME="AEN794"
>6.1. Controlling Privoxy with Your Web Browser</A
></H2
><P
> <H2
CLASS="BRIDGEHEAD"
><A
-NAME="AEN798"
+NAME="AEN802"
></A
> Privoxy Menu</H2
><P
><H2
CLASS="SECT2"
><A
-NAME="AEN5096"
+NAME="AEN5102"
>12.1. License</A
></H2
><P
>Current Privoxy Team:</P
><P
CLASS="LITERALLAYOUT"
-> Fabian Keil, developer<br>
+> Fabian Keil, lead developer<br>
David Schmidt, developer<br>
<br>
Hal Burgiss<br>
- Ian Cummings<br>
- Justin McMurtry<br>
- Roland Rosenfeld</P
+ Roland Rosenfeld<br>
+ Jörg Strohmayer</P
><P
> Former Privoxy Team Members:</P
><P
> Johny Agotnes <br>
Rodrigo Barbosa<br>
Moritz Barsnick<br>
+ Ian Cummings<br>
Brian Dessent<br>
Jon Foster<br>
Karsten Hopp<br>
Adam Lock<br>
Guy Laroche<br>
Mark Martinec <br>
+ Justin McMurtry<br>
Andreas Oesterhelt<br>
Haroon Rafique<br>
Georg Sauthoff<br>
Thomas Steudten<br>
- Joerg Strohmayer<br>
Rodney Stromlund<br>
Sviatoslav Sviridov<br>
Sarantis Paskalis<br>
CLASS="LITERALLAYOUT"
> Ken Arromdee<br>
Devin Bayer<br>
- Reiner Buehl<br>
Gergely Bor<br>
+ Reiner Buehl<br>
Andrew J. Caines<br>
Clifford Caoile<br>
Frédéric Crozat<br>
Michael T. Davis<br>
Mattes Dolak <br>
- Peter E<br>
+ Peter E.<br>
Florian Effenberger<br>
Markus Elfring<br>
Dean Gaudet<br>
Aaron Hamid<br>
Darel Henman<br>
Magnus Holmgren<br>
+ Ralf Horstmann<br>
+ Stefan Huehner <br>
Peter Hyman<br>
Derek Jennings<br>
Petr Kadlec<br>
David Laight<br>
+ Bert van Leeuwen<br>
Don Libes <br>
Paul Lieverse<br>
Toby Lyward<br>
Jindrich Makovicka <br>
David Mediavilla <br>
Raphael Moll<br>
+ Amuro Namie<br>
Adam Piggott<br>
+ Dan Price<br>
+ Lee R.<br>
Roberto Ragusa<br>
Félix Rauch<br>
Maynard Riley<br>
Chung-chieh Shan<br>
- Spinor S<br>
+ Spinor S.<br>
Bart Schelstraete<br>
Oliver Stoeneberg<br>
Peter Thoenen<br>
Martin Thomas<br>
- Bobby G. Vinyard<br>
+ Song Weijia<br>
Jörg Weinmann <br>
Darren Wiebe<br>
+ Bobby G. Vinyard<br>
Anduin Withers<br>
Oliver Yeoh<br>
Jamie Zawinski</P
><P
-> Privoxy is based in part on code originally developed by:</P
+> Privoxy is based in part on code originally developed by
+ Junkbusters Corp. and Anonymous Coders.</P
><P
-CLASS="LITERALLAYOUT"
-> Junkbusters Corp.<br>
- Anonymous Coders<br>
- Ulrich Drepper (strptime fallback)<br>
- Philip Hazel (PCRE)</P
+> Privoxy heavily relies on Philip Hazel's PCRE.</P
+><P
+> The code to filter compressed content makes use of zlib
+ which is written by Jean-loup Gailly and Mark Adler.</P
+><P
+> On systems that lack snprintf(), Privoxy is using a version
+ written by Mark Martinec. On systems that lack strptime(),
+ Privoxy is using the one from the GNU C Library written
+ by Ulrich Drepper.</P
></DIV
></DIV
><DIV
>server-header-tagger</A
></TT
>.
- Taggers and filters use the same syntax in the filter files, the differnce
+ Taggers and filters use the same syntax in the filter files, the difference
is that taggers don't modify the text they are filtering, but use a rewritten
version of the filtered text as tag. The tags can then be used to change the
applying actions through sections with <A
><H2
CLASS="SECT2"
><A
-NAME="AEN4623"
+NAME="AEN4629"
>9.1. Filter File Tutorial</A
></H2
><P
><BR></P
><P
CLASS="PUBDATE"
->$Id: user-manual.sgml,v 2.41 2007/11/11 16:32:11 hal9 Exp $<BR></P
+>$Id: user-manual.sgml,v 2.44 2007/11/15 03:30:20 hal9 Exp $<BR></P
><DIV
><DIV
CLASS="ABSTRACT"
><DL
><DT
>6.1. <A
-HREF="configuration.html#AEN790"
+HREF="configuration.html#AEN794"
>Controlling Privoxy with Your Web Browser</A
></DT
><DT
><DL
><DT
>8.1. <A
-HREF="actions-file.html#AEN2244"
+HREF="actions-file.html#AEN2248"
>Finding the Right Mix</A
></DT
><DT
>8.2. <A
-HREF="actions-file.html#AEN2251"
+HREF="actions-file.html#AEN2255"
>How to Edit</A
></DT
><DT
><DL
><DT
>8.4.1. <A
-HREF="actions-file.html#AEN2342"
+HREF="actions-file.html#AEN2346"
>The Domain Pattern</A
></DT
><DT
>8.4.2. <A
-HREF="actions-file.html#AEN2413"
+HREF="actions-file.html#AEN2417"
>The Path Pattern</A
></DT
><DT
></DT
><DT
>8.5.39. <A
-HREF="actions-file.html#AEN4217"
+HREF="actions-file.html#AEN4223"
>Summary</A
></DT
></DL
><DL
><DT
>8.7.1. <A
-HREF="actions-file.html#AEN4282"
+HREF="actions-file.html#AEN4288"
>default.action</A
></DT
><DT
>8.7.2. <A
-HREF="actions-file.html#AEN4469"
+HREF="actions-file.html#AEN4475"
>user.action</A
></DT
></DL
><DL
><DT
>9.1. <A
-HREF="filter-file.html#AEN4623"
+HREF="filter-file.html#AEN4629"
>Filter File Tutorial</A
></DT
><DT
><DL
><DT
>12.1. <A
-HREF="copyright.html#AEN5096"
+HREF="copyright.html#AEN5102"
>License</A
></DT
><DT
></DT
><DT
>14.2. <A
-HREF="appendix.html#AEN5351"
+HREF="appendix.html#AEN5359"
>Privoxy's Internal Pages</A
></DT
><DD
></TABLE
></P
><P
->Then build as above.</P
+>Then build as above. In Privoxy 3.0.7 and later, all of these options
+can also be disabled through the configuration file.</P
><P
> <SPAN
CLASS="emphasis"
>1. Introduction</A
></H1
><P
-> This documentation is included with the current UNRELEASED version of
+> This documentation is included with the current beta version of
<SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
completion, and includes significant changes and enhancements over
earlier versions. .</P
><P
-> Since this is a UNRELEASED version, not all new features are well tested. This
+> Since this is a beta version, not all new features are well tested. This
documentation may be slightly out of sync as a result (especially with
CVS sources). And there <SPAN
CLASS="emphasis"
> <DIV
CLASS="FIGURE"
><A
-NAME="AEN543"
+NAME="AEN547"
></A
><P
><B
> <DIV
CLASS="FIGURE"
><A
-NAME="AEN598"
+NAME="AEN602"
></A
><P
><B
> <DIV
CLASS="FIGURE"
><A
-NAME="AEN642"
+NAME="AEN646"
></A
><P
><B
HREF="actions-file.html#CLIENT-HEADER-TAGGER"
>client-header-tagger</A
>
- that can be used to apply arbitrary <SPAN
+ that can be used to create arbitrary <SPAN
CLASS="QUOTE"
>"tags"</SPAN
-> to
- each request's headers. These <SPAN
+>
+ based on client and server headers.
+ These <SPAN
CLASS="QUOTE"
>"tags"</SPAN
-> can then
- subsequently be used by other actions, greatly increasing
- <SPAN
+> can then subsequently be used
+ to control the other actions used for the current request,
+ greatly increasing <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
->'s flexibity and selectivity. See <A
+>'s flexibility and selectivity. See <A
HREF="actions-file.html#TAG-PATTERN"
>tag patterns</A
-> for more on tags.
-
+> for more information on tags.
</P
></LI
><LI
><P
-> Header filtering can be done with dedicated header filters now. As a result
+> Header filtering is done with dedicated header filters now. As a result
the actions <SPAN
CLASS="QUOTE"
>"filter-client-headers"</SPAN
CLASS="APPLICATION"
>Privoxy 3.0.5</SPAN
> to apply
- the content filters to the headers as, well have been removed again.
+ content filters to the headers have been removed.
See the new actions <A
HREF="actions-file.html#SERVER-HEADER-FILTER"
>server-header-filter</A
and <A
HREF="actions-file.html#CLIENT-HEADER-FILTER"
>client-header-filter</A
->.
+> for details.
</P
></LI
><LI
HREF="config.html#ACCEPT-INTERCEPTED-REQUESTS"
>accept-intercepted-requests</A
>
- which will combine Privoxy with any packet filter to create an intercepting
- proxy for HTTP/1.1 requests (and for HTTP/1.0 requests with Host
- header set) so that explicitly setting the browser's proxy settings
- is not necessary.
+ which allows to combine Privoxy with any packet filter to create an
+ intercepting proxy for HTTP/1.1 requests (and for HTTP/1.0 requests
+ with Host header set). This means clients can be forced to use
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> even if their proxy settings are configured differently.
</P
></LI
><LI
HREF="config.html#TEMPLDIR"
>templdir</A
>
- to designate an alternate location for Privoxy's own CGI templates
- to make sure any locally customized templates aren't overwritten
- during upgrades.
+ to designate an alternate location for <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>'s
+ locally customized CGI templates so that
+ these are not overwritten during upgrades.
</P
></LI
></UL
CLASS="LITERAL"
>--pre-chroot-nslookup hostname</TT
> to
- intialize the resolver library before chroot'ing. On some systems this
+ initialize the resolver library before chroot'ing. On some systems this
reduces the number of files that must be copied into the chroot tree.
(Patch provided by Stephen Gildea)
</P
></LI
><LI
><P
-> The <A
+> The <A
HREF="actions-file.html#FORWARD-OVERRIDE"
>forward-override</A
> action
- allows changing of the forwarding settings based on client headers like the
- User-Agent, or the request origin.
+ allows changing of the forwarding settings through the actions files.
+ Combined with tags, this allows to choose the forwarder based on
+ client headers like the <TT
+CLASS="LITERAL"
+>User-Agent</TT
+>, or the request origin.
</P
></LI
><LI
CLASS="APPLICATION"
>zlib</SPAN
> support is now available as a compile
- time option for compressed documents.
+ time option to filter compressed content. Patch provided by Wil Mahan.
</P
></LI
><LI
with <SPAN
CLASS="APPLICATION"
>Privoxy</SPAN
->.
+>. Patch provided by Petr Kadlec.
</P
></LI
><LI
><P
-> Logging can be turned on or off.
+> Logging can be completely turned off by not specifying a logfile directive.
</P
></LI
><LI
><LI
><P
> Many bugfixes, memory leaks addressed, code improvements, and logging
- improvments.
+ improvements.
</P
></LI
></UL
></P
+><P
+> For a more detailed list of changes please have a look at the ChangeLog.</P
><DIV
CLASS="SECT2"
><H2
<SPAN
CLASS="APPLICATION"
>Privoxy 3.0.5</SPAN
-> to apply the content filters to
- the headers as, well have been removed and replaced with new actions.
+> to apply content filters to
+ the headers have been removed and replaced with new actions.
See the <A
HREF="whatsnew.html"
>What's New section</A