net.i2p.data.i2np

## Interface I2NPMessage

- All Known Implementing Classes:
    DatabaseLookupMessage, DatabaseSearchReplyMessage, DatabaseStoreMessage, DataMessage, DeliveryStatusMessage, FastI2NPMessageImpl, GarlicMessage, I2NPMessageImpl, OutboundTunnelBuildReplyMessage, ShortTunnelBuildMessage, ShortTunnelBuildReplyMessage, TunnelBuildMessage, TunnelBuildMessageBase, TunnelBuildReplyMessage, TunnelDataMessage, TunnelGatewayMessage, UnknownI2NPMessage, VariableTunnelBuildMessage, VariableTunnelBuildReplyMessage

      public interface I2NPMessage

  Base interface for all I2NP messages Note: No longer extends DataStructure as of 0.9.48

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static long` | `MAX_ID_VALUE` 4 bytes unsigned
    `static int` | `MAX_SIZE` Nominal limit, actual max is much less.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `long` | `getMessageExpiration()` Date after which the message should be dropped (and the associated uniqueId forgotten)
    `int` | `getMessageSize()` How large the message is, including any checksums, i.e.
    `int` | `getRawMessageSize()` How large the raw message is with the short 5 byte header
    `int` | `getType()` Return the unique identifier for this type of I2NP message, as defined in the I2NP spec
    `long` | `getUniqueId()`
    `long` | `getUniqueId(long msgIDBloomXor)` Replay resistant message ID optionally, the caller may pass a msgIDBloomXor value, and the return value will be Xor'ed with that value.
    `int` | `readBytes(byte[] data, int type, int offset)` Read the body into the data structures, after the initial type byte, using the current class's format as defined by the I2NP specification
    `int` | `readBytes(byte[] data, int type, int offset, int maxLen)` Read the body into the data structures, after the initial type byte, using the current class's format as defined by the I2NP specification
    `void` | `readMessage(byte[] data, int offset, int dataSize, int type)` Read the body into the data structures, after the initial type byte and the uniqueId / expiration, using the current class's format as defined by the I2NP specification
    `void` | `readMessage(byte[] data, int offset, int dataSize, int type, I2NPMessageHandler handler)`
    `void` | `setMessageExpiration(long exp)`
    `void` | `setUniqueId(long id)`
    `byte[]` | `toByteArray()`
    `int` | `toByteArray(byte[] buffer)` Write the message to the buffer, returning the new offset (NOT the length).
    `int` | `toByteArray(byte[] buffer, int off)` Write the message to the buffer, returning the new offset (NOT the length).
    `int` | `toRawByteArray(byte[] buffer)` Write the message to the buffer, returning the new offset (NOT the length).
    `int` | `toRawByteArrayNTCP2(byte[] buffer, int off)` Write the message to the buffer, returning the new offset (NOT the length).

- - ### Field Detail

    - #### MAX_ID_VALUE

          static final long MAX_ID_VALUE

      4 bytes unsigned
      See Also:
        Constant Field Values

    - #### MAX_SIZE

          static final int MAX_SIZE

      Nominal limit, actual max is much less. See website docs for further restrictions due to various overhead and limitations in encryption, fragmentation, and the transports.
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### getMessageExpiration

          long getMessageExpiration()

      Date after which the message should be dropped (and the associated uniqueId forgotten)

    - #### getMessageSize

          int getMessageSize()

      How large the message is, including any checksums, i.e. full 16 byte header

    - #### getRawMessageSize

          int getRawMessageSize()

      How large the raw message is with the short 5 byte header

    - #### getType

          int getType()

      Return the unique identifier for this type of I2NP message, as defined in the I2NP spec

    - #### getUniqueId

          long getUniqueId()

    - #### getUniqueId

          long getUniqueId(long msgIDBloomXor)

      Replay resistant message ID optionally, the caller may pass a msgIDBloomXor value, and the return value will be Xor'ed with that value. Passing a msgIDBloomXor value of 0 will result in the original ID being returned, instead of passing 0 use the no-arg version.

    - #### readBytes

          int readBytes(byte[] data,
                        int type,
                        int offset)
                 throws I2NPMessageException

      Read the body into the data structures, after the initial type byte, using the current class's format as defined by the I2NP specification
      Parameters:
        `data` - the data
        `type` - I2NP message type. If less than zero, read the type from data
        `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:
        size of the message read (including headers)
      Throws:
        `I2NPMessageException` - if there is no valid message

    - #### readBytes

          int readBytes(byte[] data,
                        int type,
                        int offset,
                        int maxLen)
                 throws I2NPMessageException

      Read the body into the data structures, after the initial type byte, using the current class's format as defined by the I2NP specification
      Parameters:
        `data` - the data, may or may not include the type
        `type` - I2NP message type. If less than zero, read the type from data
        `offset` - where to start starting at type if type is < 0 (16 byte header) starting at ID if type is >= 0 (15 byte header)
        `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
      Returns:
        size of the message read (including headers)
      Throws:
        `I2NPMessageException` - if there is no valid message

    - #### readMessage

          void readMessage(byte[] data,
                           int offset,
                           int dataSize,
                           int type)
                    throws I2NPMessageException

      Read the body into the data structures, after the initial type byte and the uniqueId / expiration, using the current class's format as defined by the I2NP specification
      Parameters:
        `data` - data to read from
        `offset` - where to start in the data array
        `dataSize` - how long into the data to read
        `type` - I2NP message type
      Throws:
        `I2NPMessageException` - if the stream doesn't contain a valid message that this class can read.

    - #### readMessage

          void readMessage(byte[] data,
                           int offset,
                           int dataSize,
                           int type,
                           I2NPMessageHandler handler)
                    throws I2NPMessageException

      Throws:
        `I2NPMessageException`

    - #### setMessageExpiration

          void setMessageExpiration(long exp)

    - #### setUniqueId

          void setUniqueId(long id)

    - #### toByteArray

          byte[] toByteArray()

    - #### toByteArray

          int toByteArray(byte[] buffer)

      Write the message to the buffer, returning the new offset (NOT the length). the data is formatted so as to be self contained, with the type, size, expiration, unique id, as well as a checksum bundled along. Full 16 byte header for NTCP 1.
      Returns:
        the new offset (NOT the length)

    - #### toByteArray

          int toByteArray(byte[] buffer,
                          int off)

      Write the message to the buffer, returning the new offset (NOT the length). the data is formatted so as to be self contained, with the type, size, expiration, unique id, as well as a checksum bundled along. Full 16 byte header for NTCP 1.
      Parameters:
        `off` - the offset to start writing at
      Returns:
        the new offset (NOT the length)

    - #### toRawByteArray

          int toRawByteArray(byte[] buffer)

      Write the message to the buffer, returning the new offset (NOT the length). the data is is not self contained - it does not include the size, unique id, or any checksum, but does include the type and expiration. Short 5 byte header for SSU.
      Returns:
        the length written

    - #### toRawByteArrayNTCP2

          int toRawByteArrayNTCP2(byte[] buffer,
                                  int off)

      Write the message to the buffer, returning the new offset (NOT the length). the data is is not self contained - it does not include the size, unique id, or any checksum, but does include the type and expiration. Short 9 byte header for NTCP 2.
      Parameters:
        `off` - the offset to start writing at
      Returns:
        the new offset (NOT the length)