$Id: history.txt,v 1.422 2006/02/27 14:05:41 jrandom Exp $

* 2006-02-27  0.6.1.12 released

2006-02-27  jrandom
    * Adjust the jbigi.jar to use the athlon-optimized jbigi on windows/amd64
      machines, rather than the generic jbigi (until we have an athlon64
      optimized version)

2006-02-26  jrandom
    * Switch from the bouncycastle to the gnu-crypto implementation for
      SHA256, as benchmarks show a 10-30% speedup.
    * Removed some unnecessary object caches
    * Don't close i2psnark streams prematurely

2006-02-25  jrandom
    * Made the Syndie permalinks in the thread view point to the blog view
    * Disabled TCP again (since the live net seems to be doing well w/out it)
    * Fix the message time on inbound SSU establishment (thanks zzz!)
    * Don't be so aggressive with parallel tunnel creation when a tunnel pool
      just starts up

2006-02-24  jrandom
    * Rounding calculation cleanup in the stats, and avoid an uncontested
      mutex (thanks ripple!)
    * SSU handshake cleanup to help force incompatible peers to stop nagging
      us by both not giving them an updated reference to us and by dropping
      future handshake packets from them.

2006-02-23  jrandom
    * Increase the SSU retransmit ceiling (for slow links)
    * Estimate the sender's SSU MTU (to help see if we agree)

2006-02-22  jrandom
    * Fix to properly profile tunnel joins (thanks Ragnarok, frosk, et al!)
    * More aggressive poor-man's PMTU, allowing larger MTUs on less reliable
      links
    * Further class validator refactorings

2006-02-22  jrandom
    * Handle a rare race under high bandwidth situations in the SSU transport
    * Minor refactoring so we don't confuse sun's 1.6.0-b2 validator

2006-02-21  Complication
    * Reactivate TCP tranport by default, in addition to re-allowing

* 2006-02-21  0.6.1.11 released

2006-02-21  jrandom
    * Throttle the outbound SSU establishment queue, so it doesn't fill up the
      heap when backlogged (and so that the messages queued up on it don't sit
      there forever)
    * Further SSU memory cleanup
    * Clean up the address regeneration code so it knows when to rebuild the
      local info more precisely.

2006-02-20  jrandom
    * Properly enable TCP this time (oops)
    * Deal with multiple form handlers on the same page in the console without
      being too annoying (thanks blubb and bd_!)

2006-02-20  jrandom
    * Reenable the TCP transport as a fallback (we'll continue to muck with
      debugging SSU-only elsewhere)

2006-02-20  jrandom
    * Major SSU and router tuning to reduce contention, memory usage, and GC
      churn.  There are still issues to be worked out, but this should be a
      substantial improvement.
    * Modified the optional netDb harvester task to support choosing whether
      to use (non-anonymous) direct connections or (anonymous) exploratory
      tunnels to do the harvesting.  Harvesting itself is enabled via the
      advanced config "netDb.shouldHarvest=true" (default is false) and the
      connection type can be chosen via "netDb.harvestDirectly=false" (default
      is false).

2006-02-19  dust
    * Added pruning of suckers history (it used to grow indefinitely).

2006-02-19  jrandom
    * Moved the current net's reseed URL to a different location than where
      the old net looks (dev.i2p.net/i2pdb2/ vs .../i2pdb/)
    * More aggressively expire inbound messages (on receive, not just on send)
    * Add in a hook for breaking backwards compatibility in the SSU wire
      protocol directly by including a version as part of the handshake.  The
      version is currently set to 0, however, so the wire protocol from this
      build is compatible with all earlier SSU implementations.
    * Increased the number of complete message readers, cutting down
      substantially on the delay processing inbound messages.
    * Delete the message history file on startup
    * Reworked the restart/shutdown display on the console (thanks bd_!)

2006-02-18  jrandom
    * Migrate the outbound packets from a central component to the individual
      per-peer components, substantially cutting down on lock contention when
      dealing with higher degrees.
    * Load balance the outbound SSU transfers evenly across peers, rather than
      across messages (so peers with few messages won't be starved by peers
      with many).
    * Reduce the frequency of router info rebuilds (thanks bar!)

2006-02-18  jrandom
    * Add a new AIMD throttle in SSU to control the number of concurrent
      messages being sent to a given peer, in addition to the throttle on the
      number of concurrent bytes to that peer.
    * Adjust the existing SSU outbound queue to throttle based on the queue's
      lag, not an arbitrary number of packets.

2006-02-17  jrandom
    * Properly fix the build request queue throttling, using queue age to
      detect congestion, rather than queue size.

2006-02-17  jrandom
    * Disable the message history log file by default (duh - feel free to
      delete messageHistory.txt after upgrading.  thanks deathfatty!)
    * Limit the size of the inbound tunnel build request queue so we don't
      get an insane backlog of requests that we're bound to reject, and adjust
      the queue processing so we keep on churning through them when we've got
      a backlog.
    * Small fixes for the multiuser syndie operation (thanks Complication!)
    * Renamed modified PRNG classes that were imported from gnu-crypto so we
      don't conflict with JVMs using that as a JCE provider (thanks blx!)

* 2006-02-16  0.6.1.10 released

2006-02-16  jrandom
    * Add a new toggle to the web config to enable/disable the load testing

2006-02-16  jrandom
    * Dropped much of the abandonware from the apps/ directory

2006-02-16  jrandom
    * Bugfix to the I2PTunnel web config to properly accept i2cp port settings
    * Initial sucker refactoring to simplify reuse of the html parsing
    * Beginnings of hooks to push imported rss/atom out to remote syndie
      archives automatically (though not enabled currently)
    * Further SSU peer test cleanup

2006-02-15  jrandom
    * Add in per-blog RSS feeds to Syndie
    * Upgraded sucker's ROME dependency to 0.8, bundling sucked enclosures
      with the posts, marking additional attachments as Media RSS enclosures
      (http://search.yahoo.com/mrss/), since RSS only supports one enclosure
      per item.
    * Don't allow the default syndie user to be set to something invalid if
      its in single user mode.

2006-02-15  jrandom
    * Merged in the i2p_0_6_1_10_PRE branch to the trunk, so CVS HEAD is no
      longer backwards compatible (and should not be used until 0.6.1.1 is
      out)

2006-02-14  jrandom
    * Syndie ui bugfixes (thanks all!)

2006-02-13  jrandom
    * Use the current directory for some temporary I2PSnark files, rather than
      the OS default temp dir (thanks anon!)
    * Increase the base streaming lib window size (still shrinks to 1 on
      retransmission though, of course)
    * Fixed the I2PTunnel newlines to work with lighthttpd (thanks all!)
    * Implement fast retransmit in the streaming lib (fires at most once per
      packet), and increased the default ack delay to 2 seconds (from .5s)
    * Don't ask for garlic level message acks for end to end messages unless
      they're useful (e.g. to ack session tags)

2006-02-12  cervantes
    * Use a different santisation method for some SML attributes
    * Make router console update config save button actually save.
    * Fix console bandwidth limiter burst rate dropdowns, so the display
      relates to what is saved in the config.
    
2006-02-12  cervantes
    * SML is now stricter in it's formatting (attributes should only use 
      double quotes instead of being allowed to mix with singles).
    * Using apostrophes in SML attributes will no longer invalidate the tag.
    * Some instances of [blog] tag description were not being displayed
      correctly.

2006-02-12  jrandom
    * Further SSU peer test throttling
    * Put the most common router console features on the main index page too

2006-02-11  jrandom
    * Be more careful about SSU peer test floods

2006-02-09  jrandom
    * Adjusted one of the SSU timeouts so we don't drop peers as easily (duh)

2006-02-08  jrandom
    * Added transparent support for VIA C3 CPUs to jbigi (thanks Nekow42), and
      bundled a precompiled libjbigi.so in the jbigi.jar
    * Cleaned up the synchronization for some SSU packet handling code
    * Allow explicit rejection of more lagged tunnel build requests, rather
      than dropping them outright
    * Use lighter load testing

2006-02-07  jrandom
    * Handle HTTP headers without any values (thanks Sugadude!)
    * Don't show the option to make Syndie multiuser, since very few people
      need it, and multiuser mode is a lot more complex to use.  Geeks can
      enable it by adding "syndie.singleUser=false" to syndie/syndie.config
      (or in the router's advanced config, for the embedded Syndie)
    * When a peer rejects participation in a tunnel, they mean it (duh)
    * Decrease tunnel test timeout period to 20s (a 40s lag is insane)
    * Remove a throttle on the size of the SSU active outbound pool, since
      it was essentially arbitrary
    * Use a more appropriate SSU bloom filter size
    * Don't "proactively" drop SSU connections if we have partially received
      inbound messages (duh)
    * Migrate most of the message state across SSU connection reestablishment

2006-02-06  jrandom
    * Reduce the SSU retransmit timeout range, and increase the number of ACKs
      piggybacked

2006-02-05  jrandom
    * Experiment with short exponents for DH/ElGamal, using a 226bit x instead
      of a 2048bit x, as reports suggest that size is sufficient for 2048bit
      DH/ElGamal when using safe primes (see KeyGenerator.java for references)
    * Enable the messageHistory.txt by default, for debugging

2006-02-05  jrandom
    * Substantial bugfix for the duplicate message detection in the transport
      layer
    * Handle tunnel build responses ASAP, rather than queueing them up to wait
      in line (processing them is really fast - just a few AES loops)
    * Don't bother handling build requests that we have queued up for a while
      locally, as the requestor will have timed it out anyway (perhaps we
      should reply regardless, but with a backoff instead?)

2006-02-04  jrandom
    * Further tunnel test cleanup and disabling of the old tunnel creation
      code

2006-02-04  jrandom
    * Clean up and reenable the tunnel testing for the new tunnel system.

2006-02-04  jrandom
    * Don't cache the archive.txt in syndie when fetching it through the web
      interface.
    * Logging updates

2006-02-03  jrandom
    * Added further replay prevention on the tunnel build requests
    * More aggressive streaming lib closing on reset

2006-02-03  jrandom
    * More aggressive refusal of peers from the wrong network (oops)

2006-02-01  jrandom
    * Instruct the router to reseed against a new URL, for migration purposes:
      http://dev.i2p.net/i2pdb2/
    * Aggressive error handling during UDP packet creation (thanks cervantes)

2006-02-01  jrandom
    * Fix the new tunnel creation crypto, including the addition of a 4 byte
      "next message ID" to the encrypted request structure in the spec.
    * Backwards incompatible change, using the new tunnel creation crypto, the
      fixed MD5 HMAC size, and a new network ID (to prevent cross pollination
      with the old incompatible network).
    * Reworked the leaseSet request process to handle a race condition
    * Disable the TCP transport
    * Run four separate threads on the job queue to cut down on job lag

2006-01-28  jrandom
    * Removed a race that could show up in leaseSet requesting with the new
      tunnel building process

2006-01-25  jrandom
    * Run the peer profile coalescing/reorganization outside the job queue
      (on one of the timers), to cut down on some job queue congestion.  Also,
      trim old profiles while running, not just when starting up.
    * Slightly more sane intra-floodfill-node netDb activity (only flood new
      entries)
    * Workaround in the I2PTunnelHTTPServer for some bad requests (though the
      source of the bug is not yet addressed)
    * Better I2PSnark reconnection handling
    * Further cleanup in the new tunnel build process
    * Make sure we expire old participants properly
    * Remove much of the transient overload throttling (it wasn't using a good
      metric)

2006-01-25  dust
    * Fix IRC client proxy to use ISO-8859-1.

2006-01-22  jrandom
    * New tunnel build process - does not use the new crypto or new peer
      selection strategies.  However, it does drop the fallback tunnel
      procedure, except for tunnels who are configured to allow them, or for
      the exploratory pool during bootstrapping or after a catastrophic
      failure.  This new process prefers to fail rather than use too-short
      tunnels, so while it can do some pretty aggressive tunnel rebuilding,
      it may expose more tunnel failures to the user.
    * Always prefer normal tunnels to fallback tunnels.
    * Potential fix for a bug while changing i2cp settings on I2PSnark (thanks
      bar!)
    * Do all of the netDb entry writing in a separate thread, avoiding
      duplicates and batching them up.

2006-01-19  Complication
    * Explain better where eepsite's destkey can be found

2006-01-18  cervantes
    * Add title attributes to all external links in Syndie, so we can rollover
      and quickly see if it's worth clicking on.
    * Fixed a minor compiler warning.

2006-01-17  jrandom
    * First pass of the new tunnel creation crypto, specified in the new 
      router/doc/tunnel-alt-creation.html (referenced in the current
      router/doc/tunnel-alt.html).  It isn't actually used anywhere yet, other
      than in the test code, but the code verifies the technical viability, so
      further scrutiny would be warranted.

2006-01-16  cervantes
    * Dragged I2P kicking and screaming into 2006 (Oops)

2006-01-14  cervantes
    * Removed entirely misleading memory status from the console summary.
	
2006-01-13  cervantes
    * Further Syndie layout hardening and typeface balancing.

* 2006-01-12  0.6.1.9 released

2006-01-12  jrandom
    * Only create the loadtest.log if requested to do so (thanks zzz!)
    * Make sure we cleanly take into consideration the appropriate data
      points when filtering out duplicate messages in the message validator,
      and report the right bloom filter false positives rate (not used for
      anything except debugging)

2006-01-12  cervantes
    * Syndie CSS tweaks to removed some redundant declarations, improve font
      scaling and layout robustness. Improved cross browser compatibility
      (in other words "kicked IE"). Tightened the look of the blog template
      a little.

2006-01-11  Complication
    * CSS comment fixes

2006-01-11  jrandom
    * Include the attachments/blogs/etc for comments on the blog view
    * Syndie HTML fixes (thanks cervantes!)
    * Make sure we fully reset the objects going into our cache before we
      reuse them (thanks zzz!)

2006-01-10  jrandom
    * Added the per-post list of attachments/blogs/etc to the blog view in
      Syndie (though this does not yet include comments or some further
      refinements)
    * Have the I2P shortcut launch i2p.exe instead of i2psvc.exe on windows,
      removing the dox box (though also removes the restart functionality...)
    * Give the i2p.exe the correct java.library.path to support the systray
      dll (thanks Bobcat, Sugadude, anon!)

2006-01-09  jrandom
    * Removed a longstanding bug that had caused unnecessary router identity
      churn due to clock skew
    * Temporarily sanity check within the streaming lib for long pending
      writes
    * Added support for a blog-wide logo to Syndie, and automated the pushing
      of updated extended blog info data along side the metadata.

2006-01-09  jrandom
    * Bugfix for a rare SSU error (thanks cervantes!)
    * More progress on the blog interface, allowing customizable blog-wide
      links.

2006-01-08  jrandom
    * First pass of the new blog interface, though without much of the useful
      customization features (coming soon)

2006-01-04  jrandom
    * Rather than profile individual tunnels for throughput over their
      lifetime, do so at 1 minute intervals (allowing less frequently active
      tunnels to be more fairly measured).
    * Run the live tunnel load test across two tunnels at a time, by default.
      The load test runs for a random period from 90s to the tunnel lifetime,
      self paced.  This should help gathering data for profiling peers that
      are in exploratory tunnels.

2006-01-03  jrandom
    * Calculate the overall peer throughput across the 3 fastest one minute
      tunnel throughput values, rather than the single fastest throughput.
    * Degrade the profiled throughput data over time (cutting the profiled
      peaks in half once a day, on average)
    * Enable yet another new speed calculation for profiling peers, using the
      peak throughput from individual tunnels that a peer is participating in,
      rather than across all tunnels they are participating in.  This helps
      gather a fairer peer throughput measurement, since it won't allow a slow
      high capacity peer seem to have a higher throughput (pushing a little
      data across many tunnels at once, as opposed to lots of data across a
      single tunnel).  This degrades over time like the other.
    * Add basic OS/2 support to the jbigi code (though we do not bundle a
      precompiled OS/2 library)

2006-01-01  jrandom
    * Disable multifile torrent creation in I2PSnark's web UI for the moment
      (though it can still seed and participate in multifile swarms)
    * Enable a new speed calculation for profiling peers, using their peak 
      1 minute average tunnel throughput as their speed.

2005-12-31  jrandom
    * Include a simple torrent creator in the I2PSnark web UI
    * Further streaming lib closing improvements
    * Refactored the load test components to run off live tunnels (though,
      still not safe for normal/anonymous load testing)

2005-12-30  jrandom
    * Close streams more gracefully

2005-12-30  jrandom
    * Small streaming lib bugfixes for the modified timeouts
    * Minor Syndie/Sucker RSS html fix
    * Small synchronization fix in I2PSnark (thanks fsm!)

2005-12-30  jrandom
    * Replaced the bundled linux jcpuid (written in C++) with scintilla's
      jcpuid (written in C), removing the libg++.so.5 dependency that has bit
      some distros (e.g. mandriva)

2005-12-29  jrandom
    * Minor fix to the new ERR-ClockSkew to deal with people whose clocks are
      actually correct

2005-12-27  jrandom
    * Add a new Status: line on the router console - "ERR-ClockSkew", in case
      the clock is too skewed to do anything useful (check the year and month,
      not just the hour and minute).
    * Fixed the read/write timeouts in the streaming lib (so that it actually
      honors them now)
    * Minor I2PSnark cleanups (no read timeout, more careful shutdown and
      torrent closing)
    * Handle an oddball tunnel creation failure (thanks Xunk)

2005-12-26  Complication
    * Fix some integer typecasting in I2PSnark (caused >2GB torrents to fail)
    * HTML readability cosmetics on "Peers" page

* 2005-12-22  0.6.1.8 released

2005-12-22  jrandom
    * Bundle the standalone I2PSnark launcher in the installer and update
      process (launch as "java -jar launch-i2psnark.jar", viewing the 
      interface on http://localhost:8002/)
    * Don't autostart swarming torrents by default so that you can run a
      standalone I2PSnark from the I2P install dir and not have the embedded
      I2PSnark autolaunch the torrents that the standalone instance is running
    * Fixed a rare streaming lib bug that could let a blocking call wait
      forever.

2005-12-22  jrandom
    * Cleaned up some buffer synchronization issues in I2PSnark that could
      cause blockage.

2005-12-21  jrandom
    * Adjusted I2PSnark's usage of the streaming lib (tweaking it for BT's
      behavior)
    * Fixed the I2PSnark bug that would lose track of live peers

2005-12-20  jrandom
    * Enabled the control in I2PSnark to toggle whether torrents should be
      started automatically or not
    * Hopefully finished the last hook to close down torrents completely when
      they're stopped.

2005-12-19  jrandom
    * Fix for old Syndie blog bookmarks (thanks Complication!)
    * Fix for I2PSnark to accept incoming connections again (oops)
    * Randomize the order that peers from the tracker are contacted

2005-12-19  jrandom
    * I2PSnark logging, disconnect old inactive peers rather than new ones,
      memory usage reduction, better OOM handling, and a shared connection
      acceptor.
    * Cleaned up the Syndie blog page and the resulting filters (viewing a
      blog from the blog page shows threads started by the selected author,
      not those that they merely participate in)

2005-12-18  jrandom
    * Added a standalone runner for the I2PSnark web ui (build with the
      command "ant i2psnark", unzip i2psnark-standalone.zip somewhere, run
      with "java -jar launch-i2psnark.jar", and go to http://localhost:8002/).
    * Further I2PSnark error handling

2005-12-17  jrandom
    * Let multiuser accounts authorize themselves to access the remote
      functionality again (thanks Ch0Hag!)
    * Adjust the JVM heap size to 128MB for new installs (existing users can
      accomplish this by editing wrapper.config, adding the line
      "wrapper.java.maxmemory=128", and then doing a full shutdown and startup
      of the router).  This is relevent for heavy usage of I2PSnark in the
      router console.

2005-12-17  jrandom
    * Use our faster SHA1, rather than the JVM's within I2PSnark, and let
      'piece' sizes grow larger than before.

2005-12-16  jrandom
    * Added some I2PSnark sanity checks, an OOMListener when running
      standalone, and a guard against keeping memory tied up indefinitely.
    * Sanity check on the watchdog (thanks zzz!)
    * Handle invalid HTTP requests in I2PTunnel a little better

2005-12-16  jrandom
    * Moved I2PSnark from using Threads to I2PThreads, so we handle OOMs
      properly (thanks Complication!)
    * More guards in I2PSnark for zany behavior (I2PSession recon w/ skew,
      b0rking in the DirMonitor, etc)

2005-12-16  jrandom
    * Try to run a torrent in readonly mode if we can't write to the file, and
      handle failures a little more gracefully (thanks polecat!)

2005-12-16  jrandom
    * Refuse torrents with too many files (128), avoiding ulimit errors.
    * Remove an fd leak in I2PSnark
    * Further I2PSnark web UI cleanup

2005-12-15  jrandom
    * Added a first pass to the I2PSnark web UI (see /i2psnark/)

2005-12-15  jrandom
    * Added multitorrent support to I2PSnark, accessible currently by running
      "i2psnark.jar --config i2psnark.config" (which may or may not exist).
      It then joins the swarm for any torrents in ./i2psnark/*.torrent, saving
      their data in that directory as well.  Removing the .torrent file stops
      participation, and it is currently set to seed indefinitely.  Completion
      is logged to the logger and standard output, with further UI interaction
      left to the (work in progress) web UI.

2005-12-14  jrandom
    * Fix to drop peer references when we shitlist people again (thanks zzz!)
    * Further I2PSnark fixes to deal with arbitrary torrent info attributes
      (thanks Complication!)

2005-12-13  zzz
    * Don't test tunnels expiring within 90 seconds
    * Defer Test Tunnel jobs if job lag too large
    * Use JobQueue.getMaxLag() rather than the jobQueue.jobLag stat to measure
      job lag for tunnel build backoff, allowing for more agile handling
      (since the stat is only updated once a minute)
    * Use tunnel length override if all tunnels are expiring within one
      minute.

2005-12-13  jrandom
    * Fixed I2PSnark's handling of some torrent files to deal with those
      created by Azureus and I2PRufus (it didn't know how to deal with
      additional meta info, such as path.utf-8 or name.utf-8).

2005-12-09  zzz
    * Create different strategies for exploratory tunnels (which are difficult
      to create) and client tunnels (which are much easier)
    * Gradually increase number of parallel build attempts as tunnel expiry
      nears.
    * Temporarily shorten attempted build tunnel length if builds using
      configured tunnel length are unsuccessful
    * React more aggressively to tunnel failure than routine tunnel
      replacement
    * Make tunnel creation times randomized - there is existing code to
      randomize the tunnels but it isn't effective due to the tunnel creation 
      strategy. Currently, most tunnels get built all at once, at about 2 1/2
      to 3 minutes before expiration. The patch fixes this by fixing the 
      randomization, and by changing the overlap time (with old tunnels) to a
      range of 2 to 4 minutes.
    * Reduce number of excess tunnels. Lots of excess tunnels get created due
      to overlapping calls. Just about anything generated a call which could
      build many tunnels all at once, even if tunnel building was already in
      process.
    * Miscellaneous router console enhancements

2005-12-08  jrandom
    * Minor bugfix in SSU for dealing with corrupt packets
    * Added some hooks for load testing

2005-12-07  jrandom
    * Added a first pass at a blog view in Syndie

2005-12-07  jrandom
    * Expand the thread we're viewing to its leaf
    * Bugfix on intraday ordering (children are always newer than parents)

2005-12-05  jrandom
    * Added an RDF and XML thread export to Syndie, reachable at 
      .../threadnav/rdf or .../threadnav/xml, accepting the parameters
      count=$numThreads and offset=$threadIndex.  If the $numThreads is -1, it
      displays all threads.

2005-12-04  TLorD
    * Patch for the C SAM library to null terminate strings on copy (thanks!)

2005-12-04  jrandom
    * Bugfix in Syndie for a problem in the threaded indexer (thanks CofE!)
    * Always include ourselves in the favorite authors (since we don't
      bookmark ourselves)

2005-12-03  jrandom
    * Use newgroup-like tags by default in Syndie's interface

2005-12-03  jrandom
    * Added support for a 'most recent posts' view that CofE requested, which
      includes the ability to filter by age (e.g. posts by your favorite
      authors in the last 5 days).

2005-12-03  jrandom
    * Adjusted Syndie to use the threaded view that cervantes suggested, which
      displays a a single thread path at a time - from root to leaf - rather
      than a depth first traversal.

2005-12-03  jrandom
    * Package up a standalone Syndie install into a "syndie-standalone.zip",
      buildable with "ant syndie".  It extracts into ./syndie/, launches with
      "java -jar launchsyndie.jar" (or javaw, on windows, to avoid a dos box),
      running a single user Syndie instance (by default).  It also creates a
      default subscription to syndiemedia without any anonymity (using no
      proxy).  Upgrades can be done by just replacing the syndie.war with the
      one from I2P.

* 2005-12-01  0.6.1.7 released

2005-12-01  jrandom
    * Add a new criteria to the tunnel join throttle, backing off people if we
      are failing to talk to our peers more than usual.

2005-11-30  jrandom
    * Cleaned up the build process to deal with Jetty 5.1.6 and rename the
      new commons-logging-api.jar to commons-logging.jar, which it replaces.
      Jetty 5.1.6 is pushed with all updates.  Also, no need to push a
      separate jdom or rome, as they're inside syndie.war.

2005-11-30  jrandom
    * Don't let the TCP transport alone shitlist a peer, since other
      transports may be working.  Also display whether TCP connections are
      inbound or outbound on the peers page.
    * Fixed some substantial bugs in the SSU introducers where we wouldn't
      talk to anyone who didn't expose an IP (even if they had introducers),
      among other goofy things.
    * When dealing with SSU introducers, send them all a packet at 3s/6s/9s,
      rather than sending one a packet at 3s, then another a packet at 6s,
      and a third a packet at 9s.
    * Fixed Syndie attachments (oops)

2005-11-29  zzz
    * Added a link to orion's jump page on the 'key not found' error page.

2005-11-29  jrandom
    * Further Syndie UI cleanup
    * Bundled our patched MultiPartRequest code from jetty (APL2 licensed),
      since it hasn't been applied to the jetty CVS yet [1].  Its packaged
      into syndie.jar and renamed to net.i2p.syndie.web.MultiPartRequest, but
      will be removed as soon as its integrated into Jetty.  This patch allows
      posting content in various character sets.
      [1] http://article.gmane.org/gmane.comp.java.jetty.general/6031
    * Upgraded new installs to the latest stable jetty (5.1.6), though this
      isn't pushed as part of the update yet, as there aren't any critical
      bugs.

2005-11-29  jrandom
    * Added back in the OSX jbigi, which was accidentally removed a few revs
      back (thanks for the bug report stoerte!)  New installs will get the
      full jbigi, or you can pull the jbigi.jar from CVS by going to
      http://dev.i2p.net/cgi-bin/cvsweb.cgi/i2p/installer/lib/jbigi/jbigi.jar
      and clicking on the first "download" link, saving that jbigi.jar to
      lib/jbigi.jar in your I2P installation directory.  After restarting your
      router, it should load up fine.

2005-11-27  jrandom
    * Inlined the Syndie CSS to reduce the number of HTTP requests (and
      because firefox [and others?] delay rendering until they fetch the css).
    * Make sure we fire the shutdown tasks when regenerating a new identity
      (thanks picsou!)
    * Cleaned up some of the things I b0rked in the 'dynamic keys' mode
    * Don't drop SSU sessions if they're still transmitting data successfully,
      even if there are transmission failures
    * Adjusted the time summarization to display hours after 119m, not 90m
    * Further EepGet cleanup (grr)

* 2005-11-26 0.6.1.6 released

2005-11-26  jrandom
    * Update the sorting in Syndie to consider children 'newer' than parents,
      even if they have the same message ID (duh)
    * Cleaned up some nav links in Syndie (good idea gloin, spaetz!)
    * Added a bunch of tooltips to Syndie's fields (thanks polecat!)
    * Force support for nonvalidating XML in Jetty (so we can handle GCJ/etc
      better)

2005-11-26  jrandom 
    * Be more explicit about what messages we will handle through a client
      tunnel, and how we will handle them.  This cuts off a set of attacks
      that an active adversary could mount, though they're probably nonobvious
      and would require at least some sophistication.

2005-11-26  Raccoon23
    * Added support for 'dynamic keys' mode, where the router creates a new
      router identity whenever it detects a substantial change in its public
      address (read: SSU IP or port).  This only offers minimal additional
      protection against trivial attackers, but should provide functional
      improvement for people who have periodic IP changes, since their new
      router address would not be shitlisted while their old one would be.
    * Added further infrastructure for restricted route operation, but its use
      is not recommended.

2005-11-25  jrandom
    * Further Syndie UI cleanups
    * Logging cleanup
    * Fixed link to fproxy.tino.i2p (thanks zzz!)

2005-11-25  jrandom
    * Don't publish stats for periods we haven't reached yet (thanks zzz!)
    * Cleaned up the syndie threaded display to show the last updated date for
      a subthread, and to highlight threads updated in the last two days.

2005-11-24  jrandom
    * Fix to save syndication settings in Syndie (thanks spaetz!)

2005-11-23  jrandom
    * Removed spurious streaming lib RTO increase (it wasn't helpful)
    * Streamlined the tunnel batching to schedule batch transmissions more
      appropriately.
    * Default tunnel pool variance to 2 +0-1 hops

2005-11-21  jrandom
    * IE doesn't strip SPAN from <button> form fields, so add in a workaround
      within I2PTunnel.
    * Increase the maximum SSU retransmission timeout to accomodate slower or
      more congested links (though SSU's RTO calculation will usually use a
      much lower timeout)
    * Moved the streaming lib timed events off the main timer queues and onto
      a streaming lib specific set of timer queues.  Streaming lib timed
      events are more likely to have lock contention on the I2CP socket while
      other timed events in the router are (largely) independent.
    * Fixed a case sensitive lookup bug (thanks tino!)
    * Syndie cleanup - new edit form on the preview page, and fixed some blog
      links (thanks tino!)

2005-11-19  jrandom
    * Implemented a trivial pure java PMTU backoff strategy, switching between
      a 608 byte MTU and a 1350 byte MTU, depending upon retransmission rates.
    * Fixed new user registration in Syndie (thanks Complication!)

2005-11-17  jrandom
    * More cautious file handling in Syndie

2005-11-16  jrandom
    * More aggressive I2PTunnel content encoding munging to work around some
      rare HTTP behavior (ignoring q values on Accept-encoding, using gzip
      even when only identity is specified, etc).  I2PTunnelHTTPServer now
      sends "Accept-encoding: \r\n" plus "X-Accept-encoding: x-i2p-gzip\r\n",
      and I2PTunnelHTTPServer handles x-i2p-gzip in either the Accept-encoding
      or X-Accept-encoding headers.  Eepsite operators who do not know to
      check for X-Accept-encoding will simply use the identity encoding.

* 2005-11-15  0.6.1.5 released

2005-11-14  jrandom
    * Migrate to the new Syndie interface

2005-11-11  jrandom
    * Add filtering threads by author to Syndie, populated with authors in the
      user's addressbook
    * When creating the default user, add
      "http://syndiemedia.i2p/archive/archive.txt" to their addressbook,
      configured to automatically pull updates.  (what other archives should
      be included?)
    * Tiny servlet to help dole out the new routerconsole themes, and bundle
      the installer/resources/themes/** into ./docs/themes/** on both install
      and update.

2005-11-11  cervantes
    * Initial pass of the routerconsole revamp, starting with I2PTunnel and
      being progressively rolled out to other sections at later dates.
      Featuring abstracted W3C strict XHTML1.0 markup, with CSS providing
      layout and styling.
    * Implemented console themes. Users can create their own themes by
      creating css files in: {i2pdir}/docs/themes/console/{themename}/
      and activating it using the routerconsole.theme={themename} advanced
      config property. Look at the example incomplete "defCon1" theme.
      Note: This is very much a work in progress. Folks might want to hold-off
      creating their own skins until the markup has solidified.
    * Added "routerconsole.javascript.disabled=true" to disable console
      client-side scripting and "routerconsole.css.disabled=true" to remove 
      css styling (only rolled out in the i2ptunnel interface currently)
    * Fixed long standing bug with i2ptunnel client and server edit screens
      where tunnel count and depth properties would fail to save. Added
      backup quantity and variance configuration options.
    * Added basic accessibility support (key shortcuts, linear markup, alt and 
      title information and form labels).
    * So far only tested on IE6, Firefox 1.0.6, Opera 8 and lynx.

2005-11-11  jrandom
    * Default Syndie to single user mode, and automatically log into a default
      user account (additional accounts can be logged into with the 'switch'
      or login pages, and new accounts can be created with the register page).
    * Disable the 'automated' column on the Syndie addressbook unless the user
      is appropriately authorized (good idea Polecat!)

2005-11-10  jrandom
    * First pass to a new threaded Syndie interface, which isn't enabled by
      default, as its not done yet.

2005-11-06  jrandom
    * Include SSU establishment failure in the peer profile as a commError,
      as we do for TCP establishment failures.
    * Don't throttle the initial transmission of a message because of ongoing
      retransmissions to a peer, since the initial transmission of a message
      is more valuable than a retransmission (since it has less latency).
    * Cleaned up links to SusiDNS and I2PTunnel (thanks zzz!)

2005-11-05  jrandom
    * Include the most recent ACKs with packets, rather than only sending an
      ack exactly once.  SSU differs from TCP in this regard, as TCP has ever
      increasing sequence numbers, while each message ID in SSU is random, so
      we don't get the benefit of later ACKs implicitly ACKing earlier
      messages.
    * Reduced the max retransmission timeout for SSU
    * Don't try to send messages queued up for a long time waiting for
      establishment.

2005-11-05  dust
    * Fix sucker to delete its temporary files.
    * Improve sucker's sml output some.
    * Fix Exception in SMLParser for weird sml.

2005-11-03  zzz
    * Added a new error page to the eepproxy to differentiate the full 60
      second timeout from the immediate "I don't know this base64" failure.

2005-11-01  jrandom
    * Added a few more css elements (thanks identiguy!)

2005-10-31  jrandom
    * Fix for some syndie reply scenarios (thanks identiguy and CofE!)
    * Removed a potentially infinitely recursive call (oops)

2005-10-30  dust
    * Merge sucker into syndie with a rssimport.jsp page.
    * Add getContentType() to EepGet.
    * Make chunked transfer work (better) with EepGet.
    * Do replaceAll("<","&lt;") for logs.

* 2005-10-29  0.6.1.4 released

2005-10-29  jrandom
    * Improved the bandwidth throtting on tunnel participation, especially for
      low bandwidth peers.
    * Improved failure handling in SSU with proactive reestablishment of
      failing idle peers, and rather than shitlisting a peer who failed too
      much, drop the SSU session and allow a new attempt (which, if it fails,
      will cause a shitlisting)
    * Clarify the cause of the shitlist on the profiles page, and include
      bandwidth limiter info at the bottom of the peers page.

2005-10-26  jrandom
    * In Syndie, propogate the subject and tags in a reply, and show the parent
      post on the edit page for easy quoting.  (thanks identiguy and CofE!)
    * Streamline some netDb query handling to run outside the jobqueue -
      which means they'll run on the particular SSU thread that handles the
      message.  This should help out heavily loaded netDb peers.

2005-10-25  jrandom
    * Defer netDb searches for newly referenced peers until we actually want
      them
    * Ignore netDb references to peers on our shitlist
    * Set the timeout for end to end client messages to the max delay after
      finding the leaseSet, so we don't have as many expired messages floating
      around.
    * Add a floor to the streaming lib window size
    * When we need to send a streaming lib ACK, try to retransmit one of the
      unacked packets instead (with updated ACK/NACK fields, of course).  The
      bandwidth cost of an unnecessary retransmission should be minor as
      compared to both an ACK packet (rounded up to 1KB in the tunnels) and
      the probability of a necessary retransmission.
    * Adjust the streaming lib cwin algorithm to allow growth after a full
      cwin messages if the rtt is trending downwards.  If it is not, use the
      existing algorithm.
    * Increased the maximum rto size in the streaming lib.
    * Load balancing bugfix on end to end messages to distribute across
      tunnels more evenly.

2005-10-22  jrandom
    * Integrated GNU-Crypto's Fortuna PRNG, seeding it off /dev/urandom and
      ./prngseed.rnd (if they exist), and reseeding it with data out of
      various crypto operations (unused bits in a DH exchange, intermediary
      bits in a DSA signature generation, extra bits in an ElGamal decrypt).
      The Fortuna implementation under gnu.crypto.prng has been modified to
      use BouncyCastle's SHA256 and Cryptix's AES (since those are the ones
      I2P uses), and the resulting gnu.crypto.prng.* are therefor available
      under GPL+Classpath's linking exception (~= LGPL).  I2P's SecureRandom
      wrapper around it is, of course, public domain.

2005-10-20  dust
    * Fix bug in ircclient that prevented it to use its own dest (i.e. was
      always shared. (thx for info Ragnarok)
    * Fix crash in Sucker with some bad html.

2005-10-20  jrandom
    * Workaround a bug in GCJ's Calendar implementation
    * Propery throw an exception in the streaming lib if we try to write to a
      closed stream.  This will hopefully help clear some I2Phex bugs (thanks
      GregorK!)

2005-10-19  jrandom
    * Ported the snark bittorrent client to I2P such that it is compatible
      with i2p-bt and azneti2p.  For usage information, grab an update and run
      "java -jar lib/i2psnark.jar".  It isn't currently multitorrent capable,
      but adding in support would be fairly easy (see PeerAcceptor.java:49)
    * Don't allow leaseSets expiring too far in the future (thanks postman)

2005-10-19  jrandom
    * Bugfix for the auto-update code to handle different usage patterns
    * Decreased the addressbook recheck frequency to once every 12 hours
      instead of hourly.
    * Handle dynamically changing the HMAC size (again, unless your nym is
      toad or jrandom, ignore this ;)
    * Cleaned up some synchronization/locking code

2005-10-17  dust
    * Exchange the remaining URL with EepGet in Sucker.
    * Allow /TOPIC irc command.

2005-10-17  jrandom
    * Allow an env prop to configure whether we want to use the backwards
      compatible (but not standards compliant) HMAC-MD5, or whether we want
      to use the not-backwards compatible (but standards compliant) one.  No
      one should touch this setting, unless your name is toad or jrandom ;)
    * Added some new dummy facades
    * Be more aggressive on loading up the router.config before building the
      router context
    * Added new hooks for apps to deal with previously undefined I2NP message
      types without having to modify any code.
    * Demo code for using a castrated router for SSU comm (SSUDemo.java)

2005-10-14  jrandom
    * More explicit filter for linux/PPC building (thanks anon!)
    * Fixed Syndie's Sucker to not explicitly reference something only found
      in sun's JVM (thanks cervantes!)
    * Don't filter IRC "MAP" messages (not critical, but it doesn't hurt)

* 2005-10-14  0.6.1.3 released

2005-10-14  jrandom
    * Added a key explaining peers.jsp a bit (thanks tethra!)

2005-10-13  dust
    * Bundled dust's Sucker for pulling RSS/Atom content into SML, which can
      then be injected into Syndie with the Syndie CLI.
    * Bundled ROME and JDOM (BSD and Apache licensed, respectively) for
      RSS/Atom parsing.

2005-10-13  jrandom
    * SSU retransmission choke bugfix (== != !=)
    * Include initial transmissions in the retransmission choke, so that
      if we are already retransmitting a message, we won't send anything
      to that peer other than that message (or ACKs, if necessary)

2005-10-12  jrandom
    * Choke SSU retransmissions to a peer while there is already a
      retransmission in flight to them.  This currently lets other initial
      transmissions through, since packet loss is often sporadic, but maybe
      this should block initial transmissions as well?
    * Display the retransmission bytes stat on peers.jsp (thanks bar!)
    * Filter QUIT messages in the I2PTunnelIRCClient proxy

2005-10-11  jrandom
    * Piggyback the SSU partial ACKs with data packets.  This is backwards
      compatible.
    * Syndie RSS renderer bugfix, plus now include the full entry instead of
      just the blurb before the cut.

2005-10-11  jrandom
    * Piggyback the SSU explicit ACKs with data packets (partial ACKs aren't
      yet piggybacked).  This is backwards compatible.
    * SML parser cleanup in Syndie

2005-10-10  dust
    * Implemented a new I2PTunnelIRCClient which locally filters inbound and
      outbound IRC commands for anonymity and security purposes, removing all
      CTCP messages except ACTION, as well as stripping the hostname from the
      USER message (while leaving the nick and 'full name').  The IRC proxy
      doesn't use this by default, but you can enable it by creating a new 
      "IRC proxy" tunnel on the web interface, or by changing the tunnel type
      to "ircclient" in i2ptunnel.config.

2005-10-10  jrandom
    * I2PTunnel http client config cleanup and stats
    * Minor SSU congestion tweaks and stats
    * Reduced netDb exploration period

2005-10-09  jrandom
    * Syndie CLI cleanup for simpler CLI posting.  Usage shown with
      java -jar lib/syndie.jar
    * Beginnings of the Syndie logging cleanup
    * Delete corrupt Syndie posts

2005-10-09  jrandom
    * Now that the streaming lib works reasonably, set the default inactivity 
      event to send a 0 byte keepalive payload, rather than disconnecting the
      stream.  This should cut the irc netsplits and help out with other long
      lived streams.  The default timeout is now less than the old timeout as
      well, so the keepalive will be sent before earlier builds fire their
      fatal timeouts.

2005-10-08  jrandom
    * Use the OS clock for stat timing, since it doesn't jump around (though
      still use the NTP'ed clock for display)
    * Added new DH stats

* 2005-10-07  0.6.1.2 released

2005-10-07  jrandom
    * Include the 1 second bandwidth usage on the console rather than the 
      1 minute rate, as the 1 second value doesn't have the 1m/5m quantization
      issues.

2005-10-07  jrandom
    * Allow the I2PTunnelHTTPServer to send back the first few packets of an
      HTTP response quicker, and initialize the streaming lib's cwin more 
      carefully.
    * Added a small web UI to the new Syndie scheduled updater.  If you log in
      as a user authorized to use the remote archive funtionality, you can
      request remote archives in your address book to be automatically pulled
      down by checking the "scheduled?" checkbox.

2005-10-05  jrandom
    * Allow the first few packets in the stream to fill in their IDs during
      handshake (thanks cervantes, Complication, et al!)  This should fix at 
      least some of the intermittent HTTP POST issues.

2005-10-04  jrandom
    * Syndie patch for single user remote archives (thanks nickless_head!)
    * Handle an invalid netDb store (thanks Complication!)

2005-10-04  jrandom
    * Further reduction in unnecessary streaming packets.

2005-10-03  jrandom
    * Properly reject unroutable IP addresses *cough*

2005-10-03  rangarok
    * Changed default update delay to twelve hours, and enforced a minimum 
      delay of one hour.

2005-10-03  ragnarok
    * Implemented a Syndie auto-updater.  It will automatically pull new posts
      from selected syndie archives.  To try it out, add 
      syndie.updateArchives=<comma seperated list of syndie archives> to your 
      syndie.config.  Archives must be specified as the full url to archive.txt
      (e.g. http://syndiemedia.i2p/archive/archive.txt).  By default, it checks
      for new posts every hour.  This can be modified by setting 
      syndie.updateDelay=<delay in hours> also in syndie.config. 

* 2005-10-01  0.6.1.1 released

2005-09-30  ragnarok
    * Implemented conditional get for syndie remote archive imports. 

2005-09-30  jrandom
    * Killed three more streaming lib bugs, one of which caused excess packets
      to be transmitted (dupacking dupacks), one that was the root of many of
      the old hung streams (shrinking highest received), and another that was
      releasing data too soon.

2005-09-30  jrandom
    * Only allow autodetection of our IP address if we haven't received an
      inbound connection in the last two minutes.
    * Increase the default max streaming resends to 8 from 5 (and down from
      the earlier 10)

2005-09-29  ragnarok
    * Export petnames from syndie to the router's petname db instead of 
      userhosts.txt.

2005-09-29  jrandom
    * Support noreseed.i2p in addition to .i2pnoreseed for disabling automatic
      reseeding - useful on OSes that make it hard to create dot files.  
      Thanks Complication (and anon)!
    * Fixed the installer version string (thanks Frontier!)
    * Added cleaner rejection of invalid IP addresses, shitlist those who send
      us invalid IP addresses, verify again that we are not sending invalid IP
      addresses, and log an error if it happens. (Thanks Complication, ptm,
      and adab!)

* 2005-09-29  0.6.1 released

2005-09-29  jrandom
    * Let syndie users modify their metadata.
    * Reseed the router on startup if there aren't enough peer references 
      known locally.  This can be disabled by creating the file .i2pnoreseed
      in your home directory, and the existing detection and reseed handling
      on the web interface is unchanged.

2005-09-28  jrandom
    * Fix for at least some (all?) of the wrong stream errors in the streaming
      lib

2005-09-27  jrandom
    * Properly suggest filenames for attachments in Syndie (thanks all!)
    * Fixed the Syndie authorization scheme for single user vs. multiuser

2005-09-27  jrandom
    * I2PTunnel bugfix (thanks Complication!)
    * Increase the SSU cwin slower during congestion avoidance (at k/cwin^2 
      instead of k/cwin)
    * Limit the number of inbound SSU sessions being built at once (using
      half of the i2np.udp.maxConcurrentEstablish config prop)
    * Don't shitlist on a message send failure alone (unless there aren't any
      common transports).
    * More careful bandwidth bursting

2005-09-26  jrandom
    * Reworded the SSU introductions config section (thanks duck!)
    * Force identity content encoding for I2PTunnel httpserver requests 
      (thanks redzara!)
    * Further x-i2p-gzip bugfixes for the end of streams
    * Reduce the minimum bandwidth limits to 3KBps steady and burst (though
      I2P's performance at 3KBps is another issue)
    * Cleaned up some streaming lib structures

2005-09-25  jrandom
    * Allow reseeding on the console if the netDb knows less than 30 peers,
      rather than less than 10 (without internet connectivity, we keep the 
      last 15 router references)
    * Reenable the x-i2p-gzip HTTP processing by default, flushing the stream
      more aggressively.
    * Show the status that used to be called "ERR-Reject" as "OK (NAT)"
    * Reduced the default maximum number of streaming lib resends of a packet
      (10 retransmits is a bit much with a reasonable RTO)

2005-09-25  Complication
    * Better i2paddresshelper handling in the I2PTunnel httpclient, plus a new
      conflict resolution page if the i2paddresshelper parameter differs from
      an existing name to destination mapping.

2005-09-25  jrandom
    * Fix a long standing streaming lib bug (in the inactivity detection code)
    * Improved handling of initial streaming lib packet retransmissions to 
      kill the "lost first packet" bug (where a page shows up with the first
      few KB missing)
    * Add support for initial window sizes greater than 1 - useful for 
      eepsites to transmit e.g. 4 packets full of data along with the initial
      ACK, thereby cutting down on the rtt latency.  The congestion window 
      size can and does still shrink down to 1 packet though.
    * Adjusted the streaming lib retransmission calculation algorithm to be
      more TCP-like.

2005-09-21  redzara
    * Use ISO-8859-1 for the susidns xml

2005-09-21  susi
    * Bugfix in susidns for deleting entries

2005-09-21  jrandom
    * Add support for HTTP POST to EepGet
    * Use HTTP POST for syndie bulk fetches, since there's a lot of data to 
      put in that URL.

2005-09-18  jrandom
    * Added support for pure 64bit linux with jbigi and the java service 
      wrapper (no need for jcpuid if we're on os.arch=amd64).  Thanks mule 
      et al for help testing!
    * UI cleanup in Syndie (thanks gloin and bar!)

2005-09-18  Ragnarok
    * Made MetaNamingService the default naming service.

2005-09-17  Ragnarok
    * Implemented a naming service using Syndie's petname db.  It's not enabled
      by default, but you can try it out by setting
      i2p.naming.impl=net.i2p.client.naming.PetNameNamingService in 
      router.config.
    * Implemented a meta naming service that will first lookup names in the 
      PetNameNamingService then fallback on the HostTxtNamingService.  Which
      naming services are checked and in which order is specified by 
      i2p.nameservicelist.  This will probably become the default naming service
      so please help test it out by setting
      i2p.naming.impl=net.i2p.client.naming.MetaNamingService in router.config.
      
* 2005-09-17  0.6.0.6 released

2005-09-17  jrandom
    * Clean up syndie a bit more and bundle a default introductory post with 
      both new installs and updates.
    * Typo fixes on the console (thanks bar!)

2005-09-17  jrandom
    * Updated the bandwidth limiter to use two tiers of bandwidth - our normal
      steady state rate, plus a new limit on how fast we transfer when 
      bursting.  This is different from the old "burst as fast as possible 
      until we're out of tokens" policy, and should help those with congested
      networks.  See /config.jsp to manage this rate.
    * Bugfixes in Syndie to handle missing cache files (no data was lost, the
      old posts just didn't show up).
    * Log properly in EepPost

2005-09-17  jrandom
    * Added the natively compiled jbigi and patched java service wrapper for
      OS X.  Thanks Bill Dorsey for letting me use your machine!
    * Don't build i2p.exe or i2pinstall.exe when run on OS X machines, as we
      don't bundle the binutils necessary (and there'd be a naming conflict
      if we did).
    * Added 'single user' functionality to syndie - if the single user 
      checkbox on the admin page is checked, all users are allowed to control
      the instance and sync up with remote syndie nodes.
    * Temporarily disable the x-i2p-gzip in i2ptunnel until it is more closely
      debugged.

2005-09-16  jrandom
    * Reject unroutable IPs in SSU like we do for the TCP transport (unless
      you have i2np.udp.allowLocal=true defined - useful for private nets)

2005-09-16  jrandom
    * Adjust I2PTunnelHTTPServer so it can be used for outproxy operators 
      (just specify the spoofed host as an empty string), allowing them to
      honor x-i2p-gzip encoding.
    * Let windows users build the exes too (thanks bar and redzara!)
    * Allow I2PTunnel httpserver operators to disable gzip compression on 
      individual tunnels with the i2ptunnel.gzip=false client option 
      (good idea susi!)

2005-09-16  jrandom
    * Added the i2p.exe and i2pinstall.exe for windows users, using launch4j.
    * Added runplain.sh for *nix/osx users having problems using the java
      service wrapper (called from the install dir as: sh runplain.sh)
    * Bundle susidns and syndie, with links on the top nav
    * Have I2PTunnelHTTPClient and I2PTunnelHTTPServer use the x-i2p-gzip 
      content-encoding (if offered), reducing the payload size before it
      reaches the streaming lib.  The existing compression is at the i2cp
      level, so we've been packetizing 4KB of uncompressed data and then
      compressing those messages, rather than compressing and then packetizing
      4KB of compressed data.  This should reduce the number of round trips
      to fetch web pages substantially.
    * Adjust the startup and timing of the addressbook so that susidns always
      has config to work off, and expose a method for susidns to tell it to
      reload its config and rerun.

2005-09-15  jrandom
    * Error handling for failed intro packets (thanks red.hand!)
    * More carefully verify intro addresses

2005-09-13  jrandom
    * More careful error handling with introductions (thanks dust!)
    * Fix the forceIntroducers checkbox on config.jsp (thanks Complication!)
    * Hide the shitlist on the summary so it doesn't confuse new users.

2005-09-12  comwiz
    * Migrated the router tests to junit

2005-09-12  jrandom
    * Removed guaranteed delivery mode entirely (so existing i2phex clients
      using it can get the benefits of mode=best_effort).  Guaranteed delivery
      is offered at the streaming lib level.
    * Improve the peer selection code for peer testing, as everyone now 
      supports tests.
    * Give the watchdog its fangs - if it detects obscene job lag or if 
      clients have been unable to get a leaseSet for more than 5 minutes,
      restart the router.  This was disabled a year ago due to spurious 
      restarts, and can be disabled by "watchdog.haltOnHang=false", but the
      cause of the spurious restarts should be gone.

2005-09-12  jrandom
    * Bugfix for skewed store which could kill a UDP thread (causing complete
      comm failure and eventual OOM)

2005-09-12  jrandom
    * More aggressively publish updated routerInfo.
    * Expose the flag to force SSU introductions on the router console
    * Don't give people the option to disable SNTP time sync, at least not
      through the router console, because there is no reason to disable it.
      No, not even if your OS is "ntp synced", because chances are, its not.

2005-09-10  jrandom
    * Test the router's reachability earlier and more aggressively
    * Use the low level bandwidth limiter's rates for the router console, and
      if the router has net.i2p.router.transport.FIFOBandwidthLimiter=INFO in
      the logger config, keep track of the 1 second transfer rates as the stat
      'bw.sendBps1s' and 'bw.recvBps1s', allowing closer monitoring of burst 
      behavior.

2005-09-09  jrandom
    * Added preliminary support for NAT hole punching through SSU introducers
    * Honor peer test results from peers that we have an SSU session with if
      those sessions are idle for 3 minutes or more.

2005-09-09  cervantes
    * New build due to change in build number :P (thanks ugha!)

2005-09-07  BarkerJr
    * HTML cleanup for the router console (thanks!)

2005-09-07  jrandom
    * Lay the foundation for 'client routers' - the ability for peers to opt 
      out of participating in tunnels entirely due to firewall/NAT issues.  
      Individual routers have control over where those peers are used in 
      tunnels - in outbound or inbound, exploratory or client tunnels, or 
      none at all.  The defaults with this build are to simply act as before -
      placing everyone as potential participants in any tunnel.
    * Another part of the foundation includes the option for netDb 
      participants to refuse to answer queries regarding peers who are marked
      as unreachable, though this too is disabled by default (meaning the 
      routerInfo is retrievable from the netDb).

2005-09-05  jrandom
    * Expose the HTTP headers to EepGet status listeners
    * Handle DSA key failures properly (if the signature is not invertable, it
      is obviously invalid)

2005-09-04  jrandom
    * Don't persist peer profiles until we are shutting down, as the 
      persistence process gobbles RAM and wall time.
    * Bugfix to allow you to check/uncheck the sharedClient setting on the
      I2PTunnel web interface (thanks BarkerJr!)
    * Be more careful when expiring a failed tunnel message fragment so we 
      don't drop the data while attempting to read it.

* 2005-09-02  0.6.0.5 released

2005-09-02  jrandom
    * Don't refuse to send a netDb store if the targetted peer has failed a 
      bit (the value was an arbitrary amount).
    * Logging changes

* 2005-09-01  0.6.0.4 released

2005-09-01  jrandom
    * Don't send out a netDb store of a router if it is more than a few hours
      old, even if someone asked us for it.

2005-08-31  jrandom
    * Don't publish leaseSets to the netDb if they will never be looked for -
      namely, if they are for destinations that only establish outbound
      streams.  I2PTunnel's 'client' and 'httpclient' proxies have been 
      modified to tell the router that it doesn't need to publish their 
      leaseSet (by setting the I2CP config option 'i2cp.dontPublishLeaseSet'
      to 'true').
    * Don't publish the top 10 peer rankings of each router in the netdb, as
      it isn't being watched right now.

2005-08-29  jrandom
    * Added the new test Floodfill netDb

2005-08-27  jrandom
    * Minor logging and optimization tweaks in the router and SDK
    * Use ISO-8859-1 in the XML files (thanks redzara!)
    * The consolePassword config property can now be used to bypass the router
      console's nonce checking, allowing CLI restarts

2005-08-24  jrandom
    * Catch errors with corrupt tunnel messages more gracefully (no need to 
      kill the thread and cause an OOM...)
    * Don't skip shitlisted peers for netDb store messages, as they aren't 
      necessarily shitlisted by other people (though they probably are). 
    * Adjust the netDb store per-peer timeout based on each particular peer's
      profile (timeout = 4x their average netDb store response time)   
    * Don't republish leaseSets to *failed* peers - send them to peers who
      replied but just didn't know the value.
    * Set a 5 second timeout on the I2PTunnelHTTPServer reading the client's
      HTTP headers, rather than blocking indefinitely.  HTTP headers should be
      sent entirely within the first streaming packet anyway, so this won't be
      a problem.
    * Don't use the I2PTunnel*Server handler thread pool by default, as it may
      prevent any clients from accessing the server if the handlers get
      blocked by the streaming lib or other issues.
    * Don't overwrite a known status (OK/ERR-Reject/ERR-SymmetricNAT) with
      Unknown.

2005-08-23  jrandom
    * Removed the concept of "no bandwidth limit" - if none is specified, its
      16KBps in/out.
    * Include ack packets in the per-peer cwin throttle (they were part of the
      bandwidth limit though).
    * Tweak the SSU cwin operation to get more accurrate estimates under 
      congestions.
    * SSU improvements to resend more efficiently.
    * Added a basic scheduler to eepget to fetch multiple files sequentially.

* 2005-08-21  0.6.0.3 released

2005-08-21  jrandom
    * If we already have an established SSU session with the Charlie helping 
      test us, cancel the test with the status of "unknown".

2005-08-17  jrandom
    * Revise the SSU peer testing protocol so that Bob verifies Charlie's 
      viability before agreeing to Alice's request.  This doesn't work with
      older SSU peer test builds, but is backwards compatible (older nodes
      won't ask newer nodes to participate in tests, and newer nodes won't 
      ask older nodes to either).

2005-08-12  jrandom
    * Keep detailed stats on the peer testing, publishing the results in the 
      netDb.
    * Don't overwrite the status with 'unknown' unless we haven't had a valid
      status in a while.
    * Make sure to avoid shitlisted peers for peer testing.
    * When we get an unknown result to a peer test, try again soon afterwards.
    * When a peer tells us that our address is different from what we expect,
      if we've done a recent peer test with a result of OK, fire off a peer
      test to make sure our IP/port is still valid.  If our test is old or the
      result was not OK, accept their suggestion, but queue up a peer test for
      later.
    * Don't try to do a netDb store to a shitlisted peer, and adjust the way 
      we monitor netDb store progress (to clear up the high netDb.storePeers
      stat)

2005-08-10  jrandom
    * Deployed the peer testing implementation to be run every few minutes on
      each router, as well as any time the user requests a test manually.  The
      tests do not reconfigure the ports at the moment, merely determine under
      what conditions the local router is reachable.  The status shown in the 
      top left will be "ERR-SymmetricNAT" if the user's IP and port show up 
      differently for different peers, "ERR-Reject" if the router cannot 
      receive unsolicited packets or the peer helping test could not find a  
      collaborator, "Unknown" if the test has not been run or the test 
      participants were unreachable, or "OK" if the router can receive 
      unsolicited connections and those connections use the same IP and port.

* 2005-08-08  0.6.0.2 released

2005-08-08  jrandom
    * Add a configurable throttle to the number of concurrent outbound SSU
      connection negotiations (via i2np.udp.maxConcurrentEstablish=4).  This
      may help those with slow connections to get integrated at the start.
    * Further fixlets to the streaming lib

2005-08-07  Complication
    * Display the average clock skew for both SSU and TCP connections

2005-08-07  jrandom
    * Fixed the long standing streaming lib bug where we could lose the first
      packet on retransmission.
    * Avoid an NPE when a message expires on the SSU queue.
    * Adjust the streaming lib's window growth factor with an additional
      Vegas-esque congestion detection algorithm.
    * Removed an unnecessary SSU session drop
    * Reduced the MTU (until we get a working PMTU lib)
    * Deferr tunnel acceptance until we know how to reach the next hop, 
      rejecting it if we can't find them in time.
    * If our netDb store of our leaseSet fails, give it a few seconds before
      republishing.

* 2005-08-03  0.6.0.1 released

2005-08-03  jrandom
    * Backed out an inadvertant change to the netDb store redundancy factor.
    * Verify tunnel participant caching.
    * Logging cleanup

2005-08-01  duck
    * Update IzPack to 3.7.2 (build 2005.04.22). This fixes bug #82.

2005-08-01  duck
    * Fix an addressbook NPE when a new hostname from the master addressbook
      didn't exist in the router addressbook.
    * Fix an addressbook bug which caused subscriptions not to be parsed at
      all. (Oops!)

2005-07-31  jrandom
    * Adjust the netDb search and store per peer timeouts to match the average
      measured per peer success times, rather than huge fixed values.
    * Optimized and reverified the netDb peer selection / retrieval process 
      within the kbuckets.
    * Drop TCP connections that don't have any useful activity in 10 minutes.
    * If i2np.udp.fixedPort=true, never change the externally published port,
      even if we are autodetecting the IP address.

* 2005-07-27  0.6 released

2005-07-27  jrandom
    * Enabled SSU as the default top priority transport, adjusting the 
      config.jsp page accordingly.
    * Add verification fields to the SSU and TCP connection negotiation (not
      compatible with previous builds)
    * Enable the backwards incompatible tunnel crypto change as documented in
      tunnel-alt.html (have each hop encrypt the received IV before using it,
      then encrypt it again before sending it on)
    * Disable the I2CP encryption, leaving in place the end to end garlic 
      encryption (another backwards incompatible change)
    * Adjust the protocol versions on the TCP and SSU transports so that they
      won't talk to older routers.
    * Fix up the config stats handling again
    * Fix a rare off-by-one in the SSU fragmentation
    * Reduce some unnecessary netDb resending by inluding the peers queried
      successfully in the store redundancy count.

2005-07-22  jrandom
    * Use the small thread pool for I2PTunnelHTTPServer (already used for 
      I2PTunnelServer)
    * Minor memory churn reduction in I2CP
    * Small stats update

2005-07-21  jrandom
    * Fix in the SDK for a bug which would manifest itself as misrouted
      streaming packets when a destination has many concurrent streaming
      connections (thanks duck!)
    * No more "Graceful shutdown in -18140121441141s"

2005-07-20  jrandom
    * Allow the user to specify an external port # for SSU even if the external
      host isn't specified (thanks duck!)

2005-07-19  jrandom
    * Further preparation for removing I2CP crypto
    * Added some validation to the DH key agreement (thanks $anon)
    * Validate tunnel data message expirations (though not really a problem, 
      since tunnels expire)
    * Minor PRNG threading cleanup

2005-07-15  cervantes
    * Added workaround for an odd win32 bug in the stats configuration console
      page which meant only the first checkbox selection was saved.

2005-07-15  Romster
    * Added per group selection toggles in the stats configuration console 
      page.

2005-07-13  jrandom
    * Fixed a recently injected bug in the multitransport bidding which had 
      allowed an essentially arbitrary choice of transports, rather than the
      properly ordered choice.

2005-07-13  jrandom
    * Fixed a long standing bug where we weren't properly comparing session 
      tags but instead largely depending upon comparing their hashCode, 
      causing intermittent decryption errors.

2005-07-12  jrandom
    * Add some data duplication to avoid a recently injected concurrency 
      problem in the session tag manager (thanks redzara and romster).

2005-07-11  jrandom
    * Reduced the growth factor on the slow start and congestion avoidance for
      the streaming lib.
    * Adjusted some of the I2PTunnelServer threading to use a small pool of
      handlers, rather than launching off new threads which then immediately
      launch off an I2PTunnelRunner instance (which launches 3 more threads..)
    * Don't persist session keys / session tags (not worth it, for now)
    * Added some detection and handling code for duplicate session tags being
      delivered (root cause still not addressed)
    * Make the PRNG's buffer size configurable (via the config property
      "i2p.prng.totalBufferSizeKB=4096")
    * Disable SSU flooding by default (duh)
    * Updates to the StreamSink apps for better throttling tests.

2005-07-05  jrandom
    * Use a buffered PRNG, pulling the PRNG data off a larger precalculated 
      buffer, rather than the underlying PRNG's (likely small) one, which in
      turn reduces the frequency of recalcing.
    * More tuning to reduce temporary allocation churn

2005-07-04  jrandom
    * Within the tunnel, use xor(IV, msg[0:16]) as the flag to detect dups, 
      rather than the IV by itself, preventing an attack that would let 
      colluding internal adversaries tag a message to determine that they are
      in the same tunnel.  Thanks dvorak for the catch!
    * Drop long inactive profiles on startup and shutdown
    * /configstats.jsp: web interface to pick what stats to log
    * Deliver more session tags to account for wider window sizes
    * Cache some intermediate values in our HMACSHA256 and BC's HMAC
    * Track the client send rate (stream.sendBps and client.sendBpsRaw)
    * UrlLauncher: adjust the browser selection order
    * I2PAppContext: hooks for dummy HMACSHA256 and a weak PRNG
    * StreamSinkClient: add support for sending an unlimited amount of data
    * Migrate the tests out of the default build jars

2005-06-22  Comwiz
    * Migrate the core tests to junit

2005-05-25  duck
    * Fixed PRNG bug (bugzilla #107)

2005-05-01  jrandom
    * Added a substantial optimization to the AES engine by caching the
      prepared session keys (duh).

2005-05-01  jrandom
    * Cleaned up the peers page a bit more.

2005-04-30  jrandom
    * Added a small new page to the web console (/peers.jsp) which contains 
      the peer connection information.  This will be cleaned up a lot more 
      before 0.6 is out, but its a start.

2005-04-30  jrandom
    * Reduced some SimpleTimer churn

2005-04-29  jrandom
    * Reduce the peer profile stat coallesce overhead by inlining it with the 
      reorganize.
    * Limit each transport to at most one address (any transport that requires
      multiple entry points can include those alternatives in the address).

2005-04-28  jrandom
    * More fixes for the I2PTunnel "other" interface handling (thanks nelgin!)
    * Add back the code to handle bids from multiple transports (though there
      is still only one transport enabled by default)
    * Adjust the router's queueing of outbound client messages when under 
      heavy load by running the preparatory job in the client's I2CP handler
      thread, thereby blocking additional outbound messages when the router is
      hosed.
    * No need to validate or persist a netDb entry if we already have it

2005-04-25  smeghead
    * Added button to router console for manual update checks.
    * Fixed bug in configupdate.jsp that caused the proxy port to be updated
      every time the form was submitted even if it hadn't changed.

2005-04-24  jrandom
    * Added a pool of PRNGs using a different synchronization technique, 
      hopefully sufficient to work around IBM's PRNG bugs until we get our
      own Fortuna.
    * In the streaming lib, don't jack up the RTT on NACK, and have the window
      size bound the not-yet-ready messages to the peer, not the unacked 
      message count (not sure yet whether this is worthwile).
    * Many additions to the messageHistory log.
    * Handle out of order tunnel fragment delivery (not an issue on the live 
      net with TCP, but critical with UDP).

* 2005-04-20  0.5.0.7 released

2005-04-20  jrandom
    * In the SDK, we don't actually need to block when we're sending a message
      as BestEffort (and these days, we're always sending BestEffort).
    * Pass out client messages in fewer (larger) steps.
    * Have the InNetMessagePool short circuit dispatch requests.
    * Have the message validator take into account expiration to cut down on
      false positives at high transfer rates.
    * Allow configuration of the probabalistic window size growth rate in the 
      streaming lib's slow start and congestion avoidance phases, and default 
      them to a more conservative value (2), rather than the previous value 
      (1).
    * Reduce the ack delay in the streaming lib to 500ms
    * Honor choke requests in the streaming lib (only affects those getting
      insanely high transfer rates)
    * Let the user specify an interface besides 127.0.0.1 or 0.0.0.0 on the
      I2PTunnel client page (thanks maestro^!)

2005-04-17  sirup
    * Added the possibility for i2ptunnel client and httpclient instances to 
      have their own i2p session (and hence, destination and tunnels).  By 
      default, tunnels are shared, but that can be changed on the web 
      interface or with the sharedClient config option in i2ptunnel.config.

2005-04-17  jrandom
    * Marked the net.i2p.i2ptunnel.TunnelManager as deprecated.  Anyone use
      this?  If not, I want to drop it (lots of tiny details with lots of 
      duplicated semantics).

2005-04-17  zzz
    * Added new user-editable eepproxy error page templates.

2005-04-17  jrandom
    * Revamp the tunnel building throttles, fixing a situation where the 
      rebuild may not recover, and defaulting it to unthrottled (users with
      slow CPUs may want to set "router.tunnel.shouldThrottle=true" in their
      advanced router config)

2005-04-16  jrandom
    * Migrated to Bouncycastle's SHA256 and HMAC implementations for efficiency

2005-04-12  jrandom
    * Make sure we don't get cached updates (thanks smeghead!)
    * Clear out the callback for the TestJob after it passes (only affects the
      job timing accounting)

2005-04-08  smeghead
    * Added NativeBigInteger benchmark to scripts/i2pbench.sh.

2005-04-08  smeghead
    * Security improvements to TrustedUpdate: signing and verification of the
      version string along with the data payload for signed update files
      (consequently the positions of the DSA signature and version string fields
      have been swapped in the spec for the update file's header); router will
      no longer perform a trusted update if the signed update's version is lower
      than or equal to the currently running router's version.
    * Added two new CLI commands to TrustedUpdate: showversion, verifyupdate.
    * Extended TrustedUpdate public API for use by third party applications.

* 2005-04-06  0.5.0.6 released

2005-04-05  jrandom
    * Retry I2PTunnel startup if we are unable to build a socketManager for a
      client or httpclient tunnel.
    * Add some basic sanity checking on the I2CP settings (thanks duck!)

2005-04-05  jrandom
    * After a successfull netDb search for a leaseSet, republish it to all of 
      the peers we have tried so far who did not give us the key (up to 10),
      rather than the old K closest (which may include peers who had given us
      the key)
    * Don't wait 5 minutes to publish a leaseSet (duh!), and rather than 
      republish it every 5 minutes, republish it every 3.  In addition, always
      republish as soon as the leaseSet changes (duh^2).
    * Minor fix for oddball startup race (thanks travis_bickle!)
    * Minor AES update to allow in-place decryption.

2005-04-03  jrandom
    * EepGet fix for open-ended HTTP fetches (such as the news.xml 
      feeding the NewsFetcher)

2005-04-01  jrandom
    * Allow editing I2PTunnel server instances with five digit ports 
      (thanks nickless_head!)
    * More NewsFetcher debugging for reported weirdness

2005-04-01  jrandom
    * Fix to check for missing news file (thanks smeghead!)
    * Added destination display CLI:
      java -cp lib/i2p.jar net.i2p.data.Destination privKeyFilename
    * Added destination display to the web interface (thanks pnspns)
    * Installed CIA backdoor

* 2005-03-29  0.5.0.5 released

2005-03-29  jrandom
    * Decreased the initial RTT estimate to 10s to allow more retries.
    * Increased the default netDb store replication factor from 2 to 6 to take
      into consideration tunnel failures.
    * Address some statistical anonymity attacks against the netDb that could 
      be mounted by an active internal adversary by only answering lookups for 
      leaseSets we received through an unsolicited store.
    * Don't throttle lookup responses (we throttle enough elsewhere)
    * Fix the NewsFetcher so that it doesn't incorrectly resume midway through
      the file (thanks nickster!)
    * Updated the I2PTunnel HTML (thanks postman!)
    * Added support to the I2PTunnel pages for the URL parameter "passphrase",
      which, if matched against the router.config "i2ptunnel.passphrase" value,
      skips the nonce check.  If the config prop doesn't exist or is blank, no
      passphrase is accepted.
    * Implemented HMAC-SHA256.
    * Enable the tunnel batching with a 500ms delay by default
    * Dropped compatability with 0.5.0.3 and earlier releases

2005-03-26  jrandom
    * Added some error handling and fairly safe to cache data to the streaming
      lib (good call Tom!)

2005-03-25  jrandom
    * Fixed up building dependencies for the routerconsole on some more 
      aggressive compilers (thanks polecat!)

* 2005-03-24  0.5.0.4 released

2005-03-23  jrandom
    * Added more intelligent version checking in news.xml, in case we have a 
      version newer than the one specified.

2005-03-23  jrandom
    * Added support for Transfer-Encoding: chunked to the EepGet, so that the
      cvsweb.cgi doesn't puke on us.

2005-03-23  Connelly
    * Fixed Bugzilla Bug #99 in the SAM Bridge, which caused pending
      stream send data to not be sent if STREAM CLOSE is issued too fast.

2005-03-23  jrandom
    * Implemented the news fetch / update policy code, as configurated on
      /configupdate.jsp.  Defaults are to grab the news every 24h (or if it
      doesn't exist yet, on startup).  No action is taken however, though if
      the news.xml specifies that a new release is available, an option to
      update will be shown on the router console.
    * New initialNews.xml delivered with new installs, and moved news.xml out
      of the i2pwww module and into the i2p module so that we can bundle it 
      within each update.

2005-03-23  jrandom
    * New /configupdate.jsp page for controlling the update / notification 
      process, as well as various minor related updates.  Note that not all
      options are exposed yet, and the update detection code isn't in place
      in this commit - it currently says there is always an update available.
    * New EepGet component for reliable downloading, with a CLI exposed in
      java -cp lib/i2p.jar net.i2p.util.EepGet url
    * Added a default signing key to the TrustedUpdate component to be used
      for verifying updates.  This signing key can be authenticated via
      gpg --verify i2p/core/java/src/net/i2p/crypto/TrustedUpdate.java
    * New public domain SHA1 implementation for the DSA code so that we can
      handle signing streams of arbitrary size without excess memory usage
      (thanks P.Verdy!)
    * Added some helpers to the TrustedUpdate to work off streams and to offer
      a minimal CLI: 
          TrustedUpdate keygen pubKeyFile privKeyFile
          TrustedUpdate sign origFile signedFile privKeyFile
          TrustedUpdate verify signedFile

2005-03-22  smeghead
    * New TrustedUpdate component for signing/verifying files with a DSA 
      signature.

2005-03-21  jrandom
    * Fixed the tunnel fragmentation handler to deal with multiple fragments 
      in a single message properly (rather than release the buffer into the 
      cache after processing the first one) (duh!)
    * Added the batching preprocessor which will bundle together multiple 
      small messages inside a single tunnel message by delaying their delivery 
      up to .5s, or whenever the pending data will fill a full message, 
      whichever comes first.  This is disabled at the moment, since without the
      above bugfix widely deployed, lots and lots of messages would fail.
    * Within each tunnel pool, stick with a randomly selected peer for up to
      .5s before randomizing and selecting again, instead of randomizing the
      pool each time a tunnel is needed.  

* 2005-03-18  0.5.0.3 released

2005-03-18  jrandom
    * Minor tweak to the timestamper to help reduce small skews
    * Adjust the stats published to include only the relevent ones
    * Only show the currently used speed calculation on the profile page
    * Allow the full max # resends to be sent, rather than piggybacking the
      RESET packet along side the final resend (duh)
    * Add irc.postman.i2p to the default list of IRC servers for new installs
    * Drop support for routers running 0.5 or 0.5.0.1 while maintaining 
      backwards compatability for users running 0.5.0.2.

2005-03-18  jrandom
    * Eepproxy Fix for corrupted HTTP headers (thanks nickster!)
    * Fixed case sensitivity issues on the HTTP headers (thanks duck!)

2005-03-17  jrandom
    * Update the old speed calculator and associated profile data points to 
      use a non-tiered moving average of the tunnel test time, avoiding the 
      freshness issues of the old tiered speed stats. 
    * Explicitly synchronize all of the methods on the PRNG, rather than just
      the feeder methods (sun and kaffe only need the feeder, but it seems ibm
      needs all of them synchronized).
    * Properly use the tunnel tests as part of the profile stats.
    * Don't flood the jobqueue with sequential persist profile tasks, but 
      instead, inject a brief scheduling delay between them.
    * Reduce the TCP connection establishment timeout to 20s (which is still
      absurdly excessive)
    * Reduced the max resend delay to 30s so we can get some resends in when
      dealing with client apps that hang up early (e.g. wget)
    * Added more alternative socketManager factories (good call aum!)

2005-03-16  jrandom
    * Adjust the old speed calculator to include end to end RTT data in its 
      estimates, and use that as the primary speed calculator again.
    * Use the mean of the high capacity speeds to determine the fast 
      threshold, rather than the median.  Perhaps we should use the mean of
      all active non-failing peers?
    * Updated the profile page to sort by tier, then alphabetically.
    * Added some alternative socketManager factories (good call aum!)

2005-03-14  jrandom
    * New strict speed calculator that goes off the actual number of messages
      verifiably sent through the peer by way of tunnels.  Initially, this only
      contains the successful message count on inbound tunnels, but may be 
      augmented later to include verified outbound messages, peers queried in 
      the netDb, etc.  The speed calculation decays quickly, but should give
      a better differential than the previous stat (both values are shown on 
      the /profiles.jsp page)

2005-03-11  jrandom
    * Rather than the fixed resend timeout floor (10s), use 10s+RTT as the 
      minimum (increased on resends as before, of course).
    * Always prod the clock update listeners, even if just to tell them that 
      the time hasn't changed much.
    * Added support for explicit peer selection for individual tunnel pools,
      which will be useful in debugging but not recommended for use by normal
      end users.
    * More aggressively search for the next hop's routerInfo on tunnel join.
    * Give messages received via inbound tunnels that are bound to remote
      locations sufficient time (taking into account clock skew).
    * Give alternate direct send messages sufficient time (10s min, not 5s)
    * Always give the end to end data message the explicit timeout (though the
      old default was sufficient before)
    * No need to give end to end messages an insane expiration (+2m), as we 
      are already handling skew on the receiving side.
    * Don't complain too loudly about expired TunnelCreateMessages (at least,
      not until after all those 0.5 and 0.5.0.1 users upgrade ;)
    * Properly keep the sendBps stat
    * When running the router with router.keepHistory=true, log more data to
      messageHistory.txt
    * Logging updates
    * Minor formatting updates

2005-03-08  jrandom
    * More aggressively adjust the clock

2005-03-07  jrandom
    * Fix the HTTP response header filter to allow multiple headers with the
      same name (thanks duck and spotteri!)

* 2005-03-06  0.5.0.2 released

2005-03-06  jrandom
    * Allow the I2PTunnel web interface to select streaming lib options for
      individual client tunnels, rather than sharing them across all of them,
      as we do with the session options.  This way people can (and should) set
      the irc proxy to interactive and the eepproxy to bulk.
    * Added a startRouter.sh script to new installs which simply calls 
      "sh i2prouter start".  This should make it clear how people should start
      I2P.
    * Properly expand the HTTP response header buffer (thanks shendaras!)

2005-03-04  jrandom
    * Filter HTTP response headers in the eepproxy, forcing Connection: close
      so that broken (/malicious) webservers can't allow persistent 
      connections.  All HTTP compliant browsers should now always close the 
      socket.
    * Enabled the GZIPInputStream's cache (they weren't cached before)
    * Make sure our first send is always a SYN (duh)
    * Workaround for some buggy compilers

2005-03-03  jrandom
    * Loop while starting up the I2PTunnel instances, in case the I2CP 
      listener isn't up yet (thanks detonate!)
    * Implement custom reusable GZIP streams to both reduce memory churn
      and prevent the exposure of data in the standard GZIP header (creation
      time, OS, etc).  This is RFC1952 compliant, and backwards compatible, 
      though has only been tested within the confines of I2P's compression use
      (DataHelper.[de]compress).
    * Preemptively support the next protocol version, so that after the 0.5.0.2
      release, we'll be able to drop protocol=2 to get rid of 0.5 users.

2005-03-02  jrandom
    * Fix one substantial OOM cause (session tag manager was only dropping 
      tags once the critical limit was met, rather than honoring their 
      expiration) (duh)
    * Lots of small memory fixes
    * Double the allowable concurrent outstanding tunnel build tasks (20)

2005-03-01  jrandom
    * Really disable the streaming lib packet caching
    * Synchronized a message handling point in the SDK (even though its use is
      already essentially single threaded, its better to play it safe)
    * Don't add new RepublishLeaseSetJobs on failure, just requeue up the 
      existing one (duh)
    * Throttle the number of concurrent pending tunnel builds across all 
      pools, in addition to simply throttling the number of new requests per 
      minute for each pool individually.  This should avoid the cascading 
      failure when tunnel builds take too long, as no new builds will be 
      created until the previous ones are handled.
    * Factored out and extended the DataHelper's unit tests for dealing with 
      long and date formatting.
    * Explicitly specify the HTTP auth realm as "i2prouter", though this 
      alone doesn't address the bug where jetty asks for authentication too
      much.  (thanks orion!)
    * Updated the StreamSinkServer to ignore all read bytes, rather than write
      them to the filesystem.

2005-02-27  jrandom
    * Don't rerequest leaseSets if there are already pending requests
    * Reverted the insufficiently tested caching in the DSA/SHA1 impl, and
      temporary disabled the streaming lib packet caching.
    * Reduced the resend RTT penalty to 10s

2005-02-26  jrandom
    * Force 1.3-isms on the precompiled jsps too (thanks laberhost)

2005-02-26  jrandom
    * Further streaming lib caching improvements
    * Reduce the minimum RTT (used to calculate retry timeouts), but also 
      increase the RTT on resends.
    * Lower the default message size to 4KB from 16KB to further reduce the
      chance of failed fragmentation.
    * Extend tunnel rebuild throttling to include fallback rebuilds
    * If there are less than 20 routers known, don't drop the last 20 (to help
      avoid dropping all peers under catastrophic failures)
    * New stats for end to end messages - "client.leaseSetFoundLocally",
      "client.leaseSetFoundRemoteTime", and "client.leaseSetFailedRemoteTime"

2005-02-24  jrandom
    * Throttle the number of tunnel rebuilds per minute, preventing CPU 
      overload under catastrophic failures (thanks Tracker and cervantes!)
    * Block the router startup process until we've initialized the clock

2005-02-24  jrandom
    * Cache temporary memory allocation in the DSA's SHA1 impl, and the packet
      data in the streaming lib.
    * Fixed a streaming lib bug where the connection initiator would fail the
      stream if the ACK to their SYN was lost.

2005-02-23  jrandom 
    * Now that we don't get stale SAM sessions, it'd be nice if we didn't
      get stale tunnel pools, don't you think?

* 2005-02-23  0.5.0.1 released

2005-02-22  jrandom
    * Reworked the tunnel (re)building process to remove the tokens and 
      provide cleaner controls on the tunnels built.
    * Fixed situations where the timestamper wanted to test more servers than
      were provided (thanks Tracker!)
    * Get rid of the dead SAM sessions by using the streaming lib's callbacks
      (thanks Tracker!)

2005-02-22  jrandom
    * Temporary workaround for the I2CP disconnect bug (have the streaminglib
      try to automatically reconnect on accept()/connect(..)).
    * Loop check for expired lease republishing (just in case)

2005-02-22  jrandom
    * Adjusted (and fixed...) the timestamper change detection
    * Deal with a rare reordering bug at the beginning of a stream (so we 
      don't drop it unnecessarily)
    * Cleaned up some dropped message handling in the router
    * Reduced job queue churn when dealing with a large number of tunnels by
      sharing an expiration job
    * Keep a separate list of the most recent CRIT messages (shown on the 
      logs.jsp).  This way they don't get buried among any other messages.
    * For clarity, display the tunnel variance config as "Randomization" on 
      the web console.
    * If lease republishing fails (boo! hiss!) try it again 
    * Actually fix the negative jobLag in the right place (this time)
    * Allow reseeding when there are less than 10 known peer references
    * Lots of logging updates.

2005-02-20  jrandom
    * Allow the streaming lib resend frequency to drop down to 20s as the
      minimum, so that up to 2 retries can get sent on an http request.
    * Add further limits to failsafe tunnels.
    * Keep exploratory and client tunnel testing and building stats separate.
    * Only use the 60s period for throttling tunnel requests due to transient
      network overload.
    * Rebuild tunnels earlier (1-3m before expiration, by default)
    * Cache the next hop's routerInfo for participating tunnels so that the
      tunnel participation doesn't depend on the netDb.
    * Fixed a long standing bug in the streaming lib where we wouldn't always
      unchoke messages when the window size grows.
    * Make sure the window size never reaches 0 (duh)

2005-02-20  jrandom
    * Only build failsafe tunnels if we need them
    * Properly implement the selectNotFailingPeers so that we get a random
      selection of peers, rather than using the strictOrdering (thanks dm!)
    * Don't include too many "don't tell me about" peer references in the 
      lookup message - only send the 10 peer references closest to the target.

2005-02-19  jrandom
    * Only build new extra tunnels on failure if we don't have enough
    * Fix a fencepost in the tunnel building so that e.g. a variance of
      2 means +/- 2, not +/- 1 (thanks dm!)
    * Avoid an NPE on client disconnect
    * Never select a shitlisted peer to participate in a tunnel
    * Have netDb store messages timeout after 10s, not the full 60s (duh)
    * Keep session tags around for a little longer, just in case (grr)
    * Cleaned up some closing event issues on the streaming lib
    * Stop bundling the jetty 5.1.2 and updated wrapper.config in the update
      so that 0.4.* users will need to do a clean install, but we don't need 
      to shove an additional 2MB in each update to those already on 0.5.
    * Imported the susimail css (oops, thanks susi!)

* 2005-02-18  0.5 released

2005-02-17  jrandom
    * If the clock is adjusted during a job run, don't act as if the job took
      negative time.

2005-02-17  jrandom
    * Included the GPL'ed susimail 0.13 by default (thanks susi23!)

2005-02-17  jrandom
    * Fixed the braindead tunnel testing logic
    * If a large number of tunnels are failing (within the last 5-10 minutes)
      and the current tunnel pool's configuration allows it, randomly build a 
      zero hop tunnel to replace failed tunnels.
    * Enable postman's POP3 and SMTP tunnels by default

2005-02-16  jrandom
    * Added some error handling when the number of session tags exceeds the
      realistic capacity, dropping a random chunk of received tag sets and
      conducting some minor analysis of the remaining ones.  This is a part
      of a pretty serious error condition, and logs as CRIT (if/when people 
      see "TOO MANY SESSION TAGS!", please let me know the full log line it
      puts in the wrapper.log or /logs.jsp)
    * Update the addressbook to only write to the published hosts location
      if the addressbook's config contains "should_publish=true" (by default,
      it contains "should_publish=false")

2005-02-16  jrandom
    * (Merged the 0.5-pre branch back into CVS HEAD)
    * Replaced the old tunnel routing crypto with the one specified in
      router/doc/tunnel-alt.html, including updates to the web console to view
      and tweak it.  
    * Provide the means for routers to reject tunnel requests with a wider 
      range of responses:
        probabalistic rejection, due to approaching overload
        transient rejection, due to temporary overload
        bandwidth rejection, due to persistent bandwidth overload
        critical rejection, due to general router fault (or imminent shutdown)
      The different responses are factored into the profiles accordingly.
    * Replaced the old I2CP tunnel related options (tunnels.depthInbound, etc)
      with a series of new properties, relevent to the new tunnel routing code:
        inbound.nickname (used on the console)
        inbound.quantity (# of tunnels to use in any leaseSets)
        inbound.backupQuantity (# of tunnels to keep in the ready)
        inbound.length (# of remote peers in the tunnel)
        inbound.lengthVariance (if > 0, permute the length by adding a random # 
                                up to the variance.  if < 0, permute the length
                                by adding or subtracting a random # up to the 
                                variance)
        outbound.* (same as the inbound, except for the, uh, outbound tunnels
                    in that client's pool)
      There are other options, and more will be added later, but the above are
      the most relevent ones.
    * Replaced Jetty 4.2.21 with Jetty 5.1.2
    * Compress all profile data on disk.
    * Adjust the reseeding functionality to work even when the JVM's http proxy
      is set.
    * Enable a poor-man's interactive-flow in the streaming lib by choking the
      max window size.
    * Reduced the default streaming lib max message size to 16KB (though still
      configurable by the user), also doubling the default maximum window 
      size.
    * Replaced the RouterIdentity in a Lease with its SHA256 hash.
    * Reduced the overall I2NP message checksum from a full 32 byte SHA256 to
      the first byte of the SHA256.
    * Added a new "netId" flag to let routers drop references to other routers
      who we won't be able to talk to.
    * Extended the timestamper to get a second (or third) opinion whenever it 
      wants to actually adjust the clock offset.
    * Replaced that kludge of a timestamp I2NP message with a full blown 
      DateMessage.
    * Substantial memory optimizations within the router and the SDK to reduce
      GC churn.  Client apps and the streaming libs have not been tuned, 
      however.
    * More bugfixes than you can shake a stick at.

2005-02-13  jrandom
    * Updated jbigi source to handle 64bit CPUs.  The bundled jbigi.jar still 
      only contains 32bit versions, so build your own, placing libjbigi.so in 
      your install dir if necessary.  (thanks mule!)
    * Added support for libjbigi-$os-athlon64 to NativeBigInteger and CPUID
      (thanks spaetz!)

2005-02-10  smeghead
    * Initial check-in of Pants, a new utility to help us manage our 3rd-party
      dependencies (Fortuna, Jetty, Java Service Wrapper, etc.). Some parts of
      Pants are still non-functional at this time so don't mess with it yet
      unless you want to potentially mangle your working copy of CVS.

2005-02-09  duck
    * Allow an unneeded newline in the SAM client connection without
      disconnecting.

2005-02-07  jrandom
    * Fixed a race in the streaming lib's delayed flush algorithm (thanks anon!)

2005-02-06  Sugadude
    * Added a filter to the addressbook to remove entries that dont end in ".i2p"

2005-02-03  smeghead
    * Added Ant buildfile in apps/fortuna for creating a custom Fortuna PRNG jar
      library from GNU Crypto's CVS HEAD sources.

2005-01-26  smeghead
    * i2pProxy.pac, i2pbench.sh, and i2ptest.sh are now shipped with the dist
      packages and installed to $i2pinstalldir/scripts.
    * Added command line params to i2ptest.sh and i2pbench.sh: --gij to run them
      using gij + libgcj, and --sourcedir to run them from the source tree
      instead of the installation directory.
    * Fixed unreachable for() statement clause in the KBucketImpl class that was
      causing gcj to toss a compilation warning (jrandom++).

2005-01-26  smeghead
    * Added a couple of scripts, i2ptest.sh and i2pbench.sh, to manage the core
      tests and benchmarks.
    * Routerconsole now builds under gcj 3.4.3.
    * Corrected divide by zero error in TunnelId class under gcj (jrandom++).

2005-01-25  smeghead
    * Tweaked some classes to enable gcj 3.4.3 to compile the router and
      supporting apps (except for the routerconsole which is still being
      investigated).

2005-01-24  smeghead
    * C#-ification of sam-sharp: interface greatly simplified using delegates
      and events; SamBaseEventHandler provides basic implementation and helper
      methods but is now optional.
    * NAnt buildfile and README added for sam-sharp.

2005-01-23  smeghead
    * Port the java SAM client library to mono/C# and released into the 
      public domain.  The 0.1 version of this port is available in CVS as
      i2p/apps/sam/csharp/src/I2P.SAM.Client.  The other nonfunctional C#
      library has been removed.

2005-01-21  Jhor
    * Updated jbigi build scripts for OSX.

2005-01-21  jrandom
    * Added support for OSX to the NativeBigInteger code so that it will look
      in the classpath for libjbigi-osx-none.jnilib.  At the moment, that file
      is not bundled with the shipped jbigi.jar yet though.

2005-01-18  jrandom
    * Increased the max # session tags maintained and decreased slightly the
      period over which they are gathered.

2005-01-17  jrandom
    * Added meaningful support for adjusting the preferred message size in the
      streaming lib by setting the i2p.streaming.maxMessageSize=32768 (or 
      whatever).  The other side will mimic a reduction (but never an increase).
    * Always make sure to use distinct ConnectionOption objects for each 
      connection (duh)
    * Reduced the default ACK delay to 500ms on in the streaming lib
    * Only shrink the streaming window once per window
    * Don't bundle a new jetty.xml with updates
    * Catch another local routerInfo corruption issue on startup.

2005-01-15  cervantes
    * Added support to the eepproxy for URLs such as 
      http://localhost:4444/eepproxy/foo.i2p/bar/baz or even
      http://localhost:4444/eepproxy/foo.i2p/?i2paddresshelper=base64

2005-01-15  jrandom
    * Caught a series of (previously unhandled) errors caused by requeueing 
      messages that had timed out on the TCP transport (thanks mae^!)
    * Reduce the barrier to dropping session tags on streaming lib resends -
      every fourth send should drop the tags, forcing ElGamal encryption.  This
      will help speed up the recovery after a disconnect, rather than the drop
      every fifth send.

* 2005-01-06  0.4.2.6 released

2005-01-06  jrandom
    * Added a startup message to the addressbook, printing its version number
      to stdout (which is sent to wrapper.config) when it loads.
    * Updated the addressbook to reread the config file periodically
    * Added orion.i2p to the list of eepsites on the default homepage

2005-01-05  jrandom
    * Handle unexpected network read errors more carefully (thanks parg!)
    * Added more methods to partially compare (DataHelper) and display 
      arrays (Base64.encode).
    * Exposed the AES encryptBlock/decryptBlock on the context.aes()
    * Be more generous on the throttle when just starting up the router
    * Fix a missing scheduled event in the streaming lib (caused after reset)
    * Add a new DisconnectListener on the I2PSocketManager to allow 
      notification of session destruction.
    * Make sure our own router identity is valid, and if it isn't, build a new
      one and restart the router.  Alternately, you can run the Router with 
      the single command line argument "rebuild" and it will do the same.

2004-12-31  ragnarok
    * Integrated latest addressbook changes (2.0.3) which include support for 
      deploying as a .war file with no existing addressbook configuration.
    * Updated main build process to bundle the addressbook.war in the 
      i2pinstall.jar and i2pupdate.zip.

2004-12-31  jrandom
    * Speling fxi (thanks digum!)
    * Bugfix for the I2PTunnel web interface so that it now properly launches
      newly added tunnels that are defined to be run on startup (thanks ugha!)

2004-12-30  jrandom
    * Revised the I2PTunnel client and httpclient connection establishment 
      throttles.  There is now a pool of threads that build the I2PSocket
      connections with a default size of 5, configurable via the I2PTunnel 
      client option 'i2ptunnel.numConnectionBuilders' (if set to 0, it will
      not throttle the number of concurrent builders, but will launch a thread
      per socket during establishment).  In addition, sockets accepted but
      not yet allocated to one of the connection builders will be destroyed
      after 30 seconds, configurable via 'i2ptunnel.maxWaitTime' (if set to
      0, it will wait indefinitely).

2004-12-29  jrandom
    * Imported Ragnarok's addressbook source (2.0.2) which is built but not
      deployed in the i2pinstall.jar/i2pupdate.zip (yet).
    * Don't treat connection inactivity closure as a connection error.

2004-12-29  jrandom
    * Add in a new keepalive event on each TCP connection, proactively sending
      a (tiny) time message every minute or two, as well as killing the 
      connection if no message has been fully sent within 5 minutes or so.  
      This should help deal with hung connections from IP address changes.

2004-12-28  jrandom
    * Cleaned up the resending and choking algorithm in the streaming lib.
    * Removed the read timeout override for I2PTunnel's httpclient, allowing
      it to use the default for the streaming lib.
    * Revised ack triggers in the streaming lib.
    * Logging.

* 2004-12-21  0.4.2.5 released

2004-12-21  jrandom
    * Track a new stat for expired client leases (client.leaseSetExpired).

2004-12-21  jrandom
    * Cleaned up the postinstall/startup scripts a bit more to handle winME,
      and added windows info to the headless docs. (thanks ardvark!)
    * Fixed a harmless (yet NPE inspiring) race during the final shutdown of 
      a stream (thanks frosk!)
    * Add a pair of new stats for monitoring tunnel participation - 
      tunnel.participatingBytesProcessed (total # bytes transferred) and
      tunnel.participatingBytesProcessedActive (total # bytes transferred for
      tunnels whose byte count exceed the 10m average).  This should help 
      further monitor congestion issues.
    * Made the NamingService factory property public (thanks susi!)

2004-12-20  jrandom
    * No longer do a blocking DNS lookup within the jobqueue (thanks mule!)
    * Set a 60s dns cache TTL, instead of 0s.  Most users who used to use
      dyndns/etc now just use IP autodetection, so the old "we need ttl=0"
      reasoning is gone.

2004-12-19  jrandom
    * Fix for a race on startup wrt the new stats (thanks susi!)

2004-12-19  jrandom
    * Added three new stats - router.activePeers, router.fastPeers, and 
      router.highCapacityPeers, updated every minute

2004-12-19  jrandom
    * Added a new i2ptunnel type: 'httpserver', allowing you to specify what
      hostname should be sent to the webserver.  By default, new installs will
      have an httpserver pointing at their jetty instance with the spoofed 
      name 'mysite.i2p' (editable on the /i2ptunnel/edit.jsp page).

2004-12-19  scintilla
    * Convert native jcpuid code from C++ to C. This should alleviate build
      problems experienced by some users.

* 2004-12-18  0.4.2.4 released

2004-12-16  jrandom
    * Catch another oddball case for a reset connection in the streaming lib.
    * Add a dumpprofile.jsp page, called with ?peer=base64OfPeerHash, which
      dumps the current state of that peer's profile.  Instead of the full 
      base64, you can pass in however many characters you have and it will
      return the first match found.

2004-12-16  jrandom
    * Remove the randomized factor in the tunnel rejection by bandwidth -
      we now accept the request if we've allocated less than our limit
      and reject it if we've allocated more.
    * Stick to the standard capacity scale on tunnel rejection, even for 
      the 10m period.
    * Build the time message at the very last possible moment

2004-12-15  jrandom
    * Handle hard disconnects more gracefully within the streaming lib, and
      log unmonitored events more aggressively.
    * If we drop a peer after connection due to clock skew, log it to the
      /logs.jsp#connectionlogs with relevent info.  In addition, toss it in
      the stat 'tcp.disconnectAfterSkew'.
    * Fixed the formatting in the skew display
    * Added an ERROR message that is fired once after we run out of 
      routerInfo files (thanks susi!)
    * Set the connect timeout equal to the streaming lib's disconnect timeout
      if not already specified (the I2PTunnel httpclient already enforces a
      60s connect timeout)
    * Fix for another connection startup problem in the streaming lib.
    * Fix for a stupid error in the probabalistic drop (rand <= P, not > P)
    * Adjust the capacity calculations so that tunnel failures alone in the 
      last 10m will not trigger a 0 capacity rank.

2004-12-14  jrandom
    * Periodically send a message along all I2NP connections with the router's
      current time, allowing the receiving peer to determine that the clock 
      has skewed too much, and hence, disconnect.  For backwards compatability
      reasons, this is being kludged into a DeliveryStatusMessage (ewww).  The
      next time we have a backwards compatability break, we can put in a proper
      message setup for it.

2004-12-14  jrandom
    * Reenable the probabalistic drop on the TCP queues to deal with good old
      fashioned bandwidth limiting.  However, by default the probability is
      rigged to reserve 0% of the queue free - meaning we just aggressively
      fail messages in the queue if we're transferring too slowly.  That
      reservation factor can be increased with 'tcp.queueFreeFactor=0.25'
      (or whatever) and the drop code can be disabled with the parameter
      'tcp.dropProbabalistically=false'.
    * Still penalize a peer on tunnel failure, but don't immediately drop 
      their capacity to 0.
    * More aggressively ACK duplicates
    * Randomize the timestamper period
    * Display the clock skew on the connection logs when a peer sends it.
    * Allow the timestamper to fix skews of up to 10 minutes
    * Logging

2004-12-13  jrandom
    * Added some error checking on the new client send job (thanks duck!)
    * Implemented tunnel rejection based on bandwidth usage (rejecting tunnels
      proportional to the bytes allocated in existing tunnels vs the bytes 
      allowed through the bandwidth limiter).
    * Enable a new configuration parameter for triggering a tunnel rebuild 
      (tunnel.maxTunnelFailures), where that is the max allowed test failures
      before killing the tunnel (default 0).
    * Gather more data that we rank capacity by (now we monitor and balance the
      data from 10m/30m/60m/1d instead of just 10m/60m/1d).
    * Fix a truncation/type conversion problem on the long term capacity 
      values (we were ignoring the daily stats outright)

2004-12-11  jrandom
    * Fix the missing HTTP timeout, which was caused by the deferred syn used
      by default.  This, in turn, meant the I2PSocket creation doesn't fail
      on .connect, but is unable to transfer any data in any direction.  We now
      detect that condition for the I2PTunnelHTTPClient and throw up the right
      error page.
    * Logging

2004-12-11  jrandom
    * Use a simpler and less memory intensive job for processing outbound 
      client messages when the session is in mode=bestEffort.  We can 
      immediately discard the data as soon as its sent the first time, 
      rather than wait for an ack, since we will never internally resend.
    * Reduce some synchronization to avoid a rare deadlock
    * Replaced 'localhost' with 127.0.0.1 in the i2ptunnel config, and special
      case it within the tunnel controller.
    * Script cleanup for building jbigi/jcpuid
    * Logging

* 2004-12-08  0.4.2.3 released

2004-12-08  jrandom
    * Revised the buffering when reading from the SAM client and writing 
      to the stream.  Also added a thread (sigh) so we don't block the
      SAM client from giving us more messages for abnormally long periods
      of time.
    * Display the router version in the logs on startup (oft requested)
    * Fix a race during the closing of a messageOutputStream

2004-12-06  jrandom
    * Don't do a 'passive flush' while there are already outbound messages 
      unacked.
    * Show the reseed link if up to 10 peers profiles are active (thanks 
      dburton!)

2004-12-06  jrandom
    * Don't propogate streaming connection failures out to the SAM bridge as
      fatal errors.
    * Dont barf on repeated I2CP closure.

2004-12-05  jrandom
    * Explicitly use "127.0.0.1" to bind the I2CP listener, not the JVM's
      getLocalhost call

2004-12-05  jrandom
    * Default the I2CP listener to localhost only, unless overridden by 
      i2cp.tcp.bindAllInterfaces=true (thanks dm!)
    * More SAM fixes for things recently broken (whee)

2004-12-05  jrandom
    * Fix the recently broken SAM bridge (duh)
    * Add a new pair of SAM apps - net.i2p.sam.client.SAMStreamSink and
      net.i2p.sam.client.SAMStreamSend, mirroring the streaming lib's
      StreamSink and StreamSend apps for transferring files.
    * Make the passive flush timer fire more frequently.

2004-12-05  jrandom
    * Fixed some links in the console (thanks ugha!) and the javadoc 
      (thanks dinoman!)
    * Fix the stream's passive flush timer (oh, its supposed to work?)

2004-12-03  jrandom
    * Toss in a small pool of threads (3) to execute the events queued up with
      the SimpleTimer, as we do currently see the occational event 
      notification spiking up to a second or so.
    * Implement a SAM client API in java, useful for event based streaming (or
      for testing the SAM bridge)
    * Added support to shut down the SAM bridge on OOM (useful if the SAM 
      bridge is being run outside of the router).
    * Include the SAM test code in the sam.jar
    * Remove an irrelevent warning message from SAM, which was caused by 
      perfectly normal operation due to a session being closed.
    * Removed some unnecessary synchronization in the streaming lib's 
      PacketQueue
    * More quickly clean up the memory used by the streaming lib by 
      immediately killing each packet's resend job as soon as it is ACKed (or
      cancelled), so that there are no longer any valid pointers to the 
      (potentially 32KB) packet.
    * Fixed the timestamps dumped to stdout when debugging the PacketHandler.
    * Drop packets that would expand our inbound window beyond our maximum 
      buffer size (default 32 messages)
    * Always read the ACK/NACK data from the verified packets received, even
      if we are going to drop them
    * Always adjust the window when there are messages ACKed, though do not
      change its size except as before.
    * Streamlined some synchronization in the router's I2CP handling
    * Streamlined some memory allocation in the SAM bridge
    * Default the streaming lib to disconnect on inactivity, rather than send
      an empty message.

2004-12-01  jrandom
    * Fix for a race in the streaming lib as caused by some odd SAM activity

* 2004-12-01  0.4.2.2 released

2004-12-01  jrandom
    * Fixed a stupid typo that inadvertantly allowed persistent HTTP 
      connections to work (thanks duck!)
    * Make sure we override the inactivity timeout too

* 2004-12-01  0.4.2.1 released

2004-12-01  jrandom
    * Strip out any of the Accept-* HTTP header lines, and always make sure to
      include the forged User-agent header.
    * Adjust the default read timeout on the eepproxy to 60s, unless 
      overridden.
    * Minor tweak on stream shutdown.

2004-11-30  jrandom
    * Render the burst rate fields on /config.jsp properly (thanks ugha!)
    * Build in a simple timeout to flush data queued into the I2PSocket but
      not yet flushed.
    * Don't explicitly flush after each SAM stream write, but leave it up to 
      the [nonblocking] passive flush.
    * Don't whine about 10-99 connection events occurring in a second
    * Don't wait for completion of packets that will not be ACKed (duh)
    * Adjust the congestion window, even if the packet was resent (duh)
    * Make sure to wake up any blocking read()'s when the MessageInputStream
      is close()ed (duh)
    * Never wait more than the disconnect timeout for a write to complete

2004-11-29  jrandom
    * Minor fixes to avoid unnecessary errors on shutdown (thanks susi!)

2004-11-29  jrandom
    * Reduced contention for local client delivery
    * Drop the new code that munges the wrapper.config.  Instead, updates that
      need to change it will include their own wrapper.config in the 
      i2pupdate.zip, overwriting the existing file.  If the file 
      "wrapper.config.updated" is included, it is deleted at first opportunity
      and the router shut down, displaying a notice that the router must be 
      started again cleanly to allow the changes to the wrapper.config to take
      effect.
    * Properly stop accept()ing I2PSocket connections if we close down the 
      session (duh).
    * Make sure we cancel any outstanding Packets in flight when a connection
      is terminated (thanks susi!)
    * Split up the I2PTunnel closing a little further.

2004-11-28  jrandom
    * Accept IP address detection changes with a 2-out-of-3 minimum.
    * As long as the router is up, keep retrying to bind the I2CP listener.
    * Decrease the java service wrapper ping frequency to once every 10 
      minutes, rather than once every 5 seconds.

2004-11-27  jrandom
    * Some cleanup and bugfixes for the IP address detection code where we 
      only consider connections that have actually sent and received messages
      recently as active, rather than the mere presence of a TCP socket as 
      activity.

2004-11-27  jrandom
    * Removed the I2PTunnel inactivity timeout thread, since the new streaming
      lib can do that (without an additional per-connection thread).
    * Close the I2PTunnel forwarder threads more aggressively

2004-11-27  jrandom
    * Fix for a fast loop caused by a race in the new streaming library (thanks
      DrWoo, frontier, pwk_, and thetower!)
    * Minor updates to the SimpleTimer and Connection to help track down a
      high CPU usage problem (dumping debug info to stdout/wrapper.log if too
      many events/tasks fire in a second)
    * Minor fixes for races on client disconnects (causing NPEs)

* 2004-11-26  0.4.2 released

2004-11-26  jrandom
    * Enable the new streaming lib as the default.  That means, for any 
      substantial definition, it is NOT BACKWARDS COMPATIBLE.  

2004-11-25  jrandom
    * Revised the installer to include start menu and desktop shortcuts for
      windows platforms, including pretty icons (thanks DrWoo!)
    * Allow clients specified in clients.config to have an explicit startup
      delay.
    * Update the default install to launch a browser pointing at the console
      whenever I2P starts up, rather than only the first time it starts up
      (configurable on /configservice.jsp, or in clients.config)
    * Bugfix to the clock skew checking code to monitor the delta between
      offsets, not the offset itself (duh)
    * Router console html update
    * New (and uuuuugly) code to verify that the wrapper.config contains 
      the necessary classpath entries on update.  If it has to update the
      wrapper.config, it will stop the JVM and service completely, since the
      java service wrapper doesn't reread the wrapper.config on JVM restart -
      requiring the user to manually restart the service after an update.
    * Increase the TCP connection timeout to 30s (which is obscenely long)

2004-11-22  jrandom
    * Update to the SAM bridge to reduce some unnecessary memory allocation.
    * New stat to keep track of slow jobs (ones that take more than a second
      to excute).  This is published in the netDb as jobQueue.jobRunSlow

2004-11-21  jrandom
    * Update the I2PTunnel web interface to include an option for the new 
      streaming lib (which is ignored until the 0.4.2 release).
    * Revised the I2PTunnel web interface to keep the I2CP options of client 
      and httpclient tunnels in sync, as they all share the same I2CP session.

2004-11-21  jrandom
    * Only allow small clock skews after the first 10 minutes of operation
      (to prevent later network lag bouncing us way off course - yes, we
      really need an NTP impl to balance out the network burps...)
    * Revamp the I2PTunnel web interface startup process so that everything
      is shown immediately, so that different pieces hanging don't hang
      the rest, and other minor bugfixes.
    * Take note of SAM startup error (in case you're already running a SAM
      bridge...)
    * Increase the bandwidth limiter burst values available to 10-60s (or
      whatever is placed in /configadvanced.jsp, of course)

2004-11-21  jrandom
    * Allow end of line comments in the hosts.txt and other config files,
      using '#' to begin the comments (thanks susi!)
    * Add support to I2PTunnel's 'client' feature for picking between multiple
      target destinations (e.g. 'client 6668 irc.duck.i2p,irc.baffled.i2p')
    * Add a quick link on the left hand nav to reseed if there aren't enough
      known peers, as well as link to the config page if there are no active 
      peers.  Revised config page accordingly.

2004-11-21  jrandom
    * Destroy ElGamal/AES+SessionTag keys after 15 minutes of inactivity 
      rather that every 15 minutes, and increase the warning period in which
      we refresh tags from 30s to 2 minutes.
    * Bugfix for a rare problem closing an I2PTunnel stream where we'd fail
      to close the I2PSocket (leaving it to timeout).

2004-11-19  jrandom
    * Off-by-one fix to the tunnel pool management code, along side some 
      explicit initialization.  This can affect clients whose lengths are
      shorter than the router's default (thanks duck!)

2004-11-17  jrandom
    * Fix to propogate i2psocket options into the SAM bridge correctly (thanks
      Ragnarok!)

2004-11-17  jrandom
    * Minor logging update.

2004-11-16  jrandom
    * Clean up the propogation of i2psocket options so that various streaming
      libs can honor them more precisely

2004-11-16  jrandom
    * Minor logging update

2004-11-14  jrandom
    * Fix a long standing leak in I2PTunnel (hanging on to i2psocket objects)
    * Fix a leak injected into the SimpleTimer
    * Fix a race condition in the tunnel message handling

2004-11-13  jrandom
    * Added throttles on how many I2PTunnel client connections we open at once
    * Replaced some buffered streams in I2PTunnel with unbuffered streams, as 
      the streaming library used should take care of any buffering.
    * Added a cache for some objects used in I2PTunnel, especially useful when
      there are many short lived connections.
    * Trimmed the SimpleTimer's processing a bit

2004-11-10  jrandom
    * Allow loading the (mini)streaming connection options from the 
      environment.
    * More defensive programming in the DSA implementation.

2004-11-08  jrandom
    * Remove spurious flush calls from I2PTunnel, and work with the 
      I2PSocket's output stream directly (as the various implementations
      do their own buffering).
    * Another pass at a long standing JobQueue bug - dramatically simplify
      the job management synchronization since we dont need to deal with
      high contention (unlike last year when we had dozens of queue runners
      going at once).
    * Logging

2004-11-08  jrandom
    * Make the SAM bridge more resiliant to bad handshakes (thanks duck!)

* 2004-11-06  0.4.1.4 released

2004-11-06  jrandom
    * Expose a drop down on the /configclients.jsp to enter the outbound 
      tunnel depth.
    * Improved *hosts.txt loading
    * Explicitly override the JVM's timezone settings to use GMT so that 
      any client applications which use timezones won't leak sensitive
      data (thanks gott!)
    * Bundle sam.jar in the update (thanks duck!)

2004-11-06  jrandom
    * Fix for a long standing synchronization bug in the SDK that in rare 
      instances can add a few seconds of lag.

2004-11-05  jrandom
    * Bugfixes and unit tests for the SAM bridge to handle quoted message
      parameters, verify proper operation after multiple session lifetimes,
      as well as some synchronization problems.
    * New properties method on the DataHelper class.
    * Address a race on fast disconnecting clients

2004-11-02  jrandom
    * Fix for a long standing synchronization bug in the JobQueue (and added
      some kooky flags to make sure it stays dead)
    * Update the ministreaming lib to force mode=guaranteed if the default
      lib is used, and mode=best_effort for all other libs.

2004-11-02  jrandom
    * Fixed up the configuration overrides for the streaming socket lib 
      integration so that it properly honors env settings.
    * More memory usage streamlining (last major revamp for now, i promise)

2004-11-01  jrandom
    * Increase the tunnel test timeout rapidly if our tunnels are failing.
    * Honor message expirations for some tunnel jobs that were prematurely
      expired.
    * Streamline memory usage with temporary object caches and more efficient
      serialization for SHA256 calculation, logging, and both I2CP and I2NP
      message handling.
    * Fix some situations where we forward messages too eagerly.  For a 
      request at the tunnel endpoint, if the tunnel is inbound and the target 
      is remote, honor the message by tunnel routing the data rather than
      sending it directly to the requested location.

2004-10-30  jrandom
    * Cache the temporary objects used in the AES encryption/decryption
      process so that AES doesn't require any memory allocation to process
      data.
    * Dramatically reduce memory usage within various crypto implementations
      by avoiding unnecessary (though simplifying) buffers.
    * If we specify some tags to be sent in an I2CP message explicitly, use
      only those, not those plus a new set (otherwise we aren't sure on ACK
      which set was delivered)
    * Allow configuration for the partial send timeout (how long before 
      resending a message down a different tunnel in a lease).  This can be
      updated with the "router.clientPartialSendTimeout" router config prop.
    * Logging

2004-10-29  jrandom
    * Strip the Referer, Via, and From headers completely, rather than 
      inserting a bogus value ("i2p").  This should help with the use of
      SnipSnap and Geeklog (thanks nickster and DrWoo!)

2004-10-27  jrandom
    * Fix a strange race condition on i2cp client disconnect.
    * win98 startup fixes (thanks tester-1 and ardvark!)
    * include build scripts for the new streaming lib (which is NOT ready
      for use yet, but you can hack around with it)

2004-10-24  jrandom
    * Allow explicit inclusion of session tags in the SDK, enabling the
      resending of tags bundled with messages that would not otherwise
      be ACKed.
    * Don't force mode=guaranteed for end to end delivery - if mode=bestEffort
      no DeliveryStatusMessage will be bundled (and as such, client apps using
      it will need to do their own session tag ack/nack).
    * Handle client errors when notifying them of message availability.
    * New StreamSinkSend which sends a file to a destination and disconnects.
    * Update the I2PSocketManagerFactory to build the specific 
      I2PSocketManager instance based on the "i2p.streaming.manager" property,
      containing the class name of the I2PSocketManager to instantiate.

2004-10-23  jrandom
    * Minor ministreaming lib refactoring to simplify integration of the full
      streaming lib.
    * Minor bugfixes to data structure serialization.

* 2004-10-18  0.4.1.3 released

2004-10-18  jrandom
    * Allow sending messages with a section of a byte array.
    * Reduced stats published.

2004-10-17  jrandom
    * Don't b0rk on whitespace in the router address.

2004-10-16  jrandom
    * More aggressively reduce the capacity of peers if their tunnels are
      failing so that we move off them quicker.
    * Simplify some data structure serialization for reuse in the streaming
      lib, as well as add support for signing and verifying partial byte 
      arrays.
    * Logging updates

2004-10-16  jrandom
    * Increased the default minimum tunnel test time to 5 seconds, since we
      still see the occational message processing time spike to 2 seconds.
    * Update the SimpleTimer to allow rescheduling a task thats already 
      queued (useful for the new streaming lib).

2004-10-15  jrandom
    * Replaced old minimum tunnel test timeout of 1s with a configurable
      value (router.config property "router.tunnelTestMinimum", with the
      default of 2s).

2004-10-14  jrandom
    * Tunnel rejection is no longer a sign of an overwhelmingly loaded
      peer, so don't use it as a key point of the IsFailing calculator.
      We still use it as a key point of the Capacity calculator, however.

2004-10-14  jrandom
    * Allow for a configurable tunnel "growth factor", rather than trying
      to achieve a steady state.  This will let us grow gradually when
      the router is needed more, rather than blindly accepting the request
      or arbitrarily choking it at an averaged value.  Configure this with
      "router.tunnelGrowthFactor" in the router.config (default "1.5").
    * Adjust the tunnel test timeouts dynamically - rather than the old
      flat 30s (!!!) timeout, we set the timeout to 2x the average tunnel
      test time (the deviation factor can be adjusted by setting 
      "router.tunnelTestDeviation" to "3.0" or whatever).  This should help
      find the 'good' tunnels.
    * Added some crazy debugging to try and track down an intermittent hang.

2004-10-13  jrandom
    * Fix the probabalistic tunnel reject (we always accepted everything, 
      since the docs on java.util.Random.nextDouble() are wrong..)
    * Fixed a race on startup (thanks Quadn!)

2004-10-12  jrandom
    * Disable the probabalistic drop by default (enable via the router config
      property "tcp.dropProbabalistically=true")
    * Disable the actual watchdog shutdown by default, but keep track of more 
      variables and log a lot more when it occurs (enable via the router 
      config property "watchdog.haltOnHang=true")
    * Implement some tunnel participation smoothing by refusing requests 
      probabalistically as our participating tunnel count exceeds the previous
      hour's, or when the 10 minute average tunnel test time exceeds the 60 
      minute average tunnel test time.  The probabilities in both cases are 
      oldAverage / #current, so if you're suddenly flooded with 200 tunnels
      and you had previously only participated in 50, you'll have a 25% chance
      of accepting a subsequent request.

* 2004-10-10  0.4.1.2 released

2004-10-10  cervantes
    * Update the I2PTunnel HTTP proxy to strip out the i2paddresshelper from
      the request.

2004-10-09  jrandom
    * Added a watchdog timer to do some baseline liveliness checking to help 
      debug some odd errors.
    * Added a pair of summary stats for bandwidth usage, allowing easy export
      with the other stats ("bw.sendBps" and "bw.receiveBps")
    * Trimmed another memory allocation on message reception.

2004-10-08  jrandom
    * Revamp the AESInputStream so it doesn't allocate any temporary objects 
      during its operation.

2004-10-08  jrandom
    * Don't kill the establisher threads during a soft restart.
    * Attempt to validate the peer's routerInfo earlier during handshaking.
    * Revamp the AESOutputStream so it doesn't allocate any temporary objects 
      during its operation.

2004-10-07  jrandom
    * Reimplement the I2NP reading with less temporary memory allocation.
      There is still significant GC churn, especially under load, but this
      should help.
    * Catch some oddball errors in the transport (message timeout while 
      establishing).

2004-10-07  jrandom
    * Expire queued messages even when the writer is blocked.
    * Reimplement most of the I2NP writing with less temporary memory 
      allocations (I2NP reading still gobbles memory).

2004-10-06  jrandom
    * Implement an active queue management scheme on the TCP transports,
      dropping messages probabalistically as the queue fills up.  The 
      estimated queue capacity is determined by the rate at which messages 
      have been sent to the peer (averaged at 1, 5, and 60m periods).  As 
      we exceed 1/2 of the estimated capacity, we drop messages throughout
      the queue probabalistically with regards to their size.  This is based
      on RFC 2309's RED, with the minimum threshold set to 1/2 the 
      estimated connection capacity.  We may want to consider using a send
      rate and queue size measured across all connections, to deal with our
      own local bandwidth saturation, but we'll try the per-con metrics first.

2004-10-06  jrandom
    * Enable explicit disabling of the systray entirely for windows machines
      with strange configurations: add -Dsystray.disable=true to the java 
      command line.  (thanks mihi!)

2004-10-05  jrandom
    * Allow peers on the same LAN to communicate with each other safely even
      when they cannot talk to each other through the external address.

2004-10-05  jrandom
    * Display how much time is left before the graceful shutdown is complete.
    * Debug some improperly failed messages on timeout or disconnection.

2004-10-05  jrandom
    * Don't go into a fast busy if an I2PTunnel 'server' is explicitly killed
      (thanks mule!)
    * Handle some more error conditions regarding abruptly closing sockets 
      (thanks Jonva!)

2004-10-04  jrandom
    * Update the shitlist to reject a peer for an exponentially increasing 
      period of time (with an upper bounds of an hour).  
    * Various minor stat and debugging fixes

2004-10-03  jrandom
    * Add a new stat logging component to optionally dump the raw stats to 
      disk as they are generated, rather than rely upon the summarized data.
      By default, this is off, but the router property "stat.logFilters" can
      be set to a comma delimited list of stats (e.g. "client.sendAckTime")
      which will be written to the file "stats.log" (or whatever the property
      "stat.logFile" is set to).  This can also log profile related stats,
      such as "dbResponseTime" or "tunnelTestResponseTime".

2004-10-02  jrandom
    * Assure that we quickly fail messages bound for shitlisted peers.
    * Address a race on startup where the first peer contacted could hang the
      router (thanks Romster!)
    * Only whine about an intermittent inability to query the time server once

2004-10-02  jrandom
    * Command line utility to verify a peer's reachability - simply run
      net.i2p.router.transport.tcp.ConnectionHandler hostname port# and it
      will print out whether that peer is reachable or not (using a simple
      verification handshake).

* 2004-10-01  0.4.1.1 released

2004-10-01  jrandom
    * Handle partial reseeds, caused by seeds going away before the download
      completes (thanks Sugadude!)

2004-10-01  jrandom
    * Explicitly refuse IPv6 addresses, since only some peers support 
      them and we want fully reachable peers.

2004-10-01  jrandom
    * Additional error handling for a variety of transport layer errors.

* 2004-09-30  0.4.1 released (not backwards compatible)

2004-09-30  jrandom
    * Bundle the configuration necessary to run an eepsite out of the box
      with Jetty - simply edit ./eepsite/docroot/index.html and give people
      the key listed on the I2PTunnel configuration page, and its up.
    * Router console cleanup, and some (off by default) tunnels - 
      smtp.postman.i2p (port 7659), pop.postman.i2p (port 7660), and
      irc.baffled.i2p (port 7661)

2004-09-29  jrandom
    * Always wipe the Jetty work directory on startup, so that web updates
      are reflected immediately (Jetty does not honor the cache across
      multiple executions)

2004-09-27  jrandom
    * Limit the number of connection tags saved to 10,000.  This is a huge 
      limit, but consumes no more than 1MB of RAM.  For now, we drop them 
      randomly after reaching that size, forcing those dropped peers to use
      a full DH negotiation.
    * HTML cleanup in the console.

2004-09-26  jrandom
    * Complete rewrite of the TCP transport with IP autodetection and 
      low CPU overhead reconnections.  More concise connectivity errors
      are listed on the /oldconsole.jsp as well.  The IP autodetection works
      by listening to the first person who tells you what your IP address is
      when you have not defined one yourself and you have no other TCP 
      connections.
    * Update to the I2NP message format to add transparent verification at
      the I2NP level (beyond standard TCP verification).
    * Remove a potential weakness in our AESEngine's safeEncrypt and safeDecrypt
      implementation (rather than verifying with E(H(key)), we now verify with
      E(H(iv))).
    * The above changes are NOT BACKWARDS COMPATIBLE.
    * Removed all of the old unused PHTTP code.
    * Refactor various methods and clean up some javadoc.

2004-09-21  jrandom
    * Have two tiers of hosts.txt files - the standard "hosts.txt" and
      the new "userhosts.txt".  Updates to I2P will only overwrite the former,
      but values stored in the later take precedence.  Both are queried on
      lookup.

2004-09-16  jrandom
    * Refactor the TCP transport to deal with changing identities gracefully,
      and to prevent some wasted effort by keeping track of what host+port
      combinations we are connected to (rather than just the identities).  Also
      catch a few configuration errors earlier.
    * Removed no longer relevent methods from the Transport API that were 
      exposing ideas that probably shouldn't be exposed.
    * Removed the 0.4.0.1 specific files from i2pupdate.zip (relating to script
      updates)

2004-09-13  jrandom
    * Update for the SDK reconnection to deal with overflow.
    * Web improvements (@ not # on the /logs.jsp [thanks ugha!] and fixed the 
      rounding on lifetime bandwidth used [thanks gott!]).

* 2004-09-08  0.4.0.1 released

2004-09-08  jrandom
    * Updated the "Active:" peer count to display the # of connections as well
      as the number of recently active router identities.
    * Implement some basic updating code - on startup, if there is a file named 
      "i2pupdate.zip" in the I2P installation directory, extract it, delete it,
      then restart.
    * Added an ugly little script to allow launching the router on win9x 
      machines without a dos box (using javaw to run a .bat file).
    * Logging updates.
    * Updated VERSION constants to 0.4.0.1

2004-09-08  hypercubus
    * Bugfix: Running the installer as a non-privileged user on Red Hat (and
      hopefully any other affected *nix systems) now properly discards non-
      essential directories after installation.
    * Support for Win9x in the installer and postinstall.bat.
    * Changed the name of the default installation directory on all platforms
      from "I2P" to "i2p" in the installer.
    * Changed "wrapper.conf" to "wrapper.config" for naming consistency with the
      other configuration files.

2004-09-07  cervantes:
    * Proxy recursion disabled by default (strict)
    * Password Authentication for session commands
    * Support for http://path?i2paddresshelper=BASE64
    * Support for http://i2p/BASE64/path syntax

2004-09-07  jrandom
    * Make sure that peers placed in the 'fast' group are ones we both know
      how to reach and have been able to reach recently.  These peers may 
      still be placed in the 'high capacity' group however (though that group
      is only queried if the 'fast' group is too small)
    * Include some updates to the ProgileOrganizer's CLI.

2004-09-07  jrandom
    * Disable the timestamper by default for all applications except the router
      (enable via -Dtime.disabled=false)
    * Simplify the retrieval of the full destination with text based browsers.
    * Bundle the updated wrapper.config and hosts.txt in the i2pupdate.tar.bz2

2004-09-07  jrandom
    * Write the native libraries to the current directory when they are loaded 
      from a resource, and load them from that file on subsequent runs (in 
      turn, we no longer *cough* delete the running libraries...)
    * Added support for a graceful restart.
    * Added new pseudo-shutdown hook specific to the router, allowing 
      applications to request tasks to be run when the router shuts down.  We
      use this for integration with the service manager, since otherwise a 
      graceful shutdown would cause a timeout, followed by a forced hard 
      shutdown.
    * Made the capacity calculator a bit more dynamic by not outright ignoring
      the otherwise valid capacity data for a period with a single rejected
      tunnel (except for the 10 minute period).  In addition, peers with an
      equal capacity are ordered by speed rather than by their hashes.
    * Cleaned up the SimpleTimer, addressing some threading and synchronization
      issues.
    * When an I2PTunnel client or httpclient is explicitly closed, destroy the
      associated session (unless there are other clients using it), and deal
      with a closed session when starting a new I2PTunnel instance.
    * Refactoring and logging.

2004-09-06  jrandom
    * Address a race condition in the key management code that would manifest
      itself as a corrupt router identity.
    * Properly clear old transport addresses from being displayed on the old
      console after soft restarts.
    * Properly refuse to load the client applications more than once in the 
      same JVM.
    * Added support for a graceful restart (a graceful shutdown followed by a
      full JVM restart - useful for restarting client apps).
    * More defensive programming, HTML cleanup, logging
    * wrapper.config cleanup of duplicate lines

2004-09-04  jrandom
    * Added some basic guards to prevent multiple instances from running.
      Specifically, a file "router.ping" in the install directory which is
      written to once a minute - if that file exists and has been modified
      within the last minute, refuse to start up.  In turn, adjust the 
      service wrapper to wait a minute before restarting a crashed JVM.
    * Create a "work" directory in the I2P install dir which Jetty will
      use for all of its temporary files.
    * Tell the browser not to cache most of the router console's pages.

2004-09-04  jrandom
    * Update the SDK to automatically reconnect indefinitely with an 
      exponential delay on retries (capped at 5 minutes).

* 2004-09-03  0.4 released

2004-09-03  jrandom
    * Updated default wrapper.config to deal with the hard restart option
    * Include the history.txt in the /help.jsp page
    * HTML updates (wrapper.log, and no more unix scripts)
    * Updated VERSION constants to 0.4

2004-09-03  hypercubus
    * Bugfix: Installer launches postinstall.bat on WinNT/2K properly.
    * Temporarily removed install_i2p_service_unix and
      uninstall_i2p_service_unix from distribution packages.
    * postinstall.bat/postinstall.sh cleans installation directory of all files
      not applicable to the host OS.

2004-09-03  oOo
    * Added some filters to the HTTP request, replacing the User-Agent,
      Referrer, Via, and From headers, which helps until we have a more 
      comprehensive filtering system.

2004-09-03  jrandom
    * Disabled the old listener on port 7655.

2004-09-02  jrandom
    * Cleaned up the base build.xml, adding a new target ("updater") which 
      builds the file i2pupdate.tar.bz2 which can be safely extracted over 
      existing installs.

2004-xx-xx  jrandom
    * Implemented the new web architecture and router console
    * Implemented I2PTunnel web interface, and revamped startup process.
    * Revamped peer selection code to address skew.
    * Removed all temporary threads from the router and the SDK.
    * Bugfix dealing with timeouts and resends.
    * Integrated Iakin's jcpuid library and jbigi update, with modifications.

2004-xx-xx  hypercubus
    * Implemented the new installation process.
    * Integrated systray 
    * Integrated service manager

2004-xx-xx  oOo
    * Implemented ?i2paddresshelper= hook 
    * Many small bugfixes to the web interface, router, i2ptunnel, and core.

2004-xx-xx  Nightblade
    * libSAM updates.

2004-xx-xx  cervantes
    * Imported i2pProxy.pac proxy script in with the build.

* 2004-08-20  0.3.4.3 released
* 2004-08-12  0.3.4.2 released
* 2004-08-08  0.3.4.1 released
* 2004-07-29  0.3.4 released
* 2004-07-23  0.3.3 released
* 2004-07-16  0.3.2.3 released
* 2004-07-14  0.3.2.2 released
* 2004-07-11  0.3.2.1 released
* 2004-07-07  0.3.2 released
* 2004-06-25  0.3.1.5 released
* 2004-05-23  0.3.1.4 released
* 2004-05-20  0.3.1.3 released
* 2004-05-13  0.3.1.2 released
* 2004-05-07  0.3.1.1 released
* 2004-04-30  0.3.1 released
* 2004-04-20  0.3.0.4 released
* 2004-04-04  0.3.0.3 released
* 2004-03-30  0.3.0.2 released
* 2004-03-25  0.3.0.1 released
* 2004-03-21  0.3.0 released
* 2004-03-10  0.2.5.4 released
* 2004-03-04  0.2.5.3 released
* 2004-02-28  0.2.5.2 released
* 2004-02-27  0.2.5.1 released
* 2004-02-25  0.2.5 released
* 2004-02-19  0.2.4.2 released
* 2004-02-15  0.2.4.1 released
* 2004-02-14  0.2.4 released
* 2004-01-27  0.2.3.6 released
* 2004-01-21  0.2.3.5 released
* 2004-01-14  0.2.3.4 released
* 2003-12-29  0.2.3.3 released
* 2003-12-27  0.2.3.2 released
* 2003-12-25  0.2.3.1 released
* 2003-12-13  0.2.3 released
* 2003-12-01  0.2.2 released
* 2003-11-18  0.2.1.1 released
* 2003-11-12  0.2.1 released
* 2003-11-09  0.2.0.3 released
* 2003-11-08  0.2.0.2 released
* 2003-11-03  0.2.0.1 released
* 2003-11-01  0.2 released
