9 February 2018: dht-0.25 * Made the sendto function used by the library customisable. This is an incompatible change. * Rely on the caller to mark the sockets as nonblocking. This is an incompatible change. * Report duplicate searches reliably. Thanks to Greg Hazel. * Increased the number of in-flight queries to 4. Thanks to Greg Hazel. * Implement variable-size buckets (between 8 and 128). Thanks to Greg Hazel. * Improved search speed during bootstrap. Thanks to Greg Hazel. * Fixed a bug in the parser that would spuriously insert peers with port number 1. Thanks to Carl Reinke. * Added support for the implied_port parameter of the announce_peer message. Thanks to Carl Reinke for pointing out the omission. 18 May 2015: dht-0.24 * Fixed off-by-one error that dropped find_nodes responses with exactly 16 nodes. While forbidden by BEP-5, this is apparently what the good folks at BitTorrent are doing. Thanks to Tomas Brod. 15 May 2015: dht-0.23 * Changed the limit on the number of nodes in replies to 16. Thanks to Tomas Brod. * Fixed a memory leak when initialisation fails. Thanks to 3null. * Fixed a Y2038 issue. Thanks to Gwiz65. 3 May 2014: dht-0.22 * INCOMPATIBLE CHANGE: the callback now takes const arguments. * Consult the local storage when performing a search, which should make bootstrapping of tiny DHTs easier. Note that we're still not performing local stores, since that would require knowing our IP address. * Don't attempt to flush the debug stream if debugging is disabled. This appears to work around a bug in Transmission. 25 July 2011: dht-0.21 * Blacklisting support. 7 July 2011: dht-0.20 * Fix compilation on systems that have memmem but don't define HAVE_MEMMEM. 30 April 2011: dht-0.19 * Fix incorrect parsing of announces. Thanks to cjdelisle. * Relax rate limiting slightly. 20 January 2011: dht-0.18 * Fix a bug that could cause parse_message to enter an infinite loop on overflow. Thanks to Jordan Lee. 9 January 2011: dht-0.17: * Fix a bug that prevented calling dht_init after dht_uninit. * Remove the "dofree" parameter to dht_uninit. 23 December 2010: dht-0.16: * Change the interface to allow sharing of the UDP socket e.g. with uTP. 1 July 2010: dht-0.15 * Port to Windows, for the needs of Transmission. 25 March 2010: dht-0.14 * Fixed ordering of entries in parameter dictionaries. 15 December 2009: dht-0.13 * Implemented protection against incorrect addresses in the DHT. * Tweaked neighborhood maintenance to wake up less often. 11 December 2009: dht-0.12 * Fixed slightly incorrect formatting of DHT messages. * Fixed incorrect debugging message. 22 November 2009: dht-0.11 * Implemented IPv6 support (BEP-32). * Fixed a bug which could cause us to never mark a search as finished. * Fixed a bug that could cause us to send incomplete lists in response to find_nodes. * Limit the number of hashes that we're willing to track. * Made bucket maintenance slightly more aggressive. * Produce on-the-wire error messages to give a hint to the other side. * Added a bunch of options to dht-example to make it useful as a bootstrap node. * Send version "JC\0\0" when using dht-example. 18 October 2009: dht-0.10 * Send nodes even when sending values. This is a violation of the protocol, but I have been assured that it doesn't break any deployed implementation. This is also what both libtorrent and uTorrent do. * Give up immediately on a search peer when no token was provided. This is a very reasonable extension to the protocol, and certainly doesn't break anything. * Parse heterogeneous values lists correctly. This is mandated by BEP 32. 20 September 2009: dht-0.9 * Fixed incorrect computation of number of nodes. * Made the initial bucket split eagerly (speeds up bootstrapping). * Fixed initial filling of search buckets (speeds up searches). 28 July 2009: dht-0.8 * Fixed a crash when expiring the first search on the list. * Fixed freeing of the search list when uniniting with dofree = 1. 24 June 2009: dht-0.7 * Removed the fixed limit on the number of concurrent searches, we now use a linked list. * Fixed build on FreeBSD (thanks to Humihara and Charles Kerr). 22 May 2009: dht-0.6 * Fixed a buffer overflow (when reading) in parse_message. * Fixed slightly inacurrate metric computation when searching. * Removed a slightly inaccurate shortcut when responding to find_nodes. * Relaxed the rate-limiting parameters to 4 requests per second. 19 May 2009: dht-0.5 * Made reading of /dev/urandom a function provided by the user. * Implemented the ``v'' extension that identifies node implementations. 18 May 2009: dht-0.4 * Fixed the handling of tokens in announce_peer messages. * Implemented backtracking during search when nodes turn out to be dead. 17 May 2009: dht-0.3 * Fixed a number of incorrectly formatted messages. * Changed reply to find_peers to spread the load more uniformly. * Fixed a bug that could cause premature splitting. * Implemented rate limiting. * Changed some time constants to be less chatty. * When determining if a bucket is fresh enough, we now only take replies into account. * dht_get_nodes now returns nodes starting with our own bucket. * Tweaked the memory allocation strategy for stored peers. 17 May 2009: dht-0.2 * Fixed a crash in dht_uninit. * Added support for saving the list of known-good nodes. * Changed the interface of dht_nodes to provide the number of nodes that recently sent incoming requests. 13 May 2009: dht-0.1 * Initial public release.