== 12.11.1


== 12.11.0

- Removed dependency on non-standard-library module nose. Now, all the unit
  tests rely on the unittest module (standard library).

== 12.7.0

- Changed crawler to save, at most, one address per /24 subnet in
  "bootstrap.backup". This should give some protection against an adversary
  running many malicious nodes on a subnet. It should also add robustness.
  This also applies to bootstrap.py.
- Bootstrap simplified (moved from routing_manager to controller)
- controller.get_peers simplified (pending_lookups is no longer needed)
- Rename bootstrap.main > bootstrap_stable (nodes we run are called "stable")
  bootstrap.backup > bootstrap_unstable (others nodes are considered "unstable"
- Replaced pymdht.status with a better overlay bootstrapping mechanism
  (see bootstrap.py for details).
- Removed state.py (replaced by bootstrap.py). Routing table information (in a
  similar format as state.py output) is now available at
  pymdht.print_routing_table()
- ui/cli (default interface in run_pymdht_node.py) has two new commands: 'r'
  (routing table stats) and 'rr' (detailed info).

== 12.6.2

- clean up bootstrap data structure when bootstrap is done

== 12.6.0

- bugfix: a call to on_error in controller.py
- limitation of pending get_peers lookups (controller)
- limitation of number of channels in swift_tracker.py
- off-line mode: routing table will stop expelling nodes when connection is lost
- major bugfix: memory leak in core/querier.py in optimization mode (python -O)

== 12.5.0

- removed telnet API. Replaced with swift/ppsp API (see core/swift_tracker.py)

== 12.2.2

- bugfix: bootstrap check crash on error message received.

== 12.2.0

- bootstrap_mode available to run a node as bootstrap node. It ignores some
  queries to avoid being added to too many routing tables.
- telnet-like API available with option --telnet-port (see ui/telnet_api.txt)
- Module identifier simplified and cleaned up.
- Added some crawling scripts to run experiments
- IncomingMsg attributed listed for clarity
- Log file is now limited in size (10 MB in normal mode, 1 GB in debug)

== 12.1.0

- Message is now a factory. Now 'private_dht_name' is a parameter instead of
  an evil global variable
- Lookup cache
- Security: avoid multiple routing table entries with the same IP
- README.txt replaced by README.rst
- Added support for experiment plugin
- Improved graphical visualization

== 11.8.2

- Bugfix: there was no error msg handler in exp_plugin_template.py

== 11.8.1

- Moved all user interface code to ui directory
- Integrated all user interfaces and options in interactive_dht.py
- pymdht_daemon.py is now deprecated (functionality moved to
  interactive_dht.py)
- user can now choose a nodeId (node-id option) or choose a nodeId close to
  some identifier (node-id + log-distance)

== 11.8.0

- Refined all code related to bootstrapping.
- Added GUI code (from Shariq)

=== 11.07

- Profiling toolkit integrated (profiler directory)

- Many nodes to bootstrap into the overlay. bootstrap.main contains nodes
controlled by us and bootstrap.backup contains nodes we have seen alive for a
long time.

- The default path is now ~/.pymdht. Deleting that directory cleans any state
(it would be as if the code never run before on the machine).  

- TODO: some plugins do not work, need to clean up or fix them

- TODO: if connectivity is lost for a long enough period (1 hour?), all nodes
will be expelled from the routing table. Need to stop expelling nodes when n
timeouts in a row.

=== v1.0, 31 Jan 2011 -- Initial release with proper documentation
