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.