- Prep for future enhancements by refactoring to a state machine model
- Reduce object churn; use SimpleByteCache
- Synchronization
- Define some constants
- More finals
- Log tweaks
- Forward port from trunk: Don't send HTML-only headers for icons (2nd try)
- Consolidate HTML header code
- Set no-cache headers
- Don't set HTML headers for redirects
- 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.
- Add ACKBitfield.highestReceived() for efficiency
- Only write as many partial bitfield bytes as required,
rather than 10 (for 64 bits) every time.
- Don't allow more than 10 bytes when reading in bitfield
- Don't send an extra byte if (fragments % 7) == 0
- Don't send a corrupt ack packet if the partial ack got completed (race)
- Log tweaks
Fix SSU Output Queue errors due to races with 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 (thx dg)