* 2014-11-01 0.9.16 released

2014-10-30 kytv
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-10-07.
 * Arabic, Chinese, Czech, Dutch, French, German, Russian, and Spanish
   translation updates from Transifex

2014-10-30 zzz
 * Router: Fix rare NPE building garlic message (ticket #1403)

2014-10-26 zzz
 * SSU: Fix ACK Sender thread dying on corrupt packet

2014-10-24 zzz
 * i2ptunnel: Fix description entered via wizard

2014-10-23 zzz
 * SessionKeyManager:
   - Raise inbound limit
   - Delete oldest tagsets when limit is hit
   - Don't delete recent tagsets when limit is hit
 * SSL: Don't prohibit SSLv3 ciphers if that's all we have

2014-10-20 zzz
 * Console: Fix lockups (ticket #1395)
 * Eepsite Jetty: Switch back to QueuedThreadPool (ticket #1395)

2014-10-17 zzz
 * NTCP: Deadlock fix 3rd try (ticket #1394)

2014-10-16 zzz
 * NTCP: Deadlock fix 2nd try (ticket #1394)

2014-10-15 zzz
 * Console, I2CP, i2ptunnel, SSLEepGet: Set allowed SSL
   protocols and ciphers. Disable SSLv3 and older ciphers.
   Enable TLSv1.1 and TLSv1.2 on Java 7,
   where it is disabled by default client-side.

2014-10-14 zzz
 * I2NP: Implement DatabaseLookupMessage search type field

2014-10-13 zzz
 * i2ptunnel: Set default sig type to ECDSA-P256 for client types
   Standard, IRC, and Socks IRC, if non-shared.

2014-10-10 zzz
 * Banlist: Remove unused banlist tracking in the profile
   causing deadlock (ticket #1394)
 * GeoIP:
   - Don't rate peers in some countries as high capacity
   - Don't enable auto-floodfill in some countries
   - Don't prefer floodfills in some countries

2014-10-08 zzz
 * UPnP: Comment out unused parsers

2014-10-07 zzz
 * CPUID: Remove Intel model 2 again, this is spoofed in the VM
 * Graphs: Catch an error caused by missing fonts
 * i2ptunnel: Handle named sig types from i2ptunnel.config in the GUI
 * SSU: Improve handling of socket that gets closed (ticket #1385)
 * Startup: Delay ReadConfigJob another minute

2014-10-05 zzz
 * Crypto: EdDSA cleanup

2014-10-04 zzz
 * i2psnark: Disable changing types for predefined trackers
 * i2ptunnel: Fix js confirm for delete button

2014-10-03 zzz
 * Console: New add-to-addressbook links on leaseset page
 * CPUID: Fix Intel processor identification
 * i2psnark: Fix adding magnet links with % encoding (ticket #1391)

2014-09-30 zzz
 * Logs: Fix displayed filename when empty (ticket #1386)
 * SAM: Fix v3 LS publish, broken in -4 (ticket #1390)

2014-09-29 zzz
 * CPUID:
   - Fix main() model and family calculation
   - Add model string fetch from processor
   - AMD model string tweaks
 * i2psnark: Show subdirectory in table header on details page

2014-09-27 zzz
 * CPUID:
   - Fix model and family calculations
   - Fix most AMD family 15 IDs
   - Add AMD Llano, Jaguar, Bulldozer 2
   - Add Intel Ivy Bridge, Haswell, Broadwell, Penryn,
     Pineview, Cedarview, Bay Trail, Avoton, and others
   - Set best-guess capabilities for most Intel processors
   - Supply best-guess model string in most cases
   - Processors listed above, and some others, may see crypto speedups as a result

2014-09-26 zzz
 * EdDSA: Use our PRNG by default for keygen
 * i2psnark:
   - Increase default to 3 hops (ticket #966)
   - Show info hash on details page
 * NetDB: Increase max age of RIs to reduce number refreshed after restart
 * SAM:
   - Don't publish LS for DIRECTION=CREATE
   - Set default tunnel name
 * Tests: Fix junit compile fails due to data structure moves
 * Transport: Hooks for pluggable transports (ticket #1170)

2014-09-23 zzz
Prop from i2p.i2p.zzz.test2:
 * Addressbook: Improve parser efficiency
 * Data structures: Move several router-only classes from i2p.jar to
   net.i2p.data.router in router.jar. This will break existing
   versions of the i2pcontrol plugin.
 * HTTP Client: Add error page for unsupported encryption
 * I2CP:
   - Verify crypto key pair in LS
   - Verfiy same dest as before in LS
   - Enforce strict authorization when auth is enabled
 * i2psnark:
   - Set-all priority buttons (ticket #1376)
   - Comment out command-line code
   - Consolidate and clean up parameters code
   - Click to sort by column
   - Display upload ratio when sorted by ratio, and on details page (ticket #1298)
   - Consolidate code for creating img entities
   - Switch from checkbox to radio for tracker configuration form
   - Sort themes in config form
   - Consolidate HTML header code
   - Set no-cache headers
   - Don't set HTML headers for redirects
 * I2PTunnelGUI: Test tool deleted, moved to i2p.scripts
 * Jetty 8.1.16.v20140903
 * KeyGenerator: Add support for converting
   all signing key types from private to public
 * NetDB:
   - Encrypt RI lookups and request encrypted reply on
     faster boxes, to prevent scraping by OBEPs and IBGWs
   - Encrypt exploratory lookups too
   - Better handling of unsupported encryption in destinations
   - Implement handling of unsupported encryption in router identities
   - Banlist forever all RIs with unsupported encryption
   - New negative cache of all dests with unsupported encryption
   - New methods for destination lookup that will succeed even if
     the LS is expired or encryption is unsupported
   - Use new dest lookup so client will get the right error code
     later, rather than failing with no LS when we really got it
     but just couldn't verify it.
   - Don't auto-enable floodfill if ARM or if ElG decrypt is too slow
 * NTCP EstablishState:
   - Prep for future enhancements by refactoring to a state machine model
   - Reduce object churn; use SimpleByteCache
   - Synchronization
 * OCMOSJ: Detect unsupported encryption on dest and return the correct failure code
     through I2CP to streaming to i2ptunnel
 * PrivateKeyFile:
   - New constructor with padding
   - New router extension to add getRouterIdentity()
   - Add validateKeyPairs()
 * Router:
   - New router.sigType config
   - Generate / regenerate router keys based on config
   - New router.keys.dat file in PKF format for sig types and padding
   - Fix RouterInfo.readBytes() signature verification with sig types
   - Catch unset padding in KeysAndCert.writeBytes()
   - Catch key errors in ReadRouterJob
   - Show RI sig type on /netdb in console
   - Move some things from Router to startup classes
   - Startup classes package private
   - Buffer readin of key files
   - Remove configurability of router.info and router.keys file locations
   - Consolidate router keys readin code
   - Update killKeys file list
   - Validate router key pairs read in from file
   - Don't try to use an unavailable sig type for the router,
     even if it's the default
 * RoutingKeyGenerator:
   - Move from core to RouterKeyGenerator in router.jar
   - Leave RoutingKeyGenerator as a simple abstract class
   - DatabaseEntry now uses timestamp instead of mod data
     to determine if mod data has changed. Don't expose
     mod data to DatabaseEntry any more.
   - I2PAppContext.routingKeyGenerator() now returns null;
     you must be in RouterContext to get a generator.
 * SSU:
   - Implement bundling of multiple fragments in a single data message.
     This has always been in the spec and implemented in the receive side
     since the beginning, so it is compatible with all versions.
   - OutboundMessageState: Fix SSU Output Queue errors in PacketBuilder:
     Remove all buffer caching as it can't be made thread-safe.
     Just allocate buffer in constructor and let GC handle it
     Do fragmenting in constructor and make all fragment fields final
     Don't track per-fragment retransmissions as it wasn't used
     Move ack tracking from an array to a long
     Sync all ack methods; Entire class now thread-safe
   - InboundMessageState: Rewrite PartialBitfield for efficiency, less space and object churn
   - PeerState.fetchPartialACKs() improvements
   - Don't allow more than 10 bytes when reading in bitfield
   - Don't send a corrupt ack packet if the partial ack got completed (race)
 * Streaming: Re-enable message status override, but treat LS lookup failure
     as a soft failure for now.
 * Transports:
   - Handle RI sig types
   - Banlist unsupported RI sig types
   - Return unused DH keypairs to the pool
 * Tunnels:
   - Enforce request record timestamp
   - Randomize timestamp to prevent hop detection at top of hour

2014-09-22 zzz
 * SSU: Fix 100% CPU after socket failure
 * UPnP: Catch reported error on FreeBSD

* 2014-09-20 0.9.15 released

2014-09-17 kytv
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-09-04.
 * Translations:
   - updates pulled from Transifex (cs, es, fi, fr, ja, nb, pl, ro, ru, uk)
   - en po files updated and pushed to Transifex

2014-09-16 zzz
 * i2psnark: Don't send HTML-only headers for icons (2nd try)

2014-09-13 zzz
 * i2ptunnel:
   - Fixes for stopping client tunnels
   - Fix status display for shared clients

2014-09-12 zzz
 * i2psnark: Escape fixes
 * i2ptunnel: Fix updating session options on a running delay-open client tunnel

2014-09-09 zzz
 * i2psnark: Escape fixes

2014-08-31 zzz
 * Build: Add support for bundling router infos in the package
 * I2PTunnel: Allow changing of spoof host and target host/port without
              restarting server tunnel

2014-08-30 zzz
 * Console:
  - Re-enable plugin installation by default
  - Don't show configuration section or update-all button if no plugins installed
  - Show unavailable crypto on /logs
 * Router: Log warnings for unavailable crypto at startup
 * RouterInfo: Backport fix for verification of EdDSA RI sig type

2014-08-28 zzz
 * Streaming: Fix verify of Ed25519 signatures in CLOSE packets

2014-08-27 zzz
 * i2psnark:
   - Persist uploaded count (tickets #1034, #1298)
   - Don't retry announce if we get back HTML
   - Recognize Vuze tracker rejections
   - Don't retry rejected announces unless seeding
   - Better UI handling of announces with ports or full destination
 * NetDB: Don't abort initialization on an unsupported RI sig type
 * Streaming: Fix P521 and RSA sig types

2014-08-23 zzz
 * Console, i2psnark, i2ptunnel: Escape fixes and cleanups
 * SSU: Drop peer tests as Bob from unestablished Alices

2014-08-22 zzz
 * SigTypes:
   - Add isSupportedSince(), use in floodfill selection
   - Handle mixed-case 25519 enum
   - Fix 25519 type code
   - Add dup type code check

2014-08-21 str4d
 * Add Ed25519 SigType

2014-08-21 zzz
 * i2psnark:
   - Escape control chars in encodePath()
   - Increase max piece size to 8 MB (ticket #1347)
 * i2ptunnel: Add local SSL support for std. and IRC client tunnels (ticket #1107)

2014-08-19 zzz
 * i2psnark:
   - Don't filter create torrent form, and
     fix exception on ':' in file names (ticket #1342)
   - Don't remap file names on torrents we created, and
     save remap setting in torrent config file (tickets #571, 771)
   - Escaping fixes since names may not be remapped
   - Use better encodePath() from Jetty
   - Don't say create torrent succeeded when it didn't
   - Add more sanity checks for base path of created torrent

2014-08-18 zzz
 * i2psnark:
   - Don't send HTML-only headers for icons
   - Catch IllegalStateException for icons
 * Tunnels: Use consistent tunnel pair for Delivery Status Message
   to reduce network connections (ticket #1350)

2014-08-15 zzz
 * Console: Escaping fix (ticket #1348)
 * I2CP: Lookup synch cleanups

2014-08-13 dg
 * Console, EventLog: add BECAME_FLOODFILL and NOT_FLOODFILL, they are now shown
   at the /events page when the router changes its floodfill state

2014-08-13 zzz
 * Console: Escaping fix (ticket #1346)
 * i2psnark: Fix add torrent NPE

2014-08-10 zzz
Prop from i2p.i2p.zzz.snarkconfig:
 * i2psnark:
   - Move config file and DHT persistence file to a config dir
   - Move per-torrent configuration from "zmeta" in the main config file
     to a per-torrent config file (ticket #1132)
   - Split timestamp and bitfield into separate configs
   - Fix misspelling of autoStart config
   - Remove two unused SnarkManager methods
   - Refactor file deletion in prep for better file name handling (ticket #571)
   - Don't use canonical files in directory listings,
     for speed and to avoid file comparison problems (tickets #1079, #1148)
   - Set base file/dir in Storage constructor, make final,
     in prep for arbitrary locations (ticket #1028)
   - Add missing nonce protection for file priority setting
   - Add torrent mime type

2014-08-10 zzz
Prop from i2p.i2p.zzz.test2:
 * Console: Show share options below 30% (ticket #1329)
 * Crypto: Move TransientSessionKeyManager from core to router.
   I2PAppContext will return the dummy SessionKeyManager which
   is sufficient for non-tag uses (e.g. Bote).
   Client use of end-to-end encryption using SessionTags was
   disabled in release 0.6, 2005-07-27.
 * KeysAndCert: Change hashcode to prevent possible collisions
   caused by apps with zeroed pubkey
 * Plugins: Start of SU3 support (ticket #1227)
 * SAM:
   - Don't spawn a thread for each transmitted datagram
   - Set protocol field for raw and signed datagrams
   - Enforce a 60s timeout for HELLO
   - Use naming service cache to reduce Destination object churn
   - Get Log object from the log manager
 * SigType: Add static isAvailable() methods
 * SSU: Speed up introductions by responding to HolePunch (ticket #1333)
 * SU3File:
   - Add support for XML and NEWS types
   - Fix NPE on EOF reading input
   - Add -x option to bypass signature verification
   - Add -k option to use specified private key cert for verification
   - Don't verify signature in showversion
 * UPnP: Disable external entities in XML parser

2014-08-10 zzz
 * Console: Hide client delete buttons unless advanced on /configclients

* 2014-08-09 0.9.14.1 released

2014-08-07 kytv
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-08-06.

2014-08-03 zzz
 * Console:
   - Fix update buttons
   - Don't filter parameter names starting with "nofilter_"
   - Re-allow configadvanced, news URL, and unsigned update URL if routerconsole.advanced=true
   - Re-allow plugin install if routerconsole.advanced=true or routerconsole.enablePluginInstall=true
   - Only allow whitelisted plugin signers, unless routerconsole.allowUntrustedPlugins=true
   - Re-allow clients.config changes if routerconsole.advanced=true or routerconsole.enableClientChange=true
   - More escaping
 * i2psnark: Fix add torrent form

2014-07-31 zzz
 * ExecNamingService: Remove
 * Plugins: Add whitelist of keys

* 2014-07-26 0.9.14 released

2014-07-26 zzz
 * Console:
   - Fix several XSS issues (thx Exodus Intelligence)
   - Add Content-Security-Policy and X-XSS-Protection headers
   - Disable changing news feed URL from UI
   - Disable plugin install from UI
   - Disable setting unsigned update URL from UI
   - Disable /configadvanced
 * DataHelper: Disallow \r in storeProps() (thx joernchen of Phenoelit)
 * ExecNamingService: Disable (thx joernchen of Phenoelit)
 * Startup: Add susimail.config to migrated files

2014-07-23 kytv
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-07-02.

2014-07-19 zzz
 * i2psnark: Don't prefer leeches during end game, to
   prevent slowdowns or stalls
 * SAM: Add support for RAW on the bridge socket in v3 (ticket #1334)
 * Streaming; Disable fail-fast for now.
 * SusiMail: Better error message on decode fail

2014-07-15 str4d
 * I2CP: Stubs for I2CP connections over Unix domain sockets

2014-07-11 zzz
 * Datagrams:
  - Redefine the repliable datagram signature for non-DSA_SHA1 sig types;
    was the sig of the SHA-256 of the payload, now the sig of the payload itself.

2014-07-03 zzz
 * Base64:
  - Catch numerous decoding errors that were previously misdecoded (ticket #1318)
  - Improve decoding efficiency, reduce copies
  - encode(String) now uses UTF-8 encoding
  - decode() now accepts short strings without trailing '='
  - whitespace in decode will now cause an error, was previously ignored
 * Console: Add event log viewer (ticket #1117)

2014-07-02 kytv
 * Update Java Service Wrapper to v3.5.25
    - Windows: x86 and x64 versions self-compiled with VS2010 in
      Windows 7. The icon has been changed from Tanuki's default to Itoopie.
    - Linux ARMv6: Compiled on a RaspberryPi using gcc 4.6.3-14+rpi1,
      Oracle Java 1.7.0+update40 and stripped
    - All other binaries are from the "community edition" deltapack offered by
      Tanuki.

2014-06-29 zzz
 * NetDB: Fix handling reseed URLs with ports (ticket #1278)

2014-06-28 zzz
 * NetDB: Add support for reseeding with su3 files (ticket #934)
 * SAM:
   - Support SIGNATURE_TYPE, bump to 3.1 (ticket #1318)
   - Private key checking fixes (ticket #1318)
   - Parameter parsing fixes (ticket #1325)
   - Cleanups

2014-06-24 zzz
 * Streaming; Drop the preliminary channel implementations,
   as they don't work and can't ever work as designed.

2014-06-23 zzz
 * Streaming:
   - Bundle new socket messages for translation
   - Fix connection error message
 * Tunnels: Reject participating tunnels when hidden (ticket #1314)

2014-06-21 zzz
 * i2psnark:
   - Display webapp name in html title (ticket #1311)
   - Use tracker from magnet link in display (ticket #1313)
   - Clarify auto-start (ticket #1293)
   - Include tracker in magnet link on details page (ticket #964)

2014-06-13 zzz
 * i2psnark: Fix NPE when fetching invalid torrent (ticket #1307)
 * Transports: Disallow Carrier Grade NAT (RFC 6598) addresses
 * Tunnels: Don't get stuck only building tunnels
   for an empty pool (ticket #1300)

2014-06-10 zzz
 * i2psnark: Fix decoding of negative numbers (ticket #1307)
 * NewsFetcher: Only treat correct status codes as success

2014-06-09 zzz
 * i2psnark:
   - Show client version if available
   - Linkify all announce URLs on details page
   - Sanitize announce URLs
 * Jetty 8.1.15.v20140411
 * Tomcat 6.0.41

2014-06-07 zzz
 * Console: Fix NPE in summary bar
 * Eepsite: Updated French help page (thx hummingbird)
 * i2psnark: Fix errors when checking read-only files
 * NetDB: Reduce negative lookup cache time
 * OCMOSJ:
   - Increase timeout if we must lookup leaseset
 * Streaming:
   - Shorter expire time in TCBCache
   - Don't fail a connection once it is up

2014-06-01 zzz
 * i2psnark:
   - Store seed/leech status in DHT tracker (ticket #1280)
   - Increase max received DHT nodes (Vuze sends more)

2014-05-31 zzz
Prop from i2p.i2p.zzz.test2:
 * Console: Fix shutdown error on old wrappers (ticket #1285)
 * CPUID:
   - Add hasAES()
   - Fix bugs in unused hasSSE3(), hasSSE41(), hasSSE42()
 * Crypto:
   - Use JVM AES when faster
   - Don't start YK thread in constructor (ticket #973)
 * HTTP client:
   - Fix 'connection reset' browser messages
     after an error in the first line (ticket #1277)
  - Add GUI options for user-agent, referer, accept
  - Disable SSL to i2p addresses by default, add GUI option
  - Fix NPE in error handler
 * I2CP: Per-message reliability settings (ticket #788):
   - Store message nonce in ClientMessage, so we may send
     a MessageStatusMessage with a failure code to the client
     without sending an ACCEPTED MessageStatusMessage first.
     All MessageStatusMessages sent in response to outbound messages will now have a valid nonce.
   - Clean up and reuse MessageState for asynch notification
   - New I2PSession sendMessage() method and listener
   - Move VerifyUsage from SimpleScheduler to SimpleTimer2 for efficiency
   - New I2PSessionException
   - Streaming PacketQueue requests status for SYNs on outbound conns
   - PacketQueue throws I2PSessionException in streams
 * i2psnark:
   - Support ports in announce URLs (ticket #1283)
   - Change "private" value in infohash from string to number,
     to match what everybody else does
   - Send seed/leech status in DHT announces (ticket #1280)
   - Extend DHT tracker expire time from 45m to 3h
   - Extend DHT announce interval from 10m to 40m
   - Increase announces from 1 peer to 4 (ticket #1281)
   - Respond to get_peers with an empty peers list instead of
     a nodes list if the requester was the only peer (ticket #1279)
   - Fix sendError() (still unused)
 * i2ptunnel:
   - Show key cert settings
   - Display custom error pages for I2PSocketExceptions (ticket #788)
   - Tag I2PSocketException text for translation (no bundles yet)
   - Move methods from superclasses to I2PTunnelHTTPClientBase
   - Fix connect client error pages, but they aren't displayed anyway
   - Don't start I2PTunnelRunner threads in constructor (ticket #973)
 * SusiMail: fix NPE (ticket #1296)
 * SystemVersion: Add isJava7() and isX86()

* 2014-05-22 0.9.13 released

2014-05-20 zzz
 * Fixes after code review
 * SSU: Fix peer test deadlock (ticket #1286)

2014-05-15 kytv
 * Translations, imported from Transifex:
   - Dutch, French, German, Italian, Japanese, Norwegian Bokmål, and Ukrainian
     translation updates
   - Start of Slovak language translation
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-05-06.

2014-05-14 kytv
 * Update the UserAgent that we send for users that go out through the outproxy
   to match that of the current Tor Browser Bundle.

2014-05-13 zzz
 * BOB, SAM, i2psnark: Fix datagram NPE (ticket #1275)
 * i2psnark: Escaping fixes on details page
 * SusiMail:
   - Fix AIOOBE (ticket #1269)
   - Don't let an exception on one mail break others

2014-05-10 zzz
 * NTCP: Fix NPE (ticket #996)
 * SusiMail: Remove deleted mails from memory

2014-05-09 zzz
 * SusiMail: Add more locking (ticket #1269)

2014-05-08 zzz
 * i2psnark: Add log message if directory does not exist (ticket #1263)
 * i2ptunnel: Display warning for duplicate client ports (ticket #1265)

2014-05-07 zzz
 * Console:
   - Add hiddengate.i2p
   - Fix console getting disabled when saving client config (ticket #1260)
 * Router: Add warning at startup if console is disabled
 * SSU: Extend establishment phase retx timeout
 * SusiMail:
   - Don't fetch headers from folder sorters
   - Update debug setting when saving config
 * Transports: Use constant time method for HMAC verification
 * Tunnels: Revert expl. OB default back to 2 + 0-1 for now

2014-05-01 zzz
 * SusiMail: js enhancements, build cleanups, css tweaks

2014-04-30 zzz
 * Plugins: Retry deletion at restart if it fails (ticket #1257)

2014-04-29 zzz
 * SusiMail:
   - Add print css
   - Hide header and footer in mobile css
   - Fix 'from' address in compose

2014-04-28 zzz
 * UDP:
   - Locking fixes on peer testing
   - Slow down peer test frequency, esp. when firewalled

2014-04-27 zzz
 * NTCP: Remove published NTCP address if SSU becomes firewalled,
         to fix the "Firewalled with NTCP enabled" message,
         broken during IPv6 implementation in 0.9.8
 * Router: Set killVMOnEnd before runRouter() (for azi2phelper)
 * RoutingKeyGenerator: Don't assume UTC (for azi2phelper)
 * SusiMail:
   - Add locking for disk cache
   - Remove cancel button from login page
   - New configuration page (ticket #1158)
   - Move set page form to configuration page
   - Theme and js enhancements
 * UDP:
   - Locking fixes on rebuilding address
   - Don't rapidly churn address when we don't have enough introducers

2014-04-25 zzz
 * SusiMail:
   - Add icons for new messages, attachments, and spam
   - Different colors for new mail and spam
   - Tweak sort button display based on current sort
   - Display image attachments inline
   - Don't rezip certain attachment types, just offer link
   - Move delete and confirmation buttons
   - Increase max size for full download again
   - Fix repeated re-saves of mail to disk
   - Enable auto-deletion of downloaded mails
   - Send delete to server for mails already downloaded

2014-04-24 zzz
 * SusiMail:
   - Add background mail checker
   - Add idle timeout connection closer
   - Rely on idle checker for most delayed deletions
   - Cleanup resources better when shutting down session
   - Don't add deleted mails to folder
   - Set socket soTimeouts
   - Display errors after check mail button pushed

2014-04-23 zzz
 * SusiMail:
   - Queue deletions for a later thread
   - Synch all folder access
   - Fix fetching of new mail

2014-04-22 zzz
 * SusiMail:
   - Add persistent cache
   - Fix encoding in sent mails on non-UTF8 platforms
   - Show sender name in folder view
   - Add support for configured sender name
   - Add HTML escaping of '&'
   - Fix Folder sorting so UP is up and DOWN is down
   - Fix capture by show page after back button
   - Load all mails from disk at startup
   - Add offline mode

2014-04-21 zzz
 * SusiMail:
   - Pipeline all deletes and quit
   - Don't reconnect after delete and quit
   - Verify connected before each POP3 operation
   - Don't clear messages if a reconnection fails
   - Use locale-based sorting for strings
   - Increase limit for full fetch again
   - Increase default page size back again

2014-04-21 dg
 * findbugs: mostly stream closure fixes in router, apps, core

2014-04-20 zzz
 * SusiMail:
   - Implement extensive pipelining in POP3 for a big speedup
     of the initial connection
   - Don't require an attachment to be "uploaded" to send it
   - Move delete attachment button, hide if no attachments
   - Save BCC-to-self preference in the session
   - Fix date format in reply
   - Close any open POP3 socket when session is unbound
   - Don't keep returning user to compose page (ticket #1252)
   - Add javascript capture of back button on compose page

2014-04-19 zzz
 * Console: Remove the classpath workarounds for SusiMail,
   since it isn't using the jetty classes any more
 * SusiMail:
   - Increase max size of mails that are fetched in full,
     previous limit was so small it never happened.
   - Move page nav to top of folder view, hide if only one page
   - Refuse to send mail with no "to"
   - Reduce default page size as it slows startup
   - CSS and layout fixes
   - Flush writes in POP3 and SMTP
   - Don't wait for SMTP response after QUIT
   - Tell the user if there are no messages
   - Fix the message view layout
   - Message view attachment cleanups
   - Pipeline USER and PASS to save a round-trip at startup
   - Better synchronization in POP3
   - Properly de-byte-stuff in POP3
   - Remove unnecessary caching in POP3
   - More efficient handling of POP3 responses
   - Remove 60s timeout for fetching a message,
     so retrieval of large messages doesn't fail
   - Use pipelining in SMTP
   - Rewrite SMTP response processing
   - Translate SMTP error messages

2014-04-18 zzz
 * configclients: Don't allow console disable
 * I2PTunnel IRC Client: Prevent AIOOBE (ticket #1254)
 * SusiMail:
   - Extend session expiration (ticket #1253)
   - Handle non-UTF8 encoding on header lines (ticket #508)
   - Display dates in current locale and time zone
   - Display sender name on message view
   - Remove sort-by-ID buttons
   - Hide "reload config" button unless config file is present
   - Increase default page size
   - Don't force reconnection on folder view (ticket #1253)
   - Button theme tweaks
   - Only show logout button on folder view
   - Add dependency tracking to build

2014-04-17 zzz
 * i2psnark: Randomize announce list order and limit size
 * SSU: SessionRequest replay prevention (ticket #1212)
 * SusiDNS:
   - Locking on config file accesses
   - Remove static log and context
 * SusiMail:
   - Button styling for prev,next,list
   - Log errors to router log too
 * Tunnels: Increase OBEP throttle limit

2014-04-06 zzz
 * NetDB: Iterative search improvements

2014-04-05 zzz
 * I2PTunnel:
   - Add server option for unique local address per-client
   - Fix changing outproxy without stopping tunnel (ticket #1164)
   - Fix add-to-addressbook hostname link in i2ptunnel (ticket #688)
 * NetDB: Skip key cert LS stores and verifies for floodfills that don't support them

2014-04-01 zzz
 * Console: Fix summary bar html when displaying an update constraint
 * NetDB: Handle RI response from non-floodfill router down a client tunnel

* 2014-03-31 0.9.12 released

2014-03-28 zzz
 * i2ptunnel.config: Remove irc.freshcoffee.i2p
 * StatManager: Don't start thread for an empty config
 * StatisticsManager: Don't publish client tunnel stats

2014-03-28 kytv
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-03-05.
 * Brazilian Portuguese, French, Norwegian, and Russian translation updates imported from Transifex

2014-03-23 str4d
 * Console: Handle stopping plugin ClientApps

2014-03-16 zzz
 * SSU: Fix corruption of introducer keys

2014-03-15 zzz
 * Certificate: Fix null cert hash code
 * Hash: Cleanup of cached hash
 * NetDB: Randomize returned DSM timestamp

2014-03-13 zzz
 * SAM: Class, field, findbugs cleanups

2014-03-12 zzz
 * Console: Handle ISO-639-2 language codes (ticket #1229)
 * I2PTunnel: Send message to client on HTTP Server OOM or out of threads
 * Streaming:
   - Track recently closed connections (ticket #1161)
   - Workaround for jwebcache and i2phex (ticket #1231)
 * Wrapper: Fix failed restarts on ARM (ticket #1230)

2014-03-08 zzz
 * PeerManager: Restore profileOrganizer.sameCountryBonus advanced config,
                inadvertently removed in 0.9.10

2014-03-07 zzz
 * Router:
   - Look for DeliveryStatusMessages beyond the message expiration,
     so we don't throw out a tagset that gets acked late
   - Allow re-adding of a "failed" tagset to the SKM
   - Extend max message age in MessageValidator
   - Remove unused and confusing timeout param when registering a selector

2014-03-06 zzz
 * Router: Encrypt DeliveryStatusMessages sent in garlics (ticket #1217)

2014-03-05 zzz
 * Transports: Don't send a duplicate store of our RI at
     start of a connection (ticket #1187)
 * NTCP:
   - Lower send priority of the RI at exchange
   - Bob will now send his RI even if he doesn't have Alice's
   - Send RI again sooner on long-lived connections

2014-03-05 str4d
 * Console: Updated website URLs in readme.html files
 * susimail: Removed remaining Jetty dependencies in susimail
   (patch from wockenfuss) (ticket #1165)

2014-02-24 zzz
 * NetDB: Slow down router refresh after startup to reduce load
   on exploratory tunnels
 * NTCP:
   - Add check for replayed session requests (ticket #1212)
   - Disable inbound check connection
   - Reduce object churn in EstablishmentManager
   - Don't pollute Hash cache in EstablishmentManager
 * Transports: Use SigUtil.rectify() in DH
 * Tunnels: Rate-limit connections at the OBEP (ticket #1134)

2014-02-23 dg
 * I2PTunnel: add 'irc.dg.i2p' to the default IRC2P tunnel (for more
   information, see http://echelon.i2p/docs/IRC2p/irc2p_userguide.txt)

2014-02-21 zzz
 * Build: Add property for target version
 * I2CP Client: Generate revocation key of same type as signing key
 * i2ptunnel: Only offer SigType options that are available in the JVM
 * LeaseSet: Add check for SigType mismatch
 * RouterAddress: Restore storage of expiration and use in signature
   calculation, broken in 0.9.3, in anticipation of using it someday
 * SigType: Add isAvailable()

2014-02-20 zzz
 * i2ptunnel: Add inproxy block option to HTTP server
 * Router: Allow null args to main() (broke Android)

2014-02-17 zzz
 * HMAC:
   - Replace BC MD5 with JVM version, refactor I2PHMAC to use
     MessageDigest instead of BC Digest (ticket #1189)
   - Use JVM HmacSHA256 instead of I2PHMAC for Syndie since it is standard
 * SSU:
   - Use session key for relay request/response if available (ticket #1206)
   - Restrict authentication with Bob's intro key to session created packet
   - Remove packetAuthTime stats
 * Initial support for key certificates and arbitrary types and lengths
   of signing keys and signatures in RouterIdentities and Destinations.
   - Fixup of Destination.create() and Destination.size()
   - Add generic off/len methods in DSAEngine, needed for streaming
   - Support i2cp.destination.sigType option in TunnelController and
     I2PSocketManagerFactory
   - Fixup of sign/verify in streaming Packet
   - Add setting in i2ptunnel server edit page (hidden for now)
   - Comment out cert setting on i2ptunnel server edit page
   - Show key type on susidns details page and LS debug page
   - Hide setting in i2ptunnel edit pages unless advanced user
   - Only store LS with key certs to routers that support it
   - Only store LS with more than 6 leases to routers that support it
 * Jetty:
   - Update to Jetty 8.1.14.v20131031, Servlet 3.0, JSP 2.2
   - Use Servlet and JSP jars from Jetty instead of Tomcat
   - Tomcat remains at 6.0.37 supporting Servlet 2.5 / JSP 2.1
   - Remove Jetty dependency in console error pages
   - Require Java 6

2014-02-14 zzz
 * I2CP:
   - Add session limit, add new status code for refused
   - Ramdomize session ID, prevent dups
   - Make SessionId immutable

2014-02-13 zzz
 * Router: Convert to getopt (ticket #1173)
 * Tunnels: Change expl. OB default to 3+0

2014-02-11 zzz
 * HTTP client proxy: Don't flush after headers for a POST,
   so the POST data is included in the SYN packet,
   to improve speed and reliability of small POSTs

2014-02-10 zzz
Prop from i2p.i2p.zzz.test2:
 * Addressbook: Rewrite subscriptions.txt for new default URL
 * Build: Honor require.gettext=false for i2prouter translations
 * Core: Add lightweight getopt command line parsing lib (ticket #1173)
 * EepGet:
   - Convert to getopt (ticket #1173)
   - New option -c for clearnet (no proxy), same as -p:0
   - Proxy option -p with host name arg only (no ':') now allowed
   - Proxy password option is now -x, not the second arg to -u
   - Prompt for proxy password if not supplied in options
   - Line length option is now -l, not the second arg to -m
   - Error on nonproxied .onion hosts
   - Update man page, sort options (ticket #1173)
   - Support Digest proxy authentication (ticket #1173)
   - Move authentication parsing method from I2PTunnelHTTPClientBase
 * EepHead, PartialEepGet, SSLEepGet: Convert to getopt (ticket #1173)
 * EepHead, PartialEepGet:
   - New option -c for clearnet (no proxy), same as -p:0
   - New option -o, same as EepGet
   - Proxy option -p with host name arg only (no ':') now allowed
   - Add proxy auth support with -u and -x options (ticket #1173)
 * I2Ping:
   - Convert to getopt (ticket #1173)
   - Add support for from/to ports
 * i2psnark: Cache PeerID.toString()
 * I2PTunnel:
   - Convert to getopt (ticket #1173)
   - Add more argument sanity checking and a usage output
 * PrivateKeyFile:
   - Convert to getopt (ticket #1173)
   - New option -e for hashcash effort, replaces -h with arg
   - Stub out -t option, to be propped from ecdsa branch
 * Streaming:
   - Set ports on many packets that were missing them
   - Use connection throttling methods on pings too (ticket #1142)
   - Add methods to set ports on pings
   - Argument checking on ping methods
 * SU3File: Convert to getopt (ticket #1173)
 * UpdateManager: Convert to RouterApp and remove update hooks from context
     (ticket #1185)

2014-02-10 zzz
 * Console:
   - Don't reset graph settings when clicking restart or shutdown on graphs page
   - Don't recommend guest login on trac, it's disabled
   - Catch and remove corrupt jrb file (ticket #1186)
   - Always set default language on /configui
 * Transports: Reduce target connection count again to reduce
               tunnel reject rate further

* 2014-02-08 0.9.11 released

2014-02-07 zzz
 * Services:
   - Move backup news to psi.i2p
   - Move default addressbook subscription to i2p-projekt.i2p
   - Remove www.i2p2.i2p from default update lists
   - Add psi.i2p to hosts.txt
   - Update links on help pages to avoid redirects on new website
     and select the correct language
 * SusiDNS: Fix whitespace issues

2014-02-06 kytv
 * Brazilian Portuguese, Danish, French, Japanese, Polish, Russian, Ukrainian
   translation updates
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-02-05.

2014-01-31 zzz
 * /logs: Fix encoding of wrapper log section (ticket #1193)
 * NetDB: Fix cases where corrupt RouterInfo files were not deleted (ticket #1190)
 * SOCKS: Remove static logs

2014-01-30 zzz
 * InboundMessageDistributor: Set reply flag on LeaseSets

2014-01-28 zzz
 * /configclients: Add link to plugins.i2p; don't show delete button for console
 * Tunnels: Change expl. IB default to 2 + 0-1

2014-01-28 dg
 * I2PSnark: Make 'kitty.png' transparent

2014-01-28 zzz
 * I2CP: Use client tunnels for b32 lookups (ticket #1166)

2014-01-27 zzz
Prop from i2p.i2p.zzz.i2cp:
 * I2CP:
   - Add support for hostname lookups over I2CP with new
     HostLookup and HostReply messages.
   - Move username / password from CreateSession to GetDate for
     early authentication; this is an incompatible chage.
     Outside router context with authentication enabled,
     new clients will not work with old routers.
     Early authentication is not yet enforced, enable with
     i2cp.strictAuth=true. Will change default to true in a later release.
   - Block all actions before authentication.
   - Better disconnect messages to clients for diagnostics
   - Improve lookup command, add auth command in i2ptunnel CLI for testing
   - Don't start ClientWriterRunner thread in constructor
   - Don't flush in ClientWriterRunner unless necessary
   - Send GetDate even in SimpleSession outside of RouterContext
   - Improve SetDate wait logic to reduce locks and break out when Disconnect received
   - Add Disconnect handler to SimpleSession
   - Add SessionID to HostLookup/Reply messages, for future
     use when we have multiple sessions
   - Throw IAE on invalid SessionID values
   - Add support for b64 conversion in destLookup()
   - Catch invalid message length sooner
 * I2Ping:
   - Extend I2PTunnelClientBase so non-shared-client,
     I2CP options, and other features will work
   - Fixes for fields and threading
   - Cleanups
 * Streaming:
   - Send LS with ping (broken since 0.9.2)
   - Set the NO_ACK flag on pings and pongs

2014-01-27 zab
 * Move message serialization later in the SSU sending pipeline
   (Ticket #1183)
 * Up version to -5

2014-01-27 zzz
 * i2ptunnel HTTP Proxy: Fix default enable for outproxy plugin

2014-01-25 zzz
Prop from i2p.i2p.zzz.outproxy:
 * i2psnark: Lower threshold for auto-stop
 * i2ptunnel HTTP Proxy:
   - Add support for HTTPS
   - Add support for outproxy plugins
 * Installer: Update links
 * NetDB: Fix NPE after client shutdown (ticket #1174)
 * Router: Lower frequency for publishing stats
 * Update: All updates via torrent

2014-01-25 zab
 * Move OutNetMessage buffer preparation to the Writer threads 
   (Ticket #1183)
 * Up version to -1

* 2014-01-22 0.9.10 released

2014-01-20 kytv
 * Translation updates
 * Updates to geoip.txt and geoipv6.dat.gz based on Maxmind GeoLite Country
   database from 2014-01-08.

2014-01-20 zzz
 * Console: Change www.i2p2.i2p links to i2p-projekt.i2p
 * Reseed: Remove netdb.i2p2.de

2014-01-12 zzz
 * NetDB: Fix handling of DSRM and DSM down client tunnels

2014-01-11 zzz
 * NetDB:
   - Reduce min part tunnels for ffs to 35
   - Use client tunnels for LS lookups from OCMOSJ (ticket #1166)

2014-01-11 str4d
 * BOB: Pass through I2CP host/port (ticket #827)

2014-01-10 str4d
 * BOB: Implement ClientApp interface (ticket #347)

2014-01-09 zzz
 * Kademila: Fix NPE in remove()

2014-01-09 kytv
 * Translations
  - Updates to French, German, Romanian, and Russian
  - New Brazilian Portuguese translation
  - Mass pull of translations from Transifex
  - Update of English strings

2014-01-09 str4d
 * susimail:
  - Fixed pagination with zero entries (ticket #1168)
  - UTF-8 support from wockenfuss (ticket #508)
 * Console: Fixed overlapping text issue in midnight theme

2014-01-07 zzz
 * Streaming: Fix StandardServerSocket.close() and isClosed()

2014-01-04 zzz
 * Peermanager: Disable small same-country bonus
 * Tunnels: Change client default to 3 hops in router;
   change expl. default to 2+0 IB and 2 + 0-1 OB

2014-01-04 dg
 * Streaming: Move streaming to new package (ticket #1135)
 * Console: Change /configclients 'advanced warning' to include 'toopie, no red

2013-12-25 dg
 * Console: Add 'advanced warning' to /configclients
 * SOCKS5Server: Remove redundant, commented out line from my previous findbugs

2013-12-19 zzz
 * NetDB: Fixes for ExpireRoutersJob
  - Don't expire if too few routers
  - Don't expire if net is disconnected
  - Don't run in VMCommSystem

2013-12-15 zzz
* EepGet: Allow override of the User-Agent
* i2psnark: Set User-Agent

2013-12-14 zzz
* NetDB:
 - Just before midnight, flood to new location too so lookups
   don't fail after keyspace rotation (ticket #510)
 - Refactor RoutingKeyGenerator and UpdateRoutingKeyModifierJob
   in support of the above

2013-12-13 zzz
 * i2ptunnel: Show destination for persistent client key only if available;
              show b32 for the key as well
 * NetDB:
   - Increase new kad size to K=24, B=4
   - Fix router count by counting in the data store, not the kbuckets
   - Randomize the order we load router infos at startup so we
     don't bias the kbuckets

2013-12-10 zzz
Prop from i2p.i2p.zzz.test2:
 * Config files: Allow empty values
 * Data: Deprecate Signature.FAKE_SIGNATURE
 * GeoIP: Thread the periodic lookup so it doesn't clog the timer queue
 * I2CP router-side: Disconnect client on attempt to publish invalid leaseset
 * i2psnark:
   - Make a set of the default trackers so the config array
     can be private and the lookup for the form is more efficient.
   - Disable streaming pings (ticket #1142)
 * i2ptunnel: Disable streaming pings for clients (ticket #1142)
 * i2ptunnel IRC client: Do not filter server PING or client PONG (ticket #1141)
 * Jetty 7.6.14.v20131031
 * PeerManager: Thread the periodic reorg so it doesn't clog the timer queue
 * PrivateKeyFile: Fix ISE (ticket #1145)
 * Startup: Wait a while and recheck if a recent ping file is there,
            so that a crashed router doesn't prevent a restart (ticket #633)
 * Transport: Reduce target connections from 60% to 45% of limit
   to improve network capacity. Apparent problems with lower limits were
   actually due to unrelated bugs, fixed in 0.9.8.1-22.
 * Translations:
   - Add support for country variants (ticket #1133)
   - Refactor data in ConfigUIHelper
 * UDP PeerState: findbugs volatile/atomic/synch
Prop from i2p.i2p.zzz.netdbkad:
 * NetDB:
   - Move net.i2p.kademlia package from i2psnark to core, and convert
     netdb to use it.
   - Delete old implementation in netdb
   - Fixups in netdb for generics
   - Add debug output to /debug
 * Kad unit tests:
   - Move KBucketSetTest to new directory
   - Fix testSelf() as new implementation will never include myself
   - Delete KBucketImplTest, not applicable/useful now
   - Port KBSTest from i2p.zzz.kademlia branch
   - Fix RandomTrimmer so it always returns true, so it may be used
     as the trimmer in the unit tests

* 2013-12-07 0.9.9 released

2013-12-04 zzz
i2psnark: Fix ConnectionAcceptor not restarting after tunnel
  restart, preventing incoming connections

2013-12-01 kytv
 * Update geoip.txt based on Maxmind GeoLite Country database from 2013-11-05.
 * French, Italian, Romanian, Spanish, and Swedish translation updates from transifex

2013-11-28 dg
 * I2PTunnel: Don't send 'X-Powered-By' on HTTP server tunnels for anonymity reasons.

2013-11-25 str4d
 * Reseed: Listen to "Require SSL" config option

2013-11-23 zzz
 * i2ptunnel: Clean up old timer threads

2013-11-23 str4d
 * susimail: Fix NPE when deleting last message (ticket #414)

2013-11-19 kytv
 * Translation updates and start of Japanese translation pulled from Transifex

2013-11-14 kytv
 * Update Java Service Wrapper to v3.5.22
    - Windows: Self-compiled with VS2010 in Windows 7. The icon has been
      changed from Tanuki's default to Itoopie.
    - Linux ARMv6: Compiled on a RaspberryPi using gcc 4.6.3-14+rpi1,
      Icedtea6 6b27-1.12.5-1+rpi1 and stripped
    - All other binaries are from the "community edition" deltapack offered by
      Tanuki.

2013-11-14 zzz
 * Tunnels: Fix reception of encrypted responses to LS lookups (ticket #1125)

2013-11-07 zzz
 * i2psnark: Fix file links, broken in -12 (ticket #1114)
 * Logging: Track duplicates across flush interval (ticket #1110)
 * NetDB: Fix RI publish interval, broken in -7

2013-11-03 zzz
 * NetDB: Allow store of leaseset as long as one lease has not expired
 * Transport:
   - Expire wasUnreachable entries, so inbound tunnel build failures
     don't escalate
   - Add network status to event log

2013-11-01 zzz
 * Transport: Fix GeoIPv6 (ticket #1096)

2013-10-31 zzz
 * i2psnark: Always verify file lengths at startup (ticket #1099)
 * Transports: Increase threshold for idle timeout reduction
   (partially back out change from -10)

2013-10-29 dg
 * i2psnark: Start torrents by default (ticket #1072)

2013-10-29 zzz
 * i2psnark: Fix start and start-all buttons on text-mode browsers
   and Opera (ticket #1093)
 * InboundMessageDistributor:
   - Don't discard an encrypted DSRM received
     down a tunnel, just strip the hashes like we do for unencrypted
   - Send a store of our own encrypted LS received down a tunnel to
     the InNetMessagePool so the FloodfillVerifyStoreJob will see it.
 * NetDB: Fix LS store verifies with encrypted replies
   by storing the tagset with the correct SKM for the inbound tunnel used.
   Broken since 0.9.7 when it was introduced.
 * Tunnels:
   - Build a new exploratory fallback tunnel in the BuildExecutor
     loop if we run out.
   - Don't use closest expl. tunnel as the paired tunnel for a build,
     use a random one instead (partially back out change from -12)

2013-10-29 meeh
 * Adding no.i2p registrar

2013-10-28 dg
 * I2PTunnel: Enable persistent keying for SOCKS tunnels (ticket #1088)

2013-10-27 zzz
 * Streaming; Fix crash caused by previous blacklist fix (ticket #1070)

2013-10-26 zzz
 * i2psnark: Display base name, not torrent file name (ticket #985)
 * I2PTunnel HTTP server: New POST limiter
 * Profiles: Ensure we select random peers even before the first reorganization
 * Streaming: Randomize end of first conn limit period
 * Tunnels:
   - Don't use fallback expl. tunnels as the paired tunnel
     for a client tunnel build.
   - Fix selection of an expl. tunnel close to a hash

2013-10-25 zzz
 * Router: Only log ping file error once (ticket #1086)
 * Streaming:
   - Check blacklist/whitelist before connection limits, so
     a blacklisted peer does not increment the counters
   - Don't increment total throttle if peer is throttled
   - Fix blacklist NPE after config change (ticket #1070)
 * Transports: Reduce connection idle time sooner

2013-10-24 zzz
 * i2psnark: Drop incoming connections on HTTP port
 * I2PTunnel: Don't let uncaught exception kill server acceptor (ticket #1070)
 * I2PTunnel standard, HTTP, and IRC servers:
   Route connections to specific targets based on incoming I2P port
   with custom option targetForPort.xxxx=myserver:yyyy
   This allows multiple services on a single server tunnel (ticket #1066)

2013-10-23 zzz
 * I2PTunnel standard and IRC clients:
   - Allow host:port targets; set defaults in i2ptunnel.config (ticket #1066)
   - Don't fail start if hostname is unresolvable; retry at connect time (ticket #946)
   - Output IRC message on connect exception
   - Update target list on-the-fly when configuration changes
 * NetDB:
   - Increase RI publish interval to reduce the connection load on ffs
   - Save RI-last-published time; check it before publishing

2013-10-19 zzz
 * NetDB:
   - Reinstate ExpireRoutersJob
   - Reduce min part. tunnels for floodfill
   - Reduce floodfill redundancy

2013-10-17 zzz
 * I2CP: Move SSL client socket code to util,
   move cert location to certificates/i2cp.
 * I2PTunnel: Support SSL for connection to local server
   for Standard, HTTP, and IRC server tunnels.
   Put server cert in certificates/i2ptunnel if necessary.
 * Streaming: Throw IOE if socket is closed (ticket #1077)

2013-10-14 kytv
 * French translation updates from Transifex

2013-10-14 zzz
 * Translations: Move country names to a new resource bundle

2013-10-13 zzz
 Prop from branch i2p.i2p.zzz.test2:
 * Console:
   - Implement webapp state detection and stop button for webapps
     on /configclients (Ticket #1025)
   - Set per-connector acceptors back to 1, Jetty default changed to 2?
   - Tag strings on /jobs (ticket #969)
 * Data Structures:
   - Make Destination and RouterIdentity keys and cert immutable
   - Add Destination cache
 * i2psnark:
   - Combine getPeers and announce into a single method, as we must announce to
     the closest from the getPeers, not the closest from the kbuckets
   - Stop getPeers when nothing closer is found
   - Increase DHT dest lookup, search timeouts, and max search depth
   - Loop tracker client faster when in magnet mode or if DHT announce fails
   - Don't return an empty peers list in DHT if we only know about the requestor
   - Refactor Storage file data structures
   - Sort files when creating torrents
   - Add torrent auto-stop support; enable for update file
   - Add tunnel auto-close when no torrents are running
   - Close socket before closing output stream to avoid blocking in
     Peer.disconnect(), and prevent Peer.disconnect() loop
 * I2PTunnelHTTPServer: Don't thread a receiver for GET or HEAD
 * Jetty 7.6.13.v20130916
 * Logging:
   - Require strict match of class name component
   - parseLimits() cleanup
 * SSU: More efficient InboundMessageState
 * Streaming:
   - Fix active stream counting so it doesn't count streams
     that are closed and in TIME-WAIT state. Also, break out of the
     counting loop as soon as we know the answer. (Ticket #1039)
   - Consolidate scheduling of DisconnectEvent, and ensure
     we only do it once. (Ticket #1041)
   - Atomics for close/reset send/receive
     so we only do things once. (Ticket #1041)
   - Remove setCloseReceivedOn(), unused outside Connection
   - OR the isFlagSet parameter instead of multiple calls
   - Remove acked packets from _outboundPackets inside synced iterator
   - Short-circuit _outboundPackets iterator if empty
   - Small optimization if not logging in ConnectionPacketHandler
   - Stub out processing of close ack (ticket #1042)
   - Don't queue a message for an unknown connection on the SYN queue
     if it has a send ID set, it must be for a recently closed connection
   - Major rework of connection disconnect process. Tickets 1040-1042.
   - Prevent multiple calls or reentrancy in disconnect() (ticket #1041)
   - Implement processing of close to skip TIME-WAIT, and
     wait for all packets to be acked (not just the CLOSE) before
     doing so, if possible (ticket #1042)
   - Don't call disconnect() or disconnectComplete() from I2PSocketFull.destroy()
     so retransmissions and acks can still happen (removes some close loops)
   - Don't call disconnect() until we have both sent and received a CLOSE (ticket #1040)
   - Don't reset the connection from CPH just because we sent a CLOSE
     and it was acked (ticket #1040)
   - Ack packets even if we sent a CLOSE  (ticket #1040)
   - Retransmit CLOSE if not acked (ticket #1040)
   - Send received packets to the MessageInputStream even if we haven't received a SYN
   - Don't call MessageInputStream.messageReceived() for ack-only packets, that was pointless
   - Don't send a RESET after timeout of an outbound connection
   - Work around bugs on other end by limiting retransmission of CLOSE packets
   - Make I2PSocketFull.close() nonblocking; it will now cause any user-side
     writes blocked in I/O (Connection.packetSendChoke()) to throw
     an exception (tickets #629, #1041)
   - Don't ignore InterruptedExceptions; throw InterruptedIOException
   - MessageInputStream locking fixes
   - Make _isInbound final
   - More cleanups, javadocs, log tweaks
 * Transport: Treat more IPs as local
   - 25/8 Hamachi (moved from 5/8 Nov. 2012)
   - 2620:9b::/32 Hamachi
   - 3ffc::/16 6bone
   - 2001:db8::/32 example (RFC 3849)
   - 0::/8 Includes IPv4 compatibility addresses ::xxxx:xxxx
 * Update:
   - Support notification of updates that cannot be downloaded
     due to "constraints". Add constraint checks for java version,
     router version, configuration, and base permissions. (ticket #1024)
   - Thread news fetcher so it doesn't clog the scheduler
 * Watchdog: Format messages better

2013-10-06 zzz
 Prop from branch i2p.i2p.zzz.ecdsa:
 * Build:
   - Generate su3 file in release target
   - Add zzz's new RSA 4096 pubkey cert for updates
   - Fix checkcerts.sh
 * Console: Move advanced setting to HelperBase
 * DSAEngine changes:
   - Implement raw sign/verify for other SigTypes
   - Add sign/verify methods using Java keys
 * ECDSA Support:
   - Add ECConstants which looks for named curves and falls back to
     explicitly defining the curves
   - Add support for ECDSA to SigType, DSAEngine and KeyGenerator
   - Attempt to add BC as a Provider
   - genSpec: fallback to BC provider
 * EepGet:
   - Fix non-proxied PartialEepGet
   - Prevent non-proxied eepget for an I2P host
 * KeyGenerator changes:
   - Generate key pairs for all supported SigTypes
   - KeyPairGen: Catch ProviderException, fallback to BC provider
   - Add KeyGenerator main() tests
 * KeyRing and DirKeyRing added: simple backend for storing X.509 certs
 * KeyStoreUtil added:
   - Consolidate KeyStore code from SSLEepGet, I2CPSSLSocketFactory,
     SSLClientListenerRunner, and RouterConsoleRunner into new
     KeyStoreUtil and CertUtil classes in net.i2p.crypto (ticket #744)
   - Change default to RSA 2048 (ticket #1017)
   - Set file modes on written keys
   - Overwrite check in createKeys()
   - New getCert(), getKey()
   - Extend keygen max wait
   - Read back private key to verify after keygen
   - Validate cert after reading from file
   - Validate CN in cert
   - Specify cert signature algorithm when generating keys
 * NativeBigInteger: Tweak to prevent early context instantiation
 * RSA support added: constants, parameters, sig types, support in DSAEngine, KeyGenerator, SigUtil
 * SHA1Hash: Add no-arg constructor
 * SigType changes:
   - Add parameters (curve specs) to SigTypes
   - Add getHashInstance()
   - Add RSA, fix ECDSA
   - Renumber, rename, comment out types that are too short.
 * SigUtil added:
   - Converters from Java formats (ASN.1, X.509, PKCS#8)
     to I2P formats for Signatures and SigningKeys
   - Move ASN.1 converter from DSAEngine to SigUtil, generalize
     for variable length, add support for longer sequences,
     add more sanity checks, add more exceptions
   - Move I2P-to-Java DSA key conversion from DSAEngine to SigUtil
   - Add Java-to-I2P DSA key conversion
   - Add Java key import
   - New split() and combine() methods
 * SSLEepGet: Move all certificates to certificates/ssl, in preparation
   for other certificate uses by SU3File
 * SU3File changes:
   - Support all SigTypes
   - Implement keygen
   - Readahead to get sigtype on verify, as we need the hash type
   - Enum for content type
   - Add unknown content type, make default
   - Fix NPE if private key not found or sign fails
   - Store generated keys in keystore, and get private key from keystore
     for signing, in Java format
   - Use Java keys to sign and verify so we don't
     lose the key parameters in the conversion to I2P keys
   - Type checking of Java private key vs. type when signing
   - Use certs instead of public keys for verification
   - Fix arg processing
   - Improve validate-without-extract
   - New extract command
   - Change static fields to avoid early context init
   - Reduce PRNG buffer size for faster signing
 * Update: Preliminary work for su3 router updates:
   - New ROUTER_SIGNED_SU3 UpdateType
   - Add support for torrent and HTTP
   - Refactor UpdateRunners to return actual UpdateType
   - Deal with signed/su3 conflicts
   - Verify and extract su3 files.
   - Stub out support for clearnet su3 updating
   - New config for proxying news, separate from proxying update
   - PartialEepGet and SSLEepGet tweaks to support clearnet update
   - Remove proxy, key, and url config from /configupdate
   - More URI checks in UpdateRunner
   - Add https support for news fetch
   - Add su3 mime type
   - Reset found version in update loop so we don't fetch from
     the next host too.
   - Prevent NPE on version after SSL fetch

* 2013-10-02 0.9.8.1 released

2013-10-01 zzz
 * Startup: Fix rekeying on Windows (tickets #1056, 1057)

* 2013-09-30 0.9.8 released

2013-09-26 kytv
 * French, German, Russian, and Swedish translation updates from Transifex
 * Update geoip.txt based on Maxmind GeoLite Country database from 2013-09-03

2013-09-23 zzz
 * Console: Add /proof page which can copied to prove you run a router

2013-09-20 kytv
 * Chinese, French, German, Russian, and Swedish translation updates from
   Transifex

2013-09-17 zzz
 * Revert expl. default back to 2 hops, wait for next release

2013-09-07 zzz
 * Crypto: Don't use "short exponent" on faster platforms.
   Rebuild router identity if key length doesn't match setting.

2013-09-03 zzz


----------------

EARLIER HISTORY IS AVAILABLE IN THE SOURCE PACKAGE"