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

	include/ioxx: dropped redundant brackets in pre-processor statements

	test/Makefile.am: Gnulib says we shouldn't rely on @...@ substitution in Automake files

	include/ioxx.hpp: updated documentation after the move to savannah

	build-aux/ax_config_feature.m4, build-aux/ax_prefix_config_h.m4: update license to GPLv3
	Gnulib refuses to deal with files that are licensed under GPL v2. Since
	the license allows us to distribute these files under the newer version,
	we do so. This problem should be addressed upstream, though.

	Updated m4 macros to the latest version available in the Autoconf Archive.

	Use gnulib to build this library.

2010-02-23  Peter Simons  <simons@cryp.to>

	NEWS, ChangeLog: removed empty files

	README: fixed path to html documentation

	Released the entire package under the Lesser General Public License.

2009-09-30  Peter Simons  <simons@cryp.to>

	Added a funky Boost.Jam build for the test programs.
	Say whatever you want, but Boost.Jam is sooo much easier than make.

2009-07-23  Peter Simons  <simons@cryp.to>

	build-aux: updated macros from autoconf archive

2009-04-21  Peter Simons  <simons@cryp.to>

	Don't qualify calls to swap(); let ADL find the proper function.

2009-03-13  Peter Simons  <simons@cryp.to>

	Modern boost::function classes doesn't accept an allocator.

	error: ensure that std::strerror() is defined.

	core: Avoid re-definition of names 'schedule' and 'dispatch'.

2008-06-03  Peter Simons  <simons@cryp.to>

	doc: updated links to git repository

2008-05-24  Peter Simons  <simons@cryp.to>

	fixed minor typo

	doc: use inetd, daytime, and echo as examples

	socket: added non-iovec send/recv methods

	Renamed as_time_t() method to current_time_t(). Analogous for as_timeval().

	Renamed class time to time_of_day.

	doc: added description of BOOST_SUFFIX

2008-05-21  Peter Simons  <simons@cryp.to>

	build: generate tarball with consistent mdates and uid/gid of 0/0

	added docs, renamed signals.hpp to signal.hpp, hid not_ewould_block class

	time.hpp: improved docs

	git: ignore generated files

	build: use auto-generation for config.h
	Thanks to AX_PREFIX_CONFIG_H, the IOXX prefix can be added to all
	defines in the autoheader(1)-generated file.

	AX_PREFIX_CONFIG_H: don't use leading underscore in include guard

	build: imported ax_prefix_config_h macro

2008-05-19  Peter Simons  <simons@cryp.to>

	cosmetic

	todo: updated

	disabled pretty much all of the graphs

	build: bumped date in include guards

	git: ignore doc/html directory

	docs: updated hyperlinks to git

2008-05-18  Peter Simons  <simons@cryp.to>

	docs: began documenting the whole thing

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

	build: configured installing and distribution of doxygen docs
	A funny thing about Automake is that it needs an exact list of files
	that ought to be distributed and installed. This list is, of course, not
	exactly ease to provide if those files are generated with an external
	tool like Doxygen. In the end, it turned out that disabling Doxygen in
	the 'distcheck' target (which happens to be the offender) is the best
	way to remedy the problem:

	  http://permalink.gmane.org/gmane.comp.sysutils.automake.general/9417

	build: added echo.hpp to build

	core: added an echo handler

	core and adns: added empty() methods

	test-dispatch: this test is essentially the same as the core test

	test-socket: added a neat trait-based socket class experiment

2008-05-16  Peter Simons  <simons@cryp.to>

	build: clean-up
	Got rid of the non-sense config.h header. 
	Removed unused src directory.

	AX_HAVE_BOOST_UNIT_TEST_FRAMEWORK: bugfix
	The caching behavior broke CPPFLAGS detection.

	daytime: added DNS resolving and basic UDP support

	test-core: added missing include for acceptor.hpp

	adns: added query_ptr() method for sockaddr and fixed crash
	The _registered_sockets container must be erased before the adns state
	is deleted, otherwise adns will have closed those sockets (removing them
	from epoll) before the corresponding destructors are run.

	build: added missing header files

	socket::endpoint: don't store 'domain' because sockaddr knows it already

2008-05-15  Peter Simons  <simons@cryp.to>

	epoll: close() removes a socket from epoll
	If the socket is going to be closed, epoll::socket::~socket()  doesn't
	have to issue an explicit delete for it.

	socket: no default argument to system_socket::close_on_destruction()
	If we'd offer a default argument, the call is indistinguishable from the
	observer method of the same name.

	core: destruct schedule before dispatch
	dispatch::socket refers back to the dispatch object (i.e. for the epoll
	fd they're registered in), so these sockets must really be destroyed at
	the time dispatch goes because otherwise ~socket() will access
	non-existent memory. In the context of core that happened whenever a
	socket was registered in schedule (i.e. for an i/o timeout) because
	dispatch was destroyed before schedule was. 

	Arguably, the situation is somewhat unsatisfactory. Storing every little
	damn thing in a reference-counted smart pointer would solve those
	problems.

	daytime: improved logging

	dispatch: removed unnecessary default constructor

	socket: neater logging

	logging: added forgotten LOG_ERROR() macro

	neater log output

2008-05-14  Peter Simons  <simons@cryp.to>

	adns: test program that overrides adns logging

	poll, select: added links to POSIX spec for those functions

	test-core: began writing a neat inetd-like test program

	demux: added support for obscure poll extensions
	poll() and epoll() apparently have synonymous bits for readable,
	writable, and pridata. Naturally, those synonyms use different bits. Go
	figure.

	dispatch: improved logging

2008-05-13  Peter Simons  <simons@cryp.to>

	core: added nested classes socket and timeout
	Those local classes offer a get_core() method.

	dispatch: added nested handler typedef

2008-05-12  Peter Simons  <simons@cryp.to>

	time.hpp: improved comments

	Improved logging.

	todo: updated

	readme: cosmetic

2008-05-11  Peter Simons  <simons@cryp.to>

	todo: updated documentation

	acceptor: parameterize the class over the allocator type

	todo: lots of updates

	test-core: fixed main loop
	The flag stop_service must be checked after core::run() and before
	core::wait(), or a timeout won't be noticed.

	core::run(): invoke scheduler twice, like in test/dns.cpp.

	adns: improved log output

	adns: fixed bug in timeout handling
	adns_beforepoll() might return a timeout of 0, which lead to a call of
	dispatch::wait() with no timeout at all. Instead, the loop now processes
	timeouts on the spot, and then repeats the call to adns_beforepoll().

	demuxers: improved logging

	demuxers: improved logging

	test-dns: schedule needs to run twice.
	The call to dns::run() might register a new timeout, so schedule::run()
	has to be called afterwards to figure out the correct number of seconds
	to wait. However, schedule::run() also delivers those timeouts, so it
	has to run before dns::run() is called. This is unsatisfactory.
	Arguably, it doesn't matter because schedule::run() is a very cheap
	call, it's just that the structure looks odd.

	core: cosmetic

	configure: require automake 1.0
	As a matter of fact, the build probably doesn't require automake 1.10,
	but it's the only version I ever test it with, so I simply don't know
	whether older versions might work or not.

2008-05-09  Peter Simons  <simons@cryp.to>

	build: added proper ax_have_boost_unit_test_framework macro
	When linking the dynamic library, the tests need to compile with a
	special pre-processor symbol defined. The current solution detects and
	solves this, albeit it a somewhat uglyish way, but it works.

	updated todo

	configure: updated 3rdparty macros

	docs: minor improvements

	configure: added --enable-internal-docs flag

	core: polished the code and moved it into the public API

	acceptor: improved log message

	sockets log stuff.

	Moved logging code out of error.hpp and into detail/logging.hpp.

	test-dns: updated test program

	schedule: cosmetic

	adns: consistently use user-specified allocators

	Deleted dns.hpp header; it doesn't allow specifying an allocator.

2008-05-08  Peter Simons  <simons@cryp.to>

	core: recent changes greatly simplified the io_core class

	fixed build

	fixed build

	signals: moved into the visible API

	detail::socket renamed to system_socket

	Moved error.hpp into visible API. Added stub code to compile without logxx.

	schedule: re-arranged template parameters to match those of dispatch

	dispatch: select system demux in template arguments

	config: define IOXX_HAVE_LOGGING if logxx is available

	configure: handle missing logxx library

	demux: deleted header
	The demux typedef isn't useful, because it works only with default
	allocation. If the user wants to specify a different one, she has to
	deal with all those #ifdefs anyway, she might just as well use the real
	demux type names.

	build: fix bug in use of AC_CHECK_LIB

	build: go back to linking boost unit test framework
	The compile times with the header-only version are insane.

2008-05-07  Peter Simons  <simons@cryp.to>

	test-dispatch: improved log messages

	improved log messages

	configure: added preliminary support for logxx

	error.hpp: added preliminary support for logxx

	core: disable as regression test

	doc: use package name from configure

	time: use portable bind() syntax

	core: dropped redundant log message

	test-dns: re-enabled the program

	configure: improved AX_WITH_PROG usage and boost header detection

	todo: added various portability problems

	makefile: added signals.hpp header.

	socket: don't rely on sockaddr to have a default constructor.
	Some compiler's don know to handle that.

	iovec: size() returns difference_type, which is signed
	Added an assertion that makes sure the type's limit isn't exceeded, but
	it shouldn't because we initialize iovec's from ptrdiff_t too.

	core: we don't use dns, so don't include it

	schedule: added reference to current time of day to object
	There are numerous advantages if the schedule object knows the current
	time of day; the most significant one being that a timeout object can be
	reset relative to 'now' without any effort.

2008-05-06  Peter Simons  <simons@cryp.to>

	core: instantiated everything with a custom allocator

	socket: added socket::native_t alias for native_socket_t

	demux: added proper signal handling
	All signals are unblocked before wait(). If we have support for
	epoll_pwait(), ppoll(), or pselect(), those calls are used to achieve
	this; otherwise the signal mask is set manually using sigprocmask().

2008-05-05  Peter Simons  <simons@cryp.to>

	schedule::timeout: renamed most reset() methods to cancel()

	iovec: changed reset() and make_iovec() to accept const pointers
	It's weird, but allowing const pointers here lets us get along with one
	set of functions.

2008-05-04  Peter Simons  <simons@cryp.to>

	removed unnecessary size_hint parameter

	demux: removed unnecessary size_hint parameter

	core: moved header into the cpp file

	configure: fix dependencies for generated files

	dispatch: templatize the class over the map type, not over allocator type

	core: this class is currently experimental

	acceptor: take advantage of socket::accept()

	Added socket::accept() method.

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

	core: simplified test a lot

	core: the class is working, but the design is questionable

	core: added preliminary code to tie everything togethr

	Don't run adns test if we don't have the library.

	Disable dns test if there is no resolver.

	Build doxygen doc only at 'html' target, not at 'all'.

	autoconf: macros updated from the archive

	Untabify.

	ioxx_enable_feature: dropped call to AC_REQUIRE
	The call seems suspicious since the macro _does_ call the dependent
	macro, so Autoconf should be able to figure this out itself. It is, but
	for the sake of being sure we better depend on version 2.61 because that
	one is definitely working.

	Dropped obsolete files.

	Always include our own headers as <ioxx/.../*.hpp>.
	This is necessary for VPATH builds.

	configure: add dependencies for *.in files.

	cosmetic

	build: html distribution and installation doesn't work -- disabled

	build: added acceptor.hpp

2008-05-02  Peter Simons  <simons@cryp.to>

	Added a brand-new acceptor class to create listener sockets.

	Improved dispatch::modify() exception-safety.

	detail::socket: added lots of system functionality
	We have a notion of "sockaddr", scatter/gather i/o, connection-less i/o,
	and a way to create sockets that are bound to a specific endpoint.

	Moved sendmsg() code into socket class.

	system_error: cosmetic improvement

	socket: added nested address class

	dropped obsolete files

	dispatch-test: An alternative to reset()ing the socket pointer is to reset hand handler functor. Doing so will delete the only reference to the object, thus running the destructor.

	Added session timeouts to the echo handler.

	Updated tests to cover new timeout class.

	schedule::cancel(): don't mess around with iterators if the map is empty

	schedule: added timeout class

	Updated copyright header.

	todo: updated state of afairs

	test: use header-only version of Boost.Test

	configure: updated ADNS checks

	adns: take advantage of adns_qf_none.

	todo: updated

	epoll: dropped reference to boost's system_error.

	Dropped leftovers from testing.

	Improved autoconf process quite a bit.

2008-05-01  Peter Simons  <simons@cryp.to>

	Improved code structure.

	Imported macros from autoconf archive.

	Deleted obsolete files.

2008-04-30  Peter Simons  <simons@cryp.to>

	Build html documentation and ship it in the release archive.

	ignore release archives

	configure: print neat overview before exiting

2008-04-29  Peter Simons  <simons@cryp.to>

	added documentation stubs

	doxygen: fine-tune output

	Added files required by automake in GNU mode.

	Makefile: added doc directory

	The config header mechanism sucks because it clutters everything with ambiguous defines. Instead, the configure script uses the standard replacement mechanism to create config.hpp now. We generate an auxiliary file build-aux/config.h for no reason other than getting rid of all the @DEFS@ crap on the compilation command line.

	Release this code under LGPLv3. Use of ADNS pretty much dictates that.

	Added documentation stubs.

	Adapted test to new include path.

	Added documentation stubs.

	iovec: added header that gives portable access to this system structure.

	This is a generated file now.

	Moved obsolete code out of the include directory.

	doc: activated doxygen

	todo: document allocator problem

	resolver: make scheduler and dispatch types template parameters

	adns: renamed update() to run()
	Moved response delivery loop out of process_fd() and into update(),
	which, by the way, was renamed to run(). Arguably, delivering the
	events in process_fd() is fine, but then the loop would need to
	be run in occasion of timeouts as well. The way it is now, events
	are delivered in run() and the i/o callbacks merely update ADNS'
	internal state.

	dispatch: split run() method into run() and wait()
	Event handlers cannot be run directly after returning from wait()
	because the system time is no longer up-to-date. By providing two
	methods, the user has the chance to run timer::update().

	Also, dispatch now uses protected inheritance from demux to hide
	internal functions like pop_event().

	adns: bugfixes
	update() didn't cancel the timeout if the query map was empty.

	adns returns timeouts in milliseconds. Converting that value to
	seconds simply by dividing by 100 is too simple, however, because
	995 millisecond timeout will end up being "0" seconds. Instead,
	timeout is now rounded up to the next full second.

	Don't call update() from inside process_fd(). The function is too
	expensive.

	resolver test: fixed PTR lookup

	socket: improved logging
	When a socket is destructed, the log message will now show whether the
	socket will be closed too.

	demux: define operator<< for socket::event_set

	added todo

	Implemented basic DNS resolver. Added fancy --enable switches to configure.

	Use hand-written config.h.in.

	Imported from autoconf archive.

	Added missing seconds_t typedef.

	Needs to include config.h.

	Added Makefile.am for installing and distributing our headers.

	document problem in run() logic

	cosmetic

	cosmetit

2008-04-28  Peter Simons  <simons@cryp.to>

	Added proper autoconf-generated config.hpp header.

2008-04-28  Peter Simons  <simons@research.cryp.to>

	Renamed probe to dispatch.

	Verify that construction of an invalid socket throws.

	Cosmetic.

	Updated todo.

	Dropped obsolete file.

2008-04-27  Peter Simons  <simons@cryp.to>

	ioxx::socket no longer has an "invalid" state.
	An invalid socket can be readily emulated by using a pointer to a socket.
	This change greatly simplifies the code because none of our classes need to
	worry about providing swap() or reset() methods; instead the various pointer
	classes do that for us.

	Updated todo.

	Added demux::context() method to obtain a demux reference from demux::socket.
	With this call, probe::socket no longer needs to store a reference to probe.
	An upcast succeeds thanks to ISO standard section 5.2.9, paragraph 5.

2008-04-26  Peter Simons  <simons@cryp.to>

	Use concept check and archetype for specifying demuxer.

	Added seconds_t.

	Improved test suite.

	Added poll demuxer.

	Allow demux::select to be constructed without specifying an event_set.

	Converted poll() demuxer to new api.

	Added not_ewould_block predicate that's needed for read() and write().

	Updated todo file.

	Added a proper socket class have demux::socket derive from it.

	Re-wrote probe and its test case to use the new demuxer interface.

	Fixed test case.

	Added free read(), write(), and nonblocking() functions.

	Added throw_errno_if() overload that derives the return type.

	Choose a default_demux based on autoconf.

	demux: give access to the socket type

	Replaced by improved demux implementations.

2008-04-25  Peter Simons  <simons@cryp.to>

	Re-implemented what used to be "probe implementations" as proper stand-alone de-multiplexer classes. poll() is still missing though.

	Adedd a todo file.

	poll-probe: allowed allocators to be set as template parameters

	Implemented poll(2)-based probe driver.

	Prefer '-' over '_' in file names.

	Split probe class into a generic facade and a system-specific driver. As of now, we have drivers for epoll(7) and select(2).

	Dropped unnecessary <iostream> header.

	basic_timer_test: removed broken test case

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

	Templatized probe class over handler type and allocator.

	Use new error wrapper.

	Removed redundant definitions of throw_errno_if{,_minus1}_() that return void. We're not Haskell, in C++ return codes can be ignored at will. Added a new overload, however, that derives the return type automatically.

	Updated file list for maintainer-clean target.

	Updated file list for maintainer-clean target.

	select: Iterating over the handler map is dangerous because a suicide unset() would invalidate our iterator. Hmpf. Instead, we iterate from socket 0 to 'nfds' and perform a new lookup every time. It's slow, but works reliably.
	epoll: Instead of parsing only the event mask in to_events(), the
	new function make_event() will create the entire epoll_event
	struct. This change simplifies the source code a bit.

	Added test case to verify that an empty probe can be used like sleep().

	Improved macros to use caching.

	Fixed implementation of select()-based probe.

	Added IOXX_TRACE_MSG() macros.

	cosmetic

2008-04-23  Peter Simons  <simons@cryp.to>

	Fixed bug in acceptor code. Added lots of debug output.

	cosmetic

	Implemented (untested) support for select(2).

	Implemented probe, simple acceptor and a simple echo test handler.

2008-04-22  Peter Simons  <simons@cryp.to>

	cosmetic

	Use throw_errno_if_minus1_ with hard-coded int return type.

	throw_errno_if: don't underflow max_retries throw_errno_if_minus1_: add overload with hard-coded int return type

	Prefer BOOST_REQUIRE over BOOST_CHECK.

2008-04-21  Peter Simons  <simons@cryp.to>

	Added experimental probe implementation.

	Include sub-headers.

	Moved scheduler implementation into the include directory. Renamed timeout.cpp test program to scheduler.cpp. Dropped obsolete type/time.hpp header.

	Added test case that instantiates the scheduler with a customized task type.

	Templatized scheduler class over task and allocator type. Renamed system_time to timer.

	Ignore generated library files.

2008-04-20  Peter Simons  <simons@cryp.to>

	Ignore test programs.

	Ignore *.o object files.

	Implemented a pretty neat task scheduler.

	Link boost_unit_test_framework. Needs more work.

	Neat helpers to deal with EINTR errors and throw all other system error conditions.

2008-04-18  Peter Simons  <simons@cryp.to>

	build: configured libioxx and regression tests

	link with boost_system

	build: configure subdirs

	git: ignore config.cache

	The various boost macros just don't work. I'll probably trust the user to specify the appropriate settings explicitly.

2008-04-17  Peter Simons  <simons@cryp.to>

	build: find and use Boost.Thread as our main vehicle to multi-threading

2008-04-14  Peter Simons  <simons@cryp.to>

	Drop bjam build in favor of the autotools.

	Created an `include' hierarchy.

	Created a `doc' hierarchy.

2007-11-18  Peter Simons  <simons@cryp.to>

	Updated header path.

	Re-implemented in postmaster/src.

2007-10-16  Peter Simons  <simons@cryp.to>

	cosmetic

	dropped legacy code

	Updated socket design experiment.

	cosmetic

2007-08-05  Peter Simons  <simons@cryp.to>

	build: forward jam from ioxx/type

	probe.hpp: doesn't need ioxx/types/time.hpp

	legacy: dropped most of the code weak-socket: added close(), read(), and write()

2007-07-23  Peter Simons  <simons@cryp.to>

	Moved probe into socket instead of the other way round.

	Fixed comment.

2007-06-07  Peter Simons  <simons@cryp.to>

	Drop unused files.

	Update copyright header.

2007-05-27  Peter Simons  <simons@cryp.to>

	Solved: passing probe and socket to callbacks by reference is the way.

	probe test works with timeouts.

	Completed refactoring.

	A timeout scheduler.

	A system timer.

	Lots of useful macros, yet unused.

	Moved system_error to its own header.

	Refactored.
	A monolithic system.hpp is too unwieldy.

2007-05-24  Peter Simons  <simons@cryp.to>

	Improved documentation.

2007-05-23  Peter Simons  <simons@cryp.to>

	Configured doxygen.

	Ignore doxygen output

	An exception terminates the handler too.

	Improved debug output.

	Improved logging. Destroy echo handler ASAP.

	probe::socket needed a shutdown() method.
	Now the test handles strange errors on input and output
	correctly. The echo handler became simpler by adding shutdown
	too.

	Storing the socket in Poll::context was unnecessary.

2007-05-22  Peter Simons  <simons@cryp.to>

	Cosmetic.

	Moved hot_fd into a separate header.

2007-05-21  Peter Simons  <simons@cryp.to>

	Probe runs the echo test successfully.

	Refactoring.
	Types in ioxx::system are no longer exposed in the API.
	system::socket is weak_socket now. ioxx::socket is now
	probe::socket.

	Test still fails.

	Moved probe test case into place from legacy.

	Probe is back.

	Came up with a nice, abstract interface to probed sockets.

2007-05-20  Peter Simons  <simons@cryp.to>

	Replaced weak_socket by system::socket.

	cosmetic

	Rest of the previous move.

	Renamed os hierarchy (ioxx::native) to system (ioxx::system).

	moved old files into a subdirectory

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

	boost::system_system_error is no longer needed.

	read() and write() now return a scatter_iterator. got rid of boost_system dependency.

	Functions that modify their values in place no longer return a value reference.

	Added paged_advance().

	Implemented read() and write() using recvmsg() and sendmsg().

	Implemented scatter i/o.

	Added system_error class based on Boost.

	build: we need <use>/boost

	Refined memory and iovec code.

	Ignore bjam objects.

	The UNUSED value is unnecessary.

2007-02-18  Peter Simons  <simons@cryp.to>

	initial version
