2.0.41 (20050803) Major code cleanup and added some missing javadoc.
    Removed a lot of static, ought to be able to run several proxies
    in the same jvm/classloader (some more testing needed). It also
    makes it much easier to reuse parts of rabbit in other projects.

2.0.40 (20050721) Fixed a bug in IPAccess (low, high) swap was
    bad. Fixed another bug in the cache. Closes channels that were not
    closed correctly. Status pages are now also accessable by ip
    address. Fixed a file descriptor leak due to SetSoTimeout (jvm
    bug). Moved a few things to nio and also some more code cleanups.

2.0.39 (20050616) Fixed a bug in the cache. Added channels and
    transferTo calls, ought to increase performance and decrease
    memory usage. Added a StackTrace status page. More generics.
    Connections are now selected on instead of read() with timeout,
    ought to decrease the number of threads needed. All tunnels (ssl
    and ntlm) are now handled by one thread with a selector (instead
    of two per tunnel). Minor adjustments to admin pages like sorting
    general status report. 

2.0.38 (20050522) Moved to java/5 with generics and other things. 
    Cleaned up some warnings from -Xlint:all. Added a SQLProxyAuth
    that works as ProxyAuth, but uses a sql database for users instead
    of a file. Made accessfilters be an interface and instances
    instead of static method calls. Created HTTPFilter and made all
    the http filters implement it, removed some reflection for calling
    the http filters. Removed the reflection for setting up the
    handlers, took initial steps to remove lots of static data. Fixed
    a bug with the html parser and long script sections. FileSender
    now also sends a Last-Modified header (for the web browser
    cache). Created a HTMLFilterFactory and removed the reflection
    from the html filtering parts of rabbit. Added some missing
    javadoc. 

2.0.37 (20050301) Fixed a problem where some resources where not
    cached. Added a summary-mode and a regexp matcher to the
    CacheStatus program. Removed some synchronization from the
    cache. Log rotation must close files before moving them to work
    under windows, rework synchronization of logging to handle
    that. Changed some containers to unsynchronized versions. Made it
    compilable with a java/5 compiler. Fixed a problem with host name
    lookups and the adress cache to reuse more connections. 

2.0.36 (20050111) Added Locale.US to the SimpleDateFormat since date
    parsing fails for people using some other default locale
    otherwise. Added a ReverseProxy filter so that it is possible to
    use RabbIT as a reverse proxy. Made it possible to configure which 
    dns handler to use, since dnsjava may fail on some setups. Fixed a
    workaround for handling broken web servers that send multiple
    last-chunks.

2.0.35 (20041005) Made the 504 response hold links to alternative
    sites. Fixed a few things that Findbugs complained about. Better
    handling of the cache when it is set to zero. Better handling of
    resources that are too big for the cache. Fixed a problem with
    SSL, proxy chains and proxy authentication combined.

2.0.34 (20040803) Fixed a problem with image conversion under
    windows. Updated the default convert arguments so it strips
    exif headers and similar things. Added more mime types handlers. 
    Fixed a file name typo for SSLHandler.java. Fixed a bug in the
    html parser. Made the cache status expiry date human readable 
    again. Some code cleanup and initial work on better response
    header handling. 

2.0.33 (20040701) Some more memory optimization. Some code
    cleanup. NTLM autorized connections are now tunneled since they
    need to be kept alive and reuse same server connection. Fixed a
    memory leak in the cache. Keys and hooks are no longer kept around
    with soft references (the hit ratio was really low). 

2.0.32 (20040622) More memory optimization. Data hooks in the cache
    are now saved to disk since they often contain large strings
    (cookies). Data keys in the cache are now stored on file as well. 
    Fixed a problem with HTTP/0.9 responses (rabbit tried to read the
    header and that failed). The cache status page now only shows a
    partial listing of the cached files, to be able to handle big
    caches. Fixed proxy chaining for ssl connections. Minor adjustment
    in how rejected connections were handled. Dnsjava has a cache and
    the cache time can now be set. Dnsjava updated to 1.6.4. Removed
    some copy paste. Fixed some problems with the administration
    pages. 

2.0.31 (20040516) More memory optimization. Handle some broken headers
    better when in no-strict mode. Tried to make the cache
    faster. Made some more classes Externalizable for faster cache
    handling. Removed the file name from cache entries, the NCache
    generates file names on request instead. Fixed some leaks of the
    cache streams. Fixed a file leak in FileSender. Added a log file
    rotator meta page. Shrinks the connection handler pool when
    connections are no longer in use. Clean up some unused variables
    in the Connection class when it is idle. RabbIT now uses dnsjava
    to have fully threaded DNS lookups.

2.0.30 (20040407) Added a class that makes it possible to run several
    rabbit proxies with different configurations in the same jvm (by
    using a custom class loader). More string cache handling. Fixed a
    problem where rabbit cached 304 (and other) responses as zero
    sized files which then caused broken images and such. Fixed a
    null pointer exception when handling range requests.

2.0.29 (20040117) Keep a string cache for http headers, saves quite a
    lot of Strings and shrinks the cache.index. Started using the
    collection classes instead of Vector and Hashtable.

2.0.28 (20031126) Added two example config files, onlycaching.conf and
    onlycompressing.conf. Fixed a NullPointerException when checking
    for stale cache entries.

2.0.27 (20030707) RabbIT now requires jre/1.4 due to some networking
    fixes. A bug in the Cookie-id control that changed caching rules
    for requests with authorization was fixed. Default package is now
    a jar file. Added the config option StrictHTTP which can be used
    to make rabbit less strict when it is false, this makes RabbIT
    work better with a few broken servers.

2.0.26 (20030603) Requests without a host (and port) are now assumed
    to be for RabbIT to handle, this should end the "I try to access
    the web configuration but all I got was a 400-reply". Changed the
    default argument to convert (-flatten instead of [0]) since
    png to jpeg conversion would return very small blank images
    instead of small but ok-looking images this way. RabbIT does no
    longer normally use cookie based ids to enable/disable cache
    rabbit relies on normal Cache-Control headers to be sent. If
    the option is needed it can now be controlled in the config file.
    The html parser was updated to handle (javascript) better.

2.0.25 (20030512) Fixed a problem where deflate data were compressed
    and the Content-Encoding header were overwritten with only
    gzip. Fixed a bug where private headers were deleted before they
    were sent to the client, causing some Set-Cookie:s to be removed
    and non-working sites. Fixed a problem where only the response
    line of the response header was read, it happened when the reason
    phrase was missing. Run findbugs on RabbIT source and fixed some
    of the problems it reported (did not agree on all of its warning).
    ImageHandler now handle the case that cache setup fails, due to
    better http/1.1 handling.

2.0.24 (20030424) Fixed a problem where 304 responses from the cache
    sometimes caused multiple responses. Fixed a few odd cases where a
    200 OK response from the cache could be used in response to
    if-range requests (they were revalidated with the server, which is
    ok, but not optimal). Added the option to turn off filtering based
    on user agent (to the DontFilterFilter) since at least java
    handles compressed pages badly.

2.0.23 (20030304) Fixed a problem where content in request got
    corrupted. Worked more on caching of partial content. Fixed a
    few problem with date parsing. Fixed so that the "Host" header 
    has correct port if any port was specified. A few other minor
    HTTP/1.1 compliance fixes.

2.0.22 (20030111) More work on http/1.1 compliance. Fixed so that it
    is possible to compile and run with jdk/1.1 again.

2.0.21 (20021125) More work on http/1.1. Update more headers when
    combining after a revalidate, Handle(drop) Content-Length and 
    chunked Transfer-Encoding. Return a stale entry or a 504 when
    communication with the server fails. Added handling of range
    requests, including multipart/byteranges in requests. License
    change (from old BSD to modern BSD). Updated config file with 
    more documentation.

2.0.20 (20020915) More work on http/1.1. Handle http headers better
    (in the really strange cases). Handle Warning headers
    better. Handle the Co-Advisors test suite (all 464 cases, more
    test cases coming soon). Better handling of 1xx responses when
    client is using HTTP/1.0. Updated the readLine method to be
    strict. 

2.0.19 (20020821) Added checks for min-fresh in requests. Some more
    handling of Connection headers and quoted tokens. Added handling
    for Max-Forwards for TRACE and OPTIONS requests.Some more minor
    fixes for http compliance and no-cache directives. Some more
    handling of cache control like max-stale and proxy-revalidate.

2.0.18 (20020729) Mostly HTTP/1.1 fixes. Updated handling of the cache
    system, it should now handle max-age, s-maxage, no-store controls
    correctly. Via headers are handled as they should. Stale caches are
    now revalidated instead of thrown away in a few more
    cases. Currently 242 out of 245 tests are ok, the remaining 3
    tests have bugs (the test, not RabbIT is broken).

2.0.17 (20020729) Added a filter (optional) that always perform proxy
    authentication on all users. Major HTTP/1.1 compliance work, this
    work is due to the nice people over at Co-Advisor/The measurment
    factory, http://coad.measurement-factory.com/. HTTP/1.1 changes
    include (better) handling of Vary, Cache-Control, Cache
    revalidation, Chunked input (from client forms), If-Match and
    If-None-Match handling. Currently 200 out of 203 tests are ok.

2.0.16 (20020106) Tried to fix the problems of html on the form
    '...framespacing="0"">' which used to break RabbIT's parser. For
    now we replace the second '"' with a ' ' and restart from that
    point. This seems to achieve what mozilla does. Added a maximum
    tries before giving up trying to connect to a site (in certain
    special cases RabbIT could loop forever trying to connect to an
    unreacable host).

2.0.15 (20011211) Fixed some problems with HTTP/0.9. Fixed some
    problems with chunking. Made sure that "Content-Length" headers
    are removed if we chunk. Hopefully Fixed all problems with the
    HTTP/1.1 and chunking data to the clients.

2.0.14 (20011121) More performance handling. Made GeneralHeader faster
    by removing the hashtable and toLowerCase calls. Less writes of
    zero length buffers. Chunk data to client if the request is using
    HTTP/1.1 (this has a funny effect on the GZIP header for pages
    that get compressed, but GZipOutputStream has to many private
    methods to override that behaviour.).

2.0.13 (20010930) (Not released) Made sure all threads RabbIT start
    have a name. Performance tweaks. Made sure that tag has a lower
    case tag that is used by the standard filters, quite a
    timesaver. Tried to speed up the cache systems handling of
    addEntry. Added a TagType to have static objects for the most
    common (filterwise) tag types.
    
2.0.12 (20010916) Fixed the problem with proxy chains and DNS
    lookups. RabbIT should not do DNS if it is connected to a proxy,
    but the HTTPBaseFilter did it. Performance tweaks in the
    HTMLParser, HTMLBlock, Token and FilterHandler this seems to give
    an 11% speedup for html parsing. Performance testing. Fixed
    ImageHandler so that it removes converted files that got bigger by
    the conversion.

2.0.11 (20010904) Broke up some long methods to several smaller for
    better readability. Updated and added documentation. Pooled the
    metahandlers since it was possible with a minor patch. Ran RabbIT
    through jmp (my own java memory profiler) to find and close some
    leaks. Try to help the garbage collector by nulling certain
    objects. Updated CacheStatus to show number of entries in the
    cache. Fixed the problems with proxy authorization for upstream
    proxy if RabbIT is part of a proxy chain. Updated the link
    verifier so that it ignores anchors. Only call setup once for mime
    type handlers.

2.0.10 (20010812) Added a LowresImageFilter that removes the lowsrc
    attributes from the <img> tags. Updated documentation. Updated the
    DontCacheFilter so that it can also operate on the mime type of
    the response. Also added the option to only cache on mime/URL. 
    Updated the HTTPDateParser to handle bad/old date types better,
    added logging of unparseable date strings. 

2.0.9 (20010608) Minor bug fixes to the HTMLParser. Updated
    documentation and javadoc. Accept HTTP headers with duplicate
    response lines even though this is a bug in the web server.
    Added a DontCacheFilter that can be used to not cache certain
    pages which can be useful for bad mannered chat systems etc.

2.0.8 (20010414) Minor bug fixes. Added a small program to inspect
    the cache from the command line. Minor performance especially in
    HTMLParser.

2.0.7 (20010212) Minor performance tweaks. Minor bug fixes. Better
    compliance to RFC 2616. Better error handling.

2.0.6 (20001227) Added some public interfaces to ConnectionHandler to
    make it possible to have a status page for outgoing keepalive
    connections. Added Erik Agsjö's patch to handle basic auth in
    URLs. Wrote a thred pool to handle connections more efficiently. 

2.0.5 (20000610) Fixed simple(no proxy chaining but otherwise working)
    SSL-proxy handling. SSL proxying is configurable to allow connects
    to all ports, no ports or a specified set of ports (like
    443). Added Support for cache handlers, they work like the
    ordinary handlers but are run only on resources that are fetched
    from the cache. This means that it is simple to write your own
    imagehandler that takes an unmodified image from the cache and
    sends it filtered by the request made. Kinda nice to have but to
    do this always uses more resources.

2.0.4 (20000220) Fixed the LinkVerifier tool in such a way that it is
    actually usable for simple html-page linkverification, but still
    does not handle mail and ftp. Bugfixes in http package, this fixes
    a few sites that have been broken. Fixes in the installer. Fixed a
    major bug in HTTPInputStream with keepalive and known + unknown
    size.

2.0.3 (20000209) Fixed a little with the support script and the
    Makefile for RabbIT. Added some code to allow for public access in
    the /FileSender/public/ directory which means that the logo and
    adreplacer can be distributed with the proxy. Still needs a better
    (more general) accessfilter though. Made the installer
    better. Minor bugfixes and cleanup in the rabbit.http
    package. Updated documentation.

2.0.2 (20000129) Fixed a few bugs concerning keep alive and the HTTP
    response header, fixed a bug with NT and cache directories. Build
    GZIPHandler as an intermediate(*) to FilterHandler, this means
    that it is possible to gzip text/plain etc, without filtering
    those streams. Added uuencoding to the Coder so it is possible to
    do proxy authentication to the proxy behind RabbIT. Made RabbIT
    use HTTP/1.1 which keep alive when talking to web servers. This
    lead to a major rewrite of the input layer, but to the
    better. Fixed HTMLParser so that it compiles cleanly with Jikes
    (damn fast compiler, although it is not always nice :-). Fixed a
    bug concerning requests without an response body (like HEAD
    requests). Fixed a bug in GZIPHandler so that it does not gzip
    already compressed (gzip or compress) streams. Created
    GeneralHeader to allow for HTTPFooter which is useful when sending
    chunked data. Fixed a bug in HTTPHeader regarding response phrases
    that are multiline. Fixed a few bugs in ImageHandler and NCache.

    * FilterHandler will only gzip if GZIPHandler is gzipping, due to
    static setup functions.    

2.0.1 (991201) Added a DontFilterFilter that makes sure we dont filter
  pages that will break the HTMLparser (bad HTML is evil!). More 
  documentation. Added a few fixes for old HTTP/0.9 request
  mode. Added a BlinkFilter that removes blink and /blink tags. Added
  gzipping of text/html data, this saves quite a bit of data sent.

2.0 (991009) Cleaned up a few things, corrected some
  documentation. The response header is no longer stored in the cache
  file it is in the hashtable so we can access without reading
  files. Fixed some troubles with ImageSender so from now on we dont
  rewrite the converted image.

2.0b (991005) This is a total rewrite of most things. RabbIT is now a
  totally filtering proxy with http header filters and contenthandlers
  all to make it easier to extend. This version should be HTTP/1.1
  compatible (mostly :-). Speed should be the same, codesize is
  about the same. Config file format has changed to allow greater
  flexibility. Filtering of content is now done depending on the mime
  type of the document being loaded. Accessfilters are tightend to
  make RabbIT even less vounorable to attacks. RabbIT is mostly
  developed under jdk1.2 but should still work with jdk1.1 (although
  you may have to compile it several times for it to work out all
  dependencies). All packages have been renamed to
  rabbit.xxx. Basically they should be named something like
  org.rabbitproxy.xxx (rabbit.org is already taken :-/) but I havent
  bothered to registering a domain yet. 


1.8 (990403) New filtermodel, this affects current configurations but
makes RabbIT more accurate with advertising. Made RabbIT handle 
request to http://<proxyhost>:<proxyport>/ as metapages. This makes
the jconfig always work (If it couldnt resolv the host proxy it used
to fail). A lot of codecleanup due to new filtermodels.

1.7 (990224) Fixed a few bugs where RabbIT thrashed blank.gif and
other small size images. Made the ImageSender send the original image
if the converted one is bigger (will still log the converted size so
you can find out how often this happen). Added a filter that makes ads
in layer be excahnged with the file AdFilter uses.

1.6 (990121) The step to NCache is now totally complete. Small changes
to the cache that should make it even better. Better system for
errordetection and errorhandling. RabbIT now tells you that it has
problems and what the problem is in a nice manner. Bugfixes.

1.5 (981214) The cache is rewritten to the new much improved
NCache. This should improve cacheing and make the proxy more
stable. Updated errorpages to use HTMLPage layout so we get a
consistent interface to the proxy. Added JConfig a new configuration
applet. Saves config back to disk. Configuration of users and
accesslist is possible. Bugfixes of course. Don't cache pages with
cookie passwords (like hotmail uses).

1.4 (981116) Accesslog is now in (almost) Common Log Format so most
webanalysers should work. Logging has spread out to keep it with as
much info as possible.  Runtime configuration is working (although you
cant save it back to disk. Updated xyzStatus pages to handle full
html-output, this means that Proxy and Cache dont have to deal with
html-output, which is nice cause they have nothing to do with
it. CodeCleanup in general and some more thought of general rules for
the proxy. Added HTMLPage to make metapages look alike and be
configurable. 

1.3 (981021) Accesscontrol should now work, but is untested. Fixed a
bug in HTTPHeader that caused troubles with non-forgiving
webservers. Many pages that didnt work are now working.
BackgroundFilter now also handles stylesheet-specified backgrounds.

1.2 (980817) Filters are now fully configurable from the file
filter.conf. Rewrote Config-handling. Rewrote filter setup-routines to
handle the new filter.conf. Config-files moved to conf/ as standard.

1.1 Fixed Meta-page handling. Metapages are now behind
authentication. Added a userfile to keep the authenticated
users. Rewrote the basic idea of how a response is generated. Wrote
the metapagehandlers to supply the basic things found in 1.0.

1.0 First stable version released.
