## Uses of Class
net.i2p.data.i2np.I2NPMessageException

- Packages that use I2NPMessageException
  Package | Description
  --- | ---
  net.i2p.data.i2np | This package defines the low-level messages sent between routers, called Invisible Internet Network Protocol (I2NP).
  net.i2p.router.crypto.ratchet | Implementation of ECIES-X25519-AEAD-Ratchet cryptographic protocol (I2P proposal 144), providing forward secrecy and enhanced security for I2P transport communications.
  net.i2p.router.transport.ntcp | The NTCP (New TCP) transport for I2P, allowing I2P messages to be passed over TCP connections.
  net.i2p.router.transport.udp | The UDP transport (also known as 'SSU' or Secure Semi-reliable UDP transport) for I2P, allowing I2P messages to be passed over UDP connections.

- - ### Uses of I2NPMessageException in net.i2p.data.i2np

    Methods in net.i2p.data.i2np that throw I2NPMessageException
    Modifier and Type | Method and Description
    --- | ---
    `I2NPMessage` | UnknownI2NPMessage.`convert()` Attempt to convert this message to a known message class.
    `static I2NPMessage` | I2NPMessageImpl.`createMessage(I2PAppContext context, int type)` Yes, this is fairly ugly, but its the only place it ever happens.
    `static I2NPMessage` | I2NPMessageImpl.`fromRawByteArray(I2PAppContext ctx, byte[] buffer, int offset, int len, I2NPMessageHandler handler)` Read the message with a short 5-byte header.
    `static I2NPMessage` | I2NPMessageImpl.`fromRawByteArrayNTCP2(I2PAppContext ctx, byte[] buffer, int offset, int len, I2NPMessageHandler handler)` Read the message with a short 9-byte header.
    `int` | I2NPMessage.`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` | I2NPMessageImpl.`readBytes(byte[] data, int type, int offset)` Read the header, then read the rest into buffer, then call readMessage in the implemented message type
    `int` | I2NPMessage.`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
    `int` | I2NPMessageImpl.`readBytes(byte[] data, int type, int offset, int maxLen)` Set a limit on the max to read from the data buffer, so that we can use a large buffer but prevent the reader from reading off the end.
    `int` | FastI2NPMessageImpl.`readBytes(byte[] data, int type, int offset, int maxLen)` Ignore, but save, the checksum, to be used later if necessary.
    `I2NPMessage` | I2NPMessageHandler.`readMessage(byte[] data)` Read an I2NPMessage from the byte array and return the fully populated object.
    `int` | I2NPMessageHandler.`readMessage(byte[] data, int offset)` Result is retreived with lastRead()
    `int` | I2NPMessageHandler.`readMessage(byte[] data, int offset, int maxLen)` Set a limit on the max to read from the data buffer, so that we can use a large buffer but prevent the reader from reading off the end.
    `void` | DatabaseLookupMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | I2NPMessage.`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` | GarlicMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | DatabaseSearchReplyMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | VariableTunnelBuildMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | TunnelDataMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | DataMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | DeliveryStatusMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | TunnelBuildMessageBase.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | ShortTunnelBuildReplyMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | ShortTunnelBuildMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | TunnelGatewayMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | VariableTunnelBuildReplyMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | DatabaseStoreMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | UnknownI2NPMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | OutboundTunnelBuildReplyMessage.`readMessage(byte[] data, int offset, int dataSize, int type)`
    `void` | I2NPMessage.`readMessage(byte[] data, int offset, int dataSize, int type, I2NPMessageHandler handler)`
    `void` | I2NPMessageImpl.`readMessage(byte[] data, int offset, int dataSize, int type, I2NPMessageHandler handler)`
    `void` | TunnelGatewayMessage.`readMessage(byte[] data, int offset, int dataSize, int type, I2NPMessageHandler handler)` Note that for efficiency at the IBGW, this does not fully deserialize the included I2NP Message.
    `protected int` | DatabaseLookupMessage.`writeMessageBody(byte[] out, int curIndex)`
    `protected int` | GarlicMessage.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index
    `protected abstract int` | I2NPMessageImpl.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index.
    `protected int` | DatabaseSearchReplyMessage.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index
    `protected int` | VariableTunnelBuildMessage.`writeMessageBody(byte[] out, int curIndex)`
    `protected int` | TunnelDataMessage.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index
    `protected int` | DeliveryStatusMessage.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index
    `protected int` | TunnelBuildMessageBase.`writeMessageBody(byte[] out, int curIndex)`
    `protected int` | ShortTunnelBuildReplyMessage.`writeMessageBody(byte[] out, int curIndex)`
    `protected int` | ShortTunnelBuildMessage.`writeMessageBody(byte[] out, int curIndex)`
    `protected int` | TunnelGatewayMessage.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index
    `protected int` | VariableTunnelBuildReplyMessage.`writeMessageBody(byte[] out, int curIndex)`
    `protected int` | DatabaseStoreMessage.`writeMessageBody(byte[] out, int curIndex)` write the message body to the output array, starting at the given index
    `protected int` | OutboundTunnelBuildReplyMessage.`writeMessageBody(byte[] out, int curIndex)`

  - ### Uses of I2NPMessageException in net.i2p.router.crypto.ratchet

    Methods in net.i2p.router.crypto.ratchet that throw I2NPMessageException
    Modifier and Type | Method and Description
    --- | ---
    `static int` | RatchetPayload.`processPayload(I2PAppContext ctx, RatchetPayload.PayloadCallback cb, byte[] payload, int off, int length, boolean isHandshake)` Ratchet payload generation and parsing utilities supporting datetime, options, garlic, next key, acknowledgment, and padding blocks for ECIES+AEAD messages

  - ### Uses of I2NPMessageException in net.i2p.router.transport.ntcp

    Methods in net.i2p.router.transport.ntcp that throw I2NPMessageException
    Modifier and Type | Method and Description
    --- | ---
    `void` | NTCP2Payload.PayloadCallback.`gotI2NP(I2NPMessage msg)`
    `static int` | NTCP2Payload.`processPayload(I2PAppContext ctx, NTCP2Payload.PayloadCallback cb, byte[] payload, int off, int length, boolean isHandshake)` Incoming payload.

  - ### Uses of I2NPMessageException in net.i2p.router.transport.udp

    Methods in net.i2p.router.transport.udp that throw I2NPMessageException
    Modifier and Type | Method and Description
    --- | ---
    `void` | SSU2Payload.PayloadCallback.`gotI2NP(I2NPMessage msg)`
    `static int` | SSU2Payload.`processPayload(I2PAppContext ctx, SSU2Payload.PayloadCallback cb, byte[] payload, int off, int length, boolean isHandshake, RemoteHostId from)` Incoming payload.