* Grumpy's changelog *

What's new in v0.15 [25 Jan 2009]:
 - Added the Gopher engine. Grumpy can work as a HTTP and Gopher server now.

What's new in v0.14 [14 Dec 2008]:
 - Server side parameters (like /file.htm?param1) aren't treated as part of the ressource anymore,
 - In directory listing mode, the main entry's description wasn't htmlized - fixed,
 - Support for CGI sripts & programs (disabled by default),
 - Minor optimizations in the way GMT time is handled,
 - Logs are dated using GMT time now,
 - Added an ETAG header to any returned file,
 - Added the support for request containing "If-None-Match" (answering by a 304 code when needed),
 - HTTP 0.9 is denied right after the request (doesn't wait for the end of header anymore),
 - Grumpy answers with the request's HTTP version (was answering in HTTP/1.1 all the time before),
 - Cleaning the html code which is generated when listing directory content,
 - Added the remote IP to logs (based on REMOTE_HOST and/or REMOTE_ADDR variables),
 - Fixed a bug in the partial download support: "Range: bytes=0-" was returning the first byte of the file, instead of the whole document,
 - Added configurable domain redirects (301 codes),
 - Decoding more %encoded characters in URLs,
 - Security warnings doesn't necessarily brake the connection anymore.

What's new in v0.13 [09 Nov 2008]:
 - Added the possibility to customize the 400, 401, 403 and 404 error pages,
 - Fixed a small bug in the directory listing module (blank page when the directory was empty),
 - Any not HTTP/1.0 request without the Host header gets a 400 code,
 - Fixed virtual host detection when a port is specified (eg. "Host: mydomain.com:81"),
 - Line terminators are always CR/LF now (were single LF),
 - Authentication file is checked recursively (.grumpy.auth protects any subdirectories now).

What's new in v0.12 [21 Oct 2008]:
 - Any text inserted into html code (when listing directories) is htmlized first (eg. ">" = "&gt;"),
 - Big improvement of server's performances: data is transfered 20x faster (files are buffered into 1K chunks, instead of being sent byte per byte),
 - Added basic QoS support (bandwidth limitation),
 - Each log line is written separately (avoiding to loose logs when connection is reseted), and each log is identified by the PID of the running Grumpy's instance,
 - Log overflow limit - any connection generating more than 100 lines of logs is aborted,
 - Added support for partial downloads (Ranges header),
 - Added virtual hosts support,
 - Directory listing is limited to 20'000 entries now (twice as before),
 - The sorting routine used for sorting files for the directory listing has been improved (about 15x faster for a 1K entries list),
 - When there's too much entries in a directory (more than 20'000), the directory listing displays a warning,
 - In directory listing mode, Grumpy displays how much times it took to generate the page.

What's new in v0.11 [13 Oct 2008]:
 - Implementation of the HEAD command,
 - Directory content is sorted (only first 10'000 entries are displayed),
 - When listing a directory's content, any file/dir starting by a dot are hided,
 - The "Date" header is returning the real GMT time (was: local time with "GMT" suffix),
 - The server performs % encoding/decoding on the fly (only most generic codes: %20, %21, etc...),
 - A security routine checks the sanity of each http request (evasion attempts, dangerous encodings, etc...),
 - Added a short "about" screen (-h or --help),
 - Basic HTTP authorization support (configurable per directory via the .grumpy.auth file),
 - Each returned code is followed by a short message (ie. "404 Not found" rather than just "404"),
 - Directories listings are somehow nicer (changed color scheme, added the host name, a description column and date/time...).

What's new in v0.10 [03 Oct 2008]:
 - First public release.