- fixed a bug that caused an incorrect status code to be returned for internal templates.
- added 'prefetch' URL command to prefetch the URL without displaying it in the browser.
- added 'template' URL command which sends the template given in the square brackets.
- fixed list ordering error when moving an entry to the top or bottom.
- fixed buffer overflow in response header parsing.
- fixed undefined variable in main.c when doing debug build.
- added -H command line option to set proxy's own hostname (overrides configuration file setting).
- removed FTP upload ability, it was horribly broken anyways.
- fixed bug in STRING_SELECT_MANY fields where int_value wasn't reset to 0 before setting the bits, causing
  unset values to never lose their bit.
- the proxy server can now syncronize it's configuration with another proxy server, making managing a cluster of proxy servers
  easier.
- fixed bug in external parsers when using File method that caused the file to grow extermely large and halt the proxy
  server's execution.
- added virus scanning capabilities using the ClamAV daemon.
- fixed a bug when submitting entry values in the Web interface that caused improper values to be shown for global
  options (they weren't changed internally though).
- new variables that are substituted when parsing templates and added to the environment variables when executing an external
  parser can now be set at any point throughout the proxy; among the newly added variables are:
  - VIRUSNAME : name of virus for templates displayed when a virus is found
  Also, due to this change, variables in templates are now in the form $VARIABLENAME$
- made DNS blacklist feature work again.


2.0.1:
- fixed bug where header->url wasn't set properly for transparent http requests.
- fixed bug where transparent http responses weren't being cached.
- the proxy now daemonizes properly.
- permissions of cache files, logfile, and pidfile now set properly.
- pidfile is now unlinked when server receives SIGTERM.
- fixed crash in prefetch thread due to improper checking of the protocol_start return value.
- added command line option to run proxy in foreground and write log to stdout.
- the filter feature can now be used to block IP ranges.
- fixed compiler error on systems that have int typedef'ed as time_t.
- upgraded included tinyxml library.

2.0:
- updated libntlm.
- mime and file fields were being swapped in mime entries, fixed.
- improved array_delete algorithm.
- added options to send Via and X-Forwarded-For headers with requests.
- pthread_rwlock_unlock shouldn't have been called from inside external_find, fixed.
- PCRE_EXTENDED flag is now used when compiling regular expressions.
- when the access policy is allow, full access is now given unless a deny rule matches. Previously, the connection was allowed but
  access to any feature was denied.
- fixed bug in way access permissions were handled; previously, users would always get the access permissions provided in the first
  rule that matched the IP address regardless of username/password.
- a read lock was used in limits_update/limits_reset when it should have been a write lock, fixed.
- Add C++ compilation to Makefile.in and configure.ac
- Include TinyXML library which parses the xml file.
- Make separated compilation units for libraries and sources and improve compilation dependencies between objects, sources 
  (*.c and *.cpp) and headers (*.h)
- Apply object oriented improvements to the configuration sections. These sections inhertit from Section, a general purpose class 
  which can automatically display the section in the web interface and load it from the xml file. Now it is much more easier to
  add new sections and change the structure of the section
- deleted the possiblity of changing an access item form deny to allow, because it is not designed in the Section class, this will 
  be added later.
- Change classical C lists with next and previous pointers to STL lists.
- prefetch section was converted into a more intuitive list style.
- header content-length is now stored in an unsigned integer, making transfers in excess of 2GB's possible.
- the web interface and ftp directory listings now use stylesheets.
- files are no longer placed in prefetch queue if they are a duplicate or already cached.
- converted 'SOCKET' and 'FILEBUF' types and related functions over to C++ classes.
- added support for CARP (Cache Array Routing Protocol).
- added 'hostname' option in general config, when configured properly the web interface works again through HTTP.
- added new 'refresh' subsection in the Cache section which allows per-cache object refresh policies based on activated profiles.
- fixed race condition between cache_open and the unlink thread when a cache file is being recreated, this fixes the bug where
  files were left in the journal that didn't exist in the filesystem.
- added 'protocol' and 'mime' options to Profile entries.
- added optional Fields: Fields which can be active or not active, like time ranges in limits section.
- added file size Field: we can write 10Mb, 1k, etc.
- improved support for HTTP1.0 clients
- added infrastructure to gather statistics throughout the proxy server.
- fixed a problem with connections being needlessly attempted twice.
- added SSL support, a 'https' URL command was added to connect non-SSL clients to SSL websites.
- greatly reduced memory usage of cache data structures.
- converted HTTP_HEADER_LIST to an STL list.
- cookie filtering now allows matching expiry time, domain, and path.
- added 'cookies' URL command to show cookies sent by browser and received from website.
- regular expressions may now be used to match attribute values for prefetched tags, this makes it possibly to selectively prefetch
  linked-to files based on type (i.e. images).
- prefetch entries now have a maxsize option to limit the size of prefetched files.
- Added a memory debugger. Developers should use xnew and xdelete instead of new and delete
- added 'mimeprofiles' URL command to display enabled profiles after doing MIME-type matching.
- replaced cgi arguments lists by STL maps which are more performant.
- fixed some bugs in the web interface, especially when submitting an optional data.
- added tooltips to option names in the Web interface dialogs.

1.9.1:
- failed unlinks's are no longer logged (it's normal for many to happen on a configuration reload).
- appearantly some webservers will return multiple content encoding types (i.e. "Content-Encoding: gzip, x-gzip"), detection
  of content encoding was fixed to support this.
- a bug which prevented middleman from using any forwarding proxy with no ICP type was fixed.
- added 'portrange' option to profiles entries.
- a bug in header filtering was fixed that caused headers that aren't handled internally by middleman from the web server
  to not be sent to the client.
- server headers can now be filtered using the header filtering feature.
- some fixes were made to the profile checking algorithm.
- fixed memory corruption in mime.c (was using sizeof(MIME_LIST) where sizeof(struct MIME_LIST_LIST) should have been).

1.9:
- fixed a minor bug where if the header filtering function returned an empty list
  the full header would be sent.
- threads now linger around for a while after client disconnects waiting to handle new connections,
  this should help alleviate any performance problems releating to thread creation time.
- fixed use of uninitialized cachemap->atime.
- long regular expressions in keyword entries no longer get <br>'s inserted into them when editing.
- all inputs for a file size can now use a suffix to represent the units.. i.e. 1KB, 1M, 2GB.
- filesystem unlink's are now queued and performed slowly by a seperate thread, this reduces
  momentary lockups when cleaning the cache.
- support for Internet Cache Protocol (ICP) was added.
- a rewrite entry was added to workaround apache 1.3 bug where requests for .tar.gz files have
  a "Content-Encoding: gzip" header added and get decompressed for some clients.
- access to URL commands can now be restricted.
- forward entries can now be enabled using URL commands.
- added 'URL Command' option to entries in Profiles section, this allows entries to be enabled 
  only when certain URL commands are used.
- removed 'Host', 'File', and 'URL Command' options from every section except Filter, Mime, and Profiles.. the use of Profiles
  is preferred and far more flexible.
- support for multiple cache directories was added.
- protocol and hostname in URL's are internally converted to lowercase, this makes http://blah.com and HttP://BlaH.COm access the
  same cache file.

1.8.3:
- NTLM authentication is now optional at compile time
- cache directory now created with make install target
- added new 'profiles' section that allows profiles to be enabled based on URL of request.
- a '!' can now be placed in front of a profile name in any section (besides access) to enable
  the entry only if the profile is not enabled.
- added 'profiles' URL command to show list of enabled profiles.
- cleaned up the default configuration, many releated options are now placed in the same profile and
  enabled/disabled together from the profiles section.

1,8.2:
- 'must-revalidate' directive in cache-control header is now honored.
- memory for the cache file is preallocated to the size of the file if it's known.
- content-length is now checked if possible before caching to see if it's too large.
- fixed error in p_mremap wrapper when new_size < old_size.
- the cache now writes changes into a journal to maintain state, there is no longer any need
  to scan the directory structure at startup.
- daylight savings time is now taken into account when calculating the gmt offset.
- cache.c was reorganized, files are now always cached but validated if the server
  gave instructions to not cache it.
- the 'store' url command was removed, it no longer has any use.
- added option to specify if the proxy should be allowed to violate the RFC to improve caching
  performance.
- the 'Use compression' option was changed to 'Compress outgoing', and a new 'Compress incoming'
  option was added which will set the Accept-Encoding header even if the client doesn't
  support it.  
- "Percent of age freshness" option was renamed to "Last-Modified time factor".
- added "INTERFACE" and "PORT" variables for templates and external parsers to reflect the
  proxy interface and port number the connection was made to.
- added option to template entries to specify whether the content can be parsed for variables.
- added new builtin template 'proxy.pac' which is a script that configures the browser to use
  the proxy.
- cache file atime and mtime are now updated properly.

1.8.1:
- added 'prefetch window' option to cache; prefetched files that are requested within this
  time period afterwards are exempt from any refresh rules.
- cachable files that are below the minimum age are now cached but validated
  on every request until they are above the minimum age.
- fixed a bug that caused the proxy to attempt to validate a page without setting the
  if-modified-since header.
- fixed unsafe strncpy in http_header_list_parse.
- fixed unsafe sscanf in http_header_parse_response.
- fixed infinite loop in gzip compression/decompression routine.
- the path in a URL is now resolved to an absolute path (i.e. /foo/../bar becomes /bar).
- fixed detection for libpcre and libpcre in the configure script.
- the HTML parser now limits nesting to 64 levels; this fixes a potential problem with
  memory exhaustion when recursively free'ing the structures.
- added new option to tags in prefetch feature to specify maximum recursion level.
- fixed buffer overflow in url_parse.
- added connection timeout option.
- proper headers are now sent with prefetch requests.
- added support for PAM authentication.
- usernames in access rules are now a regular expression.
- the proxy now keeps track of the cache files on disk, this greatly improves the performance
  of the cache eviction function.
- fixed error when calculating crc32 in filebuf_compress routine.

1.8:
- gzip compression/decompression is now done without using a temporary file.
- added new 'proxytest' URL command to show headers sent by forwarding proxy.
- inet_ntoa isn't thread safe, all uses of it were replaced with inet_ntop
- added support for the 'deflate' content encoding.
- fixed bug where connections in the middle of a transfer would be added back to the pool
  if net_filebuf_read failed.
- added option to select mimetype's which are always compressed if the client supports it.
- forwarded connections are now added to the pool as the proxy that's forwarding them, not the
  host the request is for.
- threads requesting a file another thread is currently caching will now wait for that thread to
  complete.
- added option to control the maximum size a cache file can get before any waiting threads
  stop waiting and download the file directly.
- added 'htmltree' URL command to show parsed HTML tree.
- added prefetching feature.

1.7.1:
- the CONNECT method may now be used when forwarding HTTP requests through a proxy.
- the Proxy-Authorization header is now only sent for the first keep-alive request when forwarding.
- removed an extra pthread_mutex_unlock that was accidentally left in.
- X-Cache header now added to response.
- removed bogus "110 stale cache" warning when requesting a validated file.
- time matching for the Limits feature was changed to allow matching minute and hour ranges
  for All ranges match mode.

1.7:
- disabling the limits feature actually works now.
- limits feature can now be bypassed.
- the Referer check for web interface requests was moved to a more logical place.
- fixed a bug in caching code where cachemap->header->content_length was set to 0
  when cache file is first created; this bug only affected FTP transfers.
- header wasn't being sent for validated FTP files, fixed.
- the bandwidth usage and request limit features are now fully implemented.
- added option to toggle compression of processed content.
- connections with profiles from access rules now match entries without profiles.
- cleaned up code in cache.c, fixed some bugs in refresh algorithm.
- a dynamic version of libpcre is now used if it's available.

1.6:
- fixed bug in FTP directory list parsing that would cause it to fail if the first
  entry had more than 9 space-seperated fields.
- added 'raw' URL command to show raw FTP directory listing and file source.
- fixed parsing problem in url_command_create which would cause url_command->options to remain
  uninitialized if '[' is found in the URL but not ']'.
- extra '\r\n' was missing from pseudo-header in header->raw used for HTTP/0.9 responses.
- fixed off-by-one bug in external_getmime.
- all headers are addded to the header list, but only ones with 'send' flag set to TRUE are sent..
  this makes all headers visible to external parsers.
- path banner on ftp directory listings are now linked to all lower directories for easier navigation.
- fixed bug where connection to server was added back to the pool after an incomplete transfer,
  causing the response from the next request to that server to start in the middle of the incomplete
  transfer.
- if a cache file needs to be validated but the connection to the server fails, the unvalidated copy
  is now sent anyways.
- added 'size' option to keyword, rewrite, and external entries to control the filesize limit
  these entries are applied to.
- fixed bug where non-GET requests were sometimes cached.
- added new 'limits' feature that allows access to the proxy server to be restricted based on
  date/time, bandwidth usage, and requests made.
- a security flaw where a malicious webpage could change proxy settings by having images loaded
  from carefully crafted URL's was fixed by checking the Referer of all web interface requests
  that change a setting. This makes the web interface inacessible through regular HTTP requests, since
  there is no way to validate the Referer (the proxy can't know every hostname that points to it).

1.5.3:
- optimized FTP directory list sorting when sorting by date.
- the proxy now daemonizes properly.
- added support for DNS blacklists.
- fixed use of free'ed pointer in protocol.c
- files can now be uploaded to FTP sites.
- files can now be deleted and renamed, and directories created or removed on FTP sites.

1.5.2:
- fixed minor header parsing bug (extra junk after the header ended up in header->raw when parsing
  the cache file header).
- fixed some minor authentication bugs (when the browser reauthenticates a keep-alive
  connection under a different username/password, access restrictions are now changed).
- connection->url_command wasn't set to NULL, this caused a dereference of an invalid pointer.
- FTP files residing in a directory that doesn't give permission to list it can now be downloaded
  (but not cached).
- fixed some memory leaks in the FTP code.
- fixed several bugs in the cache refresh algorithm; more timezone corrections.
- forwarded and cached ftp requests are now handled by protocol_http (and any protocol
  that the forwarding proxy supports can now be handled).
- changed some dangerous overlapping strcpy's into memmove's
- when forwarding, username/password in URL is now encoded properly.
- cached files can now be validated using the Last-Modified header if the server doesn't
  understand If-Modified-Since.
- forgot to copy the ->raw member in header_dup, fixed.
- fixed build problems on FreeBSD.
- if the browser requests a fresh copy of a cached file, it is now validated rather than being
  transferred again; this significantly increases performance for some browsers when
  reloading a page (i.e. Mozilla).
- a new more portable method for determining the delta between GMT and the local timezone is now used.
- fixed NULL pointer dereference in forward_do when fowarding a CONNECT request through another
  proxy.

1.5.1:
- fixed some incorrect assumptions about the return value of vsnprintf.
- headers with no space after colon now handled correctly.
- cache disk cleaning is now much quicker.
- added web interface page for pooled connections.
- added minsize and minage cache settings.
- added 'headers' URL command to show headers sent by browser and received from website.
- proper command line parsing for external programs.
- timestamps given in HTTP headers used by the cache refresh algorithm are now adjusted
  to compensate for the timezone difference.

1.5:
- different users can now have different configuration profiles.
- stack usage decreased, this should fix some issues with some pthread implementations.

1.4.1:
- FTP connections are now kept alive between requests.
- FTP directory listing can now be sorted.
- keepalive connections are now pooled and shared between threads.

1.4:
- A 302 redirect is now sent back when a URL command is found in the Referer header but not the URL itself,
  this makes them work on pages loaded from pages a URL command was used on.
- Added --enable-mtime option to configure script; this will force the caching feature to use the modification time
  rather than access time when deciding which cache files to delete.
- added support for the FTP protocol (including caching).
- added 'store' URL command; this will force a file to be cached regardless of the server's instructions.

1.3.4:
- fixed memory leak in protocol_connect() when forwarding.
- rewrite and external entries can now be toggled with URL commands.
- show memory and disk cache entries in web interface.
- added hit/miss statistics to cache.
- port and proto are always filled in when parsing header, this fixes a problem with
  URL redirection of HTTP requests.
- network settings can now be changed via the web interface (proxy must be restarted for changes to take effect)

1.3.3:
- added 'offline' url command; with this the file will only be sent if it's cached, ignoring the expiry date.
- cache files now include protocol name.
- protocol is now used in URL for redirected requests.
- fixed silly off-by-one error in s_strncpy and s_strncat, and fixed source in other locations to correct problems
  caused by this change.
- fixed problem with thread stack not being large enough on some pthread implementations (i.e. FreeBSD).
- added support for authentication with the CONNECT method when forwarding.
- added option to specify which outgoing ports are allowed for CONNECT requests.
- fixed POST requests when forwarding with NTLM authentication.
- config file is now fully XML compliant.
- added the `fresh` url command to bypass caching and fetch the file straight from the server.

1.3.2:
- added access and modified date matching to cache manager.
- fixed a race condition that could lead to a memory leak if a thread has a cache file open while another invalidates it.
- added support for HTTP/0.9 responses.
- fixed bug that could sometimes cause a segfault in reg_replace.
- added new rewrite rules that block only unrequested popups.

1.3.1:
- fixed bug that caused extra \r\n to appear in cache file when using chunked encoding.
- fixed bug in handling of Location header when using url command that caused protocols
  other than http to not work.
- added "Percent of age freshness" option to caching feature; this setting controls the percentage
  of time beteween the date given in the Last-Modified header and the time the file was downloaded
  that the file is considered fresh after downloading.
- added 'cache' URL command for displaying information about cached file.
- fixed bug in header_filter function that caused it to return a NULL pointer if the new header list
  only contains items from insert rules.
- added "View cache entries" page to web interface.
- added option to set maximum line length in the web interface, solving the problem with the table
  having an insane width in the log page.
- URL commands now work when doing transparent proxying.

1.3:
- the proxy server can now cache content, many changes were made to make this possible.
- new global web interface config section.
- NULL pointer dereference in header_send fixed.

1.2.2:
- fixed several printf-style format errors in interface.c.
- access levels actually work now (stupid mistake in access.c caused full access to always be granted).
- fixed NULL pointer dereference when connection closed after first part of NTLM authentication and second
  connection is refused.
- cleaned up NTLM authentication code.
- added 'diff' url command to show changes made by rewrite rules to requested URL.

1.2.1:
- added 'username' and 'password' option to access entries; clients can now authenticate with the proxy.
- added support for gzip encoding both when receiving a file from a website and sending it to the client.

1.2:
- URL command's now taken from Referer header so that bypassing features for a webpage also bypasses
  them for images and files loaded directly from that webpage.
- URL command now added to Location: header when server issues a 302 redirect so that the feature(s)
  are still bypassed when the browser follows the redirect.
- 100 Continue messages are now handled properly, this fixes problems with POST'ing to IIS servers
- A bug in the way header's were parsed which would cause the server to crash if a client sent a response
  header was fixed.
- A new keyword scoring feature for blocking pages containing inappropiate content was added.
- Added the 'filter' url command to show filter entry match for the URL.
- Added the 'mime' url command to show mime filter entry match for URL.
- Added the 'score' url command to show keyword score for page.

1.1.1:
- fixed off-by-one error in socket.c
- added top/bottom link to each entry in all lists
- rewrite rules can now be applied to POST data
- fixed off-by-one error in regexp.c which would cause an ascii 0 to be added at the end
  of the document when any rewrite rule is applied

1.1:
- added NTLM and Basic authentication support when forwarding

1.0:
- first stable release
