* 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.
* 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!)
* 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
* 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")
* (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 thank 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!)
* 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.
* 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++).
* 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++).
* 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.
* 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.
* 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.
* 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.
* 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 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
* 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.
* 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.
* 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!)
* 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).
* 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.
* 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.
* 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.
* 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!)
* 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.
* 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).
* 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.
* 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
* 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.
* 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.
* 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
* 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)
* 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
* 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
* 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
* 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!)