Class FastI2NPMessageImpl

java.lang.Object
net.i2p.data.i2np.I2NPMessageImpl
net.i2p.data.i2np.FastI2NPMessageImpl
All Implemented Interfaces:
I2NPMessage
Direct Known Subclasses:
DatabaseLookupMessage, DatabaseSearchReplyMessage, DatabaseStoreMessage, DataMessage, DeliveryStatusMessage, GarlicMessage, TunnelDataMessage, TunnelGatewayMessage, UnknownI2NPMessage

public abstract class FastI2NPMessageImpl
extends I2NPMessageImpl
Ignore, but save, the SHA-256 checksum in the full 16-byte header when read in. Use the same checksum when writing out. This is a savings for NTCP in, and for NTCP-in to NTCP-out for TunnelDataMessages. It's also a savings for messages embedded in other messages. Note that SSU does not use the SHA-256 checksum. Subclasses must take care to set _hasChecksum to false to invalidate it if the message payload changes between reading and writing. It isn't clear where, if anywhere, we actually need to send a checksum. For point-to-point messages over NTCP where we know the router version of the peer, we could add a method to skip checksum generation. For end-to-end I2NP messages embedded in a Garlic, TGM, etc... we would need a flag day.
Since:
0.8.12
  • Field Details

  • Constructor Details

  • Method Details

    • readBytes

      public int readBytes​(byte[] data, int type, int offset, int maxLen) throws I2NPMessageException
      Ignore, but save, the checksum, to be used later if necessary.
      Specified by:
      readBytes in interface I2NPMessage
      Overrides:
      readBytes in class I2NPMessageImpl
      Parameters:
      maxLen - read no more than this many bytes from data starting at offset, even if it is longer This includes the type byte only if type < 0
      data - the data, may or may not include the type
      type - the message type or -1 if we should read it here
      offset - where to start starting at type if type is < 0 (16 byte header) starting at ID if type is >= 0 (15 byte header)
      Returns:
      total length of the message
      Throws:
      IllegalStateException - if called twice, to protect saved checksum
      I2NPMessageException - if there is no valid message
    • toByteArray

      public int toByteArray​(byte[] buffer)
      If available, use the previously-computed or previously-read checksum for speed
      Specified by:
      toByteArray in interface I2NPMessage
      Overrides:
      toByteArray in class I2NPMessageImpl
      Returns:
      the length written
    • toByteArrayWithSavedChecksum

      protected int toByteArrayWithSavedChecksum​(byte[] buffer)
      Use a previously-computed checksum for speed