2015-10-02  Peter Simons  <simons@cryp.to>

	NEWS: update for release

	Re-use boost::system::system_error.
	New versions of Boost require that Boost.System be linked to the application.
	Since this affects us too, we might as well take advantage of the code that's
	in there, and re-define our system_error class as a simple forwarder to the one
	from Boost.

2013-04-24  Peter Simons  <simons@cryp.to>

	release.nix: move ci instructions into a separate repository

2013-04-04  Peter Simons  <simons@cryp.to>

	release.nix: simplified build instructions

2013-03-28  Peter Simons  <simons@cryp.to>

	maint: post-release administrivia
	* NEWS: Add header line for next release.
	* .prev-version: Record previous version.
	* cfg.mk (old_NEWS_hash): Auto-update.

2013-03-27  Peter Simons  <simons@cryp.to>

	NEWS: update for the upcoming release

	release.nix: use then we genAttrs-style specification for the build job

	release.nix: fixed build function to honor the 'system' argument

	HTTPParser: work around FreeBSD's broken timezone information

2013-03-26  Peter Simons  <simons@cryp.to>

	release.nix: avoid default values for versionSuffix

2013-03-25  Peter Simons  <simons@cryp.to>

	bootstrap.sh: simply script so that it works with bourne shell instead of bash

	release.nix: configure continuous integration by Hydra

2013-03-20  Peter Simons  <simons@cryp.to>

	maint: post-release administrivia
	* NEWS: Add header line for next release.
	* .prev-version: Record previous version.
	* cfg.mk (old_NEWS_hash): Auto-update.

	NEWS: update for release

	README: cosmetic changes

	Use Gnulib to reliably define sighandler_t.
	This patch fixes the build on BSD Unix.

	bootstrap.sh: avoid use of 'sed -i', which doesn't exist on BSD

	bootstrap.sh: this script requires bash

	Makefile.am: don't rely on the automatic variable $<, which isn't available in BSD make

2013-02-09  Peter Simons  <simons@cryp.to>

	NEWS: fix position of the newly added header line

	maint: post-release administrivia
	* NEWS: Add header line for next release.
	* .prev-version: Record previous version.
	* cfg.mk (old_NEWS_hash): Auto-update.

	NEWS: update for upcoming release

	bootstrap.sh: adapt the set of warnings for the upcoming release

	Improve style of error messages.

	Ensure that <config.h> is included in every source code module.

	Makefile.am: fix the distclean and maintainer-clean targets

	Update datestamp in copyright headers.

2011-08-23  Peter Simons  <simons@cryp.to>

	Updated copyright headers.

2011-07-28  Peter Simons  <simons@cryp.to>

	configure.ac: write a config.h file, gnulib doesn't work properly without it

	libscheduler: correctly reference the scheduler branch

	libscheduler: dropped bogus reference to ioxx

2010-05-17  Peter Simons  <simons@cryp.to>

	.gitignore: ignore 'html' directory

2010-03-05  Peter Simons  <simons@cryp.to>

	post-release administrivia
	* NEWS: Add header line for next release.
	* .prev-version: Record previous version.
	* cfg.mk (old_NEWS_hash): Auto-update.

	httpd.txt, NEWS, README: updated for the upcoming 1.1 release

	man-page: build the man page from asciidoc instead of docbook
	Asciidoc is *infinitely* better than Docbook for writing documentation.

	man-page.xml: added further meta-info tags to make xmlto(1) happy

2010-03-04  Peter Simons  <simons@cryp.to>

	NEWS: documented recent user-visible changes in the 1.1 release

	Use consistent indention (thanks to astyle).

	Replaced all tabs by white space.

	config.cc, config.hh: prefer strtol() over atoi() since it supports error reporting

	HTTPParser.hh: Spirit v1.x has been renamed to Spirit.Classic in recent versions of Boost

	config.cc, config.hh: define default_content_type 'const' to avoid compiler warnings about assigning a constant string to a mutable pointer

	Replace obsolete ScopeGuard class with boost::scoped_array<> or, if that's not possible, with explicit try/catch cleanup.

	HTTPParser.cc: added missing includes to ensure that memset() and strcasecmp() are declared

	Updated build system to use Gnulib. The documentation is generated from XML docbook via xmlto.

	Added missing system-error.hh header file locally into the repository.

	Re-released the entire package under GPLv3+.

	INSTALL: Automake installs this file automatically

	monotonerc: drop obsolete file

	Import scheduler project via git submodule.

2010-03-04  Peter Simons  <simons@cryp.tyo>

	Clean up distribution for release.

2003-11-26  Peter Simons  <simons@cryp.tyo>

	Import boost namespace, which is new since spirit has been accepted into boost.

2003-11-14  Peter Simons  <simons@cryp.tyo>

	customized for new installation

2003-06-17  Peter Simons  <simons@cryp.tyo>

	Updated dsssl stylesheet version.

2003-05-06  Peter Simons  <simons@cryp.tyo>

	No longer needed.

2002-11-03  Peter Simons  <simons@cryp.tyo>

	Create a real man page.

2002-10-15  Peter Simons  <simons@cryp.tyo>

	Include "log.hh".

	Cast signal handlers to avoid warnings.

	Use Spirit's new include structure.

2002-08-05  Peter Simons  <simons@cryp.tyo>

	Updated the grammar for the latest version of Spirit.

	Added the bloody autoconf generated directory.

	Fixed the user id for my new machine.

2002-06-18  Peter Simons  <simons@cryp.tyo>

	Fixed string compare class for std::map.

	Removed trailing blank line.

	Use std::map instead of std::hash_map, which is an extension that's probably not available everywhere.

	Updated dependencies.

2002-05-19  Peter Simons  <simons@cryp.tyo>

	Added .hpp and .cpp suffixes as "text/plain" so that we can return source code.

2002-04-17  Peter Simons  <simons@cryp.tyo>

	Added item.

2002-04-13  Peter Simons  <simons@cryp.tyo>

	Document the need for GNU Make explicitely.

	Updated dependencies.

	Use gmake in the example.

	Use long command line parameter names in the examples for readability.

	Documented the setup procedure.

	Lots of administrative changes.

	Deleted an item, added a new one.

	Log the default hostname at start-up.

	Don't hard-code the default hostname; use hostname(1) instead.

	Set the default hostname.

	Use the configured default hostname in case pre-HTTP/1.1 requests come in. If we have one, of course.

	Added flags --no-detach and --default-hostname. The apropriate semantics are not implemented yet, though.

	Remove debug code from TCPListener altogether.

	Removed debug output.

	Fixed command line flags for the run target.

	Added item.

	Added item.

2002-04-12  Peter Simons  <simons@cryp.tyo>

	Added item.

	Fixed usage information.

	Fixed errors.

	Added a command line parser and apropriate documentation.

2002-04-11  Peter Simons  <simons@cryp.tyo>

	Adapted test program to the new data structures.

	- Use default prefix /usr/local/httpd. - Activated code that will compile with our own getopt library.

2002-04-08  Peter Simons  <simons@cryp.tyo>

	Now we need -I. to find boost.

	Re-imported boost and spirit in a clean fashion. This make sub-autoconf and all unnecessary.

	Added version number to the package.

	Log debug messages with debug(), not info().

	Removed debug code.

	Added debug code to figure out why httpd logs the bloody read timeout message.

	Report timeouts on the connection only if the timeout occurs in a state where it is not supposed to close -- a state not equal to READ_REQUEST_LINE, in particular.

	When logging the error message about the realpath check, make sure we don't print any non-sense in case the port number hasn't been set.

2002-04-07  Peter Simons  <simons@cryp.tyo>

	Remove test program at clean target.

	Added an item.

	The fact that the connection was closed by the peer should only be logged if it happens "in the midst" of a request, or else we'll log an error every time a peer does not want to keep a persistent connection open.

	Make sure that our I/O operations can handle the EINTR error in case we receive a signal.

	Added debug message if the handler is restarted because the connection is persistent.

	Fixed grammar in debug message.

	Include <iostream> rather than <ostream> for the sake of the older gcc versions.

	Removed redundant information in log message.

	Fixed typo in log message.

	Things to do.

	Added sockfd to debug message.

	Updated dependencies.

	Done. It's up and running again.

	Added better error messages.

	Updated dependencies.

	It's up and running again. More or less.

	Added htdocs and logs directories.

	Fixed log_access() for the new data structures.

	Fixed module for new data structures.

	Removed unused template specializations for resetable_variable<string>.

	Added helper routines.

	Don't use escape_char(). I'll soon add a generic search and replace.

	Actually, this routine is useless.

	Updated dependencies.

	Use escape_char()

	Added useful helper routine.

	Cleaned the routine up.

	Cleaned the whole I/O callback stuff up and moved the routines into one source file.

	Intermediate version that compiles.

	Added debug code whenever a connection goes up or down.

	Moved stat buffer into the call. We'll see whether this actually makes sense.

	Deleted a few modules, added a few.

	Implemented the missing parser routines required by the daemon.

	Adapted routine to the new data structures.

	Fixed name of the if_modified_since member in HTTPRequest.

	Finished get_request_line() for the new data structures.

	Let the parser pass any method string and decide in the application whether to accept it.

	The path component is mandatory in an URL.

	Don't initialize the port to 80.

2002-04-06  Peter Simons  <simons@cryp.tyo>

	I rewrote _everything_. Trust me, nothing is like it used to be.

	Improved comments.

	Forget it; tracing doesn't belong here.

	Added --with-trace.

2002-04-05  Peter Simons  <simons@cryp.tyo>

	Fixed persistent consistent logic.

	Don't give out the complete path of the file in case the open() call fails.

	Don't allow GETs that leave the htdocs hiercharchy.

	Added --with-debug switch to autoconf script.

2002-04-04  Peter Simons  <simons@cryp.tyo>

	Created a skeleton documentation based on the mapSoN docs.

	Give the package an unique version number.

	The makefile no longer depends on the autoconf run because it plain and simple doesn't.

	Removed unnecessary blank from Date: header.

	Drop root priviledges after opening the listen port.

2002-04-03  Peter Simons  <simons@cryp.tyo>

	Removed debug code.

	Use timezone to convert file system times to GMT.

	Added tzset() call to init timezone stuff.

	- Updated dependencies. - Included spirit stuff in distclean target.

	Don't test for getopt() right now; I don't even use it.

	Configure subproject spirit.

	Timestamp to something else helper routines.

	Implemented If-Modified-Since among other things. I just have to worry about time zone conversion in the file system before it works.

	Implemented parse_if_modified_since_header() completely.

	Finally finished the If_Modified_Since_Header rule.

	Updated dependencies.

	Removed unnecessary include.

2002-04-02  Peter Simons  <simons@cryp.tyo>

	Now that we use streams, we can use a static buffer here because the result of time_to_ascii is used immediately.

	Provide a full URL in moved_permanently.

	Removed unused include.

	Rewrote header generation to use stringstreams rather than sprintf().

	Use symbol tables rather than long list of explicit alternative strings.

	Implemented persistent connections.

	Made the daemon reply with the appropriate Connection headers.

	Added preliminary support for actually parsing the If-Modified-Since header.

	Prepared support of If-Modified-Since header. It's not evaluated yet, though.

	Escapes quote characters in the logfile entries that are enclosed in quotes themselves.

	Include a Last-Modified header in HEAD replies so that wget may use timestamping.

	Support Keep-Alive header.

	Added call_state_handler() member function so that I don't have to write that weird syntax everywhere.

	Don't call log_access() in the destructor in order to avoid creating access logs for aborted connections. Rather log in terminate().

	Parse HTTP version and log it accurately.

	- Parse the Connection header.
	- Don't write to the socket in TERMINATE state or when the
	  write_buffer is empty.

	Parse user-agent and referer headers and log the result.

	Updated dependencies.

	- Implemented access logs. - Moved port number into the configuration.

	log_access() is a member function of HTTPRequest now.

	Made sure all state transitions are debug-logged.

2002-04-01  Peter Simons  <simons@cryp.tyo>

	Moved the poll-interval switching to the main() routine.

	Include <cstdio> for snprintf.

	Implemented line length limit for request headers to protect against flooding.

	Made the name of the default page configurable.

	Implemented HEAD and GET.

	Implemented the header parse framework.

	Updated dependencies

	Use string::erase() instead of string::clear() for backward compatibility.

	Did an almost complete rewrite to restructure my state machine and make the code clearer and failure resistant.

	Fix rotate.

	Fixed the range when testing for a digit.

2002-03-31  Peter Simons  <simons@cryp.tyo>

	Don't use HTTPParser.cc in httpd.

2002-03-29  Peter Simons  <simons@cryp.tyo>

	It's unfinished, it's not beautiful and it won't last.

2002-03-27  Peter Simons  <simons@cryp.tyo>

	Started to define a date structure "HTTPRequest" which will contain the results of the parsing process.

	Don't define SPIRIT_DEBUG anymore.

	Removed the unused CFLAGS define.

	Turned HTTPParser into a separate module that can be used in other programs, too. The old http-parser is just a test program now.

	Updated dependencies.

	These are integrated into the HTTP parser now, because in HTTP we only deal with a subset of the URI specification.

	Finally ... it works.

	The parser seems to work now.

	The parser compiles but doesn't recognize whitespace correctly yet.

2002-03-26  Peter Simons  <simons@cryp.tyo>

	Don't optimize. Compiling takes long enough already.

	Enable debugging in the Spirit framework.

	Rewrote the complete parser. Doesn't work yet, though.

2002-03-20  Peter Simons  <simons@cryp.tyo>

	Use URI class as parser.

	Updated dependencies.

	Implemented an URI class and an apropriate parser to fill it from some text buffer.

2002-03-19  Peter Simons  <simons@cryp.tyo>

	The grammar is complete, only the interface to the class is preliminary.

2002-03-18  Peter Simons  <simons@cryp.tyo>

	Added preliminary http parser.

2002-03-15  Peter Simons  <simons@cryp.tyo>

	Added Date: and Last-Modified: headers to the servers reply header.

	Use autoconf-determined define to find the correct include file for std::hash_map.

	Check for ext/hash_map and hash_map respectively.

	Adapted debug() and trace() calls to the new system.

	Use preprocessor magic rather than varadic macros to handle the trace() and debug() calls: Older compilers won't understand the C99 syntax.

2002-03-14  Peter Simons  <simons@cryp.tyo>

	Use ScopeGuard to free resources in case of an exception.

	Allocate configuration class on the stack rather than an the heap, so that it is freed automatically when it goes out of scope.

	Use ScopeGuard to make sure resources are freed in case of exceptions.

	Made set_sig_term() static; it's not used outside of this module.

	Removed the whole file cache thing. The implementation was too unstable to be actually used in production.

	Won't use odin any longer.

	Added a make- and autoconf based build system.

2002-01-02  Peter Simons  <simons@cryp.tyo>

	Added decoding of URLs.

2001-10-18  Peter Simons  <simons@cryp.tyo>

	Added the contents of Referer: and User-Agent: to the access log.

2001-10-07  Peter Simons  <simons@cryp.tyo>

	Adapted include to the new name of refcout-auto-ptr.

2001-09-24  Peter Simons  <simons@cryp.tyo>

	The include file system-error.hh comes from the standard library now, so the include path has changed.

	system-error.hh is part of our generic library now. We'll get it from there.

	Double underscores are reserved for low-level implementers and should not be used.

2001-09-23  Peter Simons  <simons@cryp.tyo>

	Added throw() declaration to log_access().

	Fixed a mix-up in the parameter order.

	Added the number of read() and write() calls to the access log.

2001-09-20  Peter Simons  <simons@cryp.tyo>

	Implemented nice request logging.

	Added code that will free RequestHandler's buffer immediately when it's not needed anymore. This saves some memory.

	Cleaned FileCache class up.

	Avoid use of u_int16_t datatye, use short instead.

	Include <string> for strncasecmp().

	Don't use %Ld unconditionally because it won't work an all platforms.

	- Include cstdio for snprintf(). - Use %Ld to format the file size into the buffer.

	Include cstdio for snprintf().

	Include local files with #include "..." rather than #include <...>.

	Added the hit counter to the debug message telling about the hit.

	Added file-cache.cc to the project.

	Implemented file caching.

2001-09-19  Peter Simons  <simons@cryp.tyo>

	Removed log message in signal handler.

	Implemented adaptive behavior: If more than 'n' instances of RequestHandler exist, we switch to hard poll intervals in order to be more efficient.

	Moved log message to the _end_ of the destructor.

	Don't trace the destructor.

	Enhanced exception safety of the constructor.

	Rewrote process_input() to use regexec() directly in order to avoid excessive use of std::string.

	Rewrote process_input() to use regexec() directly in order to avoid excessive use of std::string.

	Removed use of std::string whereever possible.

	Reviewed my use of "delete this" and removed some unnecessary "return"s and added some very necessary "return"s.

	- Renamed my states to more descriptive names. - Use shutdown(2) to terminate the connection rather than close(2). - Changed the priority of some log messages from info() to debug().

	Turned some info() messages to debug() because we really don't want them to be logged in normal operation.

	Moved get_content_type() member function into the header and made it inlined to get additional performance.

	Remove gmon.out in the %clean target.

	Ignore gmon.out file.

	Rewrote configuration class to use a hash_map for the content type lookup. Also removed the use of std::string entirely, what saved some performance, too.

	Removed -pedantic from cxx_flags to avoid warnings about "anonymous variadic macros".

	Re-wrote the buffer management strategy of the server. Now we use a fixed buffer per event handler in order to avoid any copying of data.

	Renamed read_block_size to io_buffer_size because that's more accurate.

	Don't rely on the optimizer to remove the debug() and trace() calls. Instead, if DEBUG is not defined, turn debug() and trace() into empty, variadic macros.

2001-09-18  Peter Simons  <simons@cryp.tyo>

	Use system_error exception for system errors rather than runtime_error.

	- Access logs will now be made with the buffered routine log_access()   rather through syslog.
	- Requests for directories will get a permanent redirect to the
	  "/index.html" page. This avoids URL construction mistakes in the
	  browser in case the directory is not marked with a closing slash.
	- Add "Content-Length:" header when sending the file back.

	Disable debugging as default.

	Log target URL in RequestHandler::moved_permanently().

	Enhanced formatting.

	Use a buffer size of 1 kb. We rather call read()/write() more often than having to copy the buffer contents because we can't write it.

	Added write_buffer_or_queue() member function and made use of it where possible.

	Changed priority of some log messages from error() to info().

	Renamed member variable "uri" to "url", what is the correct name.

	Added correct error messages.

	Split the RequestHandler class into smaller source units.

	Ignore SIGPIPE signal.

	Use a buffer size of 4kb as default.

	Implemented way more efficient buffering strategy.

	Removed buffer-fullness thresholds. They aren't required anymore.

2001-09-17  Peter Simons  <simons@cryp.tyo>

	Added signal handling code.

	Adapted code for the change in the scheduler::event_handler interface.

	Fixed a bug where I assigned -1 to filefd and _then_ called close() on it. Suprisingly, it didn't work. :-)

	- Added sockfd to error()-log messages. - Added call to switch linger mode off again.

	Don't append '()' to the function name: Apparently the pre-processor does that already.

	Wrap definition of DEBUG into safety brackets to avoid re-defining the symbol.

	Make use of configuration::get_content_type() when sending the file back. Also corrected some mistakes in the HTTP protocol.

	Implemented get_content_type() routine, which will map a filename to a content type.

	Made the 'tmp' buffer static in the RequestHandler class in order to save memory.

	Make use of the configured values in the configuration class.

	Added better configuration options.

2001-09-16  Peter Simons  <simons@cryp.tyo>

	Added central configuration class, which contains all the stuff that the http daemon needs to know. Now all we have to do is to make that class read some config file or parse the command line, then the user can control the daemon.

	Removed unnecessary setting of the write timeout; we don't test for writability.

	The write-handler now unregisters itself when the buffer contains no data.

	Unless DEBUG is defined, debug() and trace() are defined as inlined, empty functions. This way all debugging code vanishes when compiled without DEBUG.

	Added compile httpd without debugging and with optimization enabled.

	Implemented the state machine that will reply with the actual file.

2001-09-15  Peter Simons  <simons@cryp.tyo>

	Declare the logging routines as not-throwing any exceptions.

	- Disabled tracing code. - Enabled optimization.

	Removed unnecessary debugging and tracing code.

	Added warning flags when compiling.

	Rather than passing the log-level to one routine, have one routine for each log-level so that we can use the optimizer to switch, say, debugging code off.

	The fd-number that caused the crash was random. The real problem is within the memory management.

	- Made destructor of TCPListener virtual. - Added errno-string to error message.

	Include <netinet/in.h> so that sockaddr_in is defined on BSD Unix, too.

	Added correct logging and debugging code.

2001-09-13  Peter Simons  <simons@cryp.tyo>

	The web server answers all requests with a virtual page now.

	The http daemon now understands http 1.0 requests.

	Moved RequestHandler class into a separate module.

2001-09-12  Peter Simons  <simons@cryp.tyo>

	Wrote framework for my http daemon.
