## Uses of Interface
net.i2p.data.i2np.I2NPMessage

Packages that use I2NPMessage
Package | Description
--- | ---
net.i2p.data.i2np | The Invisible Internet Network Protocol (I2NP) is only a part of how an application can send messages over the network.
net.i2p.router | The I2P router application handles the I2P network communication.
net.i2p.router.message |
net.i2p.router.networkdb |
net.i2p.router.networkdb.kademlia |
net.i2p.router.transport | The transport system allows the usage of communication layers that are below I2P in the stack, on which I2P messages are sent.
net.i2p.router.transport.udp | The UDP transport (also known as 'SSU transport') allows passing I2P messages on top of UDP.
net.i2p.router.tunnel |

### Uses of I2NPMessage in net.i2p.data.i2np

Classes in net.i2p.data.i2np that implement I2NPMessage
Modifier and Type | Class and Description
--- | ---
`class` | `DatabaseLookupMessage` Defines the message a router sends to another router to search for a key in the network database.
`class` | `DatabaseSearchReplyMessage` Defines the message a router sends to another router in response to a search (DatabaseFindNearest or DatabaseLookup) when it doesn't have the value, specifying what routers it would search.
`class` | `DatabaseStoreMessage` Defines the message a router sends to another router to test the network database reachability, as well as the reply message sent back.
`class` | `DataMessage` Defines a message containing arbitrary bytes of data
`class` | `DeliveryStatusMessage` Defines the message sent back in reply to a message when requested, containing the private ack id.
`class` | `GarlicMessage` Defines the wrapped garlic message
`class` | `I2NPMessageImpl` Defines the base message implementation.
`class` | `TunnelBuildMessage`
`class` | `TunnelBuildReplyMessage` Transmitted from the new outbound endpoint to the creator through a reply tunnel
`class` | `TunnelDataMessage` Defines the message sent between routers as part of the tunnel delivery
`class` | `TunnelGatewayMessage` Defines the message sent between one tunnel's endpoint and another's gateway.
`class` | `UnknownI2NPMessage` This is the same as DataMessage but with a variable message type.
`class` | `VariableTunnelBuildMessage`
`class` | `VariableTunnelBuildReplyMessage` Transmitted from the new outbound endpoint to the creator through a reply tunnel

Methods in net.i2p.data.i2np that return I2NPMessage
Modifier and Type | Method and Description
--- | ---
`I2NPMessage` | I2NPMessageImpl.Builder.`build(I2PAppContext ctx)` instantiate a new I2NPMessage to be populated shortly
`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)` used by SSU only
`I2NPMessage` | GarlicClove.`getData()`
`I2NPMessage` | TunnelGatewayMessage.`getMessage()`
`I2NPMessage` | I2NPMessageHandler.`lastRead()` clear the last message read from a byte array with an offset
`I2NPMessage` | I2NPMessageHandler.`readMessage(byte[] data)` Read an I2NPMessage from the stream and return the fully populated object.
`I2NPMessage` | I2NPMessageHandler.`readMessage(InputStream in)` Read an I2NPMessage from the stream and return the fully populated object.

Methods in net.i2p.data.i2np with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`void` | I2NPMessageReader.I2NPMessageEventListener.`messageReceived(I2NPMessageReader reader, I2NPMessage message, long msToRead, int bytesRead)` Notify the listener that a message has been received from the given reader
`void` | GarlicClove.`setData(I2NPMessage msg)`
`void` | TunnelGatewayMessage.`setMessage(I2NPMessage msg)`

### Uses of I2NPMessage in net.i2p.router

Methods in net.i2p.router that return I2NPMessage
Modifier and Type | Method and Description
--- | ---
`I2NPMessage` | OutNetMessage.`getMessage()` Specifies the message to be sent

Methods in net.i2p.router with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`int` | InNetMessagePool.`add(I2NPMessage messageBody, RouterIdentity fromRouter, Hash fromRouterHash)` Add a new message to the pool.
`Job` | HandlerJobBuilder.`createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)` Create a new job to handle the received message.
`void` | MessageHistory.`droppedOtherMessage(I2NPMessage message, Hash from)` We received another message we weren't waiting for and don't know how to handle
`int` | InNetMessagePool.`handleReplies(I2NPMessage messageBody)`
`boolean` | MessageSelector.`isMatch(I2NPMessage message)` Returns true if the received message matches the selector
`void` | ReplyJob.`setMessage(I2NPMessage message)`
`void` | OutNetMessage.`setMessage(I2NPMessage msg)`

### Uses of I2NPMessage in net.i2p.router.message

Methods in net.i2p.router.message that return I2NPMessage
Modifier and Type | Method and Description
--- | ---
`I2NPMessage` | PayloadGarlicConfig.`getPayload()`

Methods in net.i2p.router.message with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`Job` | GarlicMessageHandler.`createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`void` | HandleGarlicMessageJob.`handleClove(DeliveryInstructions instructions, I2NPMessage data)`
`void` | GarlicMessageReceiver.CloveReceiver.`handleClove(DeliveryInstructions instructions, I2NPMessage data)`
`void` | PayloadGarlicConfig.`setPayload(I2NPMessage message)` Specify the I2NP message to be sent - if this is set, no other cloves can be included in this block

Constructors in net.i2p.router.message with parameters of type I2NPMessage
Constructor and Description
`SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, int timeoutMs, int priority)`
`SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, Job onSend, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority)`
`SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority)`

### Uses of I2NPMessage in net.i2p.router.networkdb

Methods in net.i2p.router.networkdb with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`Job` | DatabaseStoreMessageHandler.`createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`Job` | DatabaseLookupMessageHandler.`createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`protected void` | HandleDatabaseLookupMessageJob.`sendMessage(I2NPMessage message, Hash toPeer, TunnelId replyTunnel)`

### Uses of I2NPMessage in net.i2p.router.networkdb.kademlia

Methods in net.i2p.router.networkdb.kademlia with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`Job` | FloodfillDatabaseStoreMessageHandler.`createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`Job` | FloodfillDatabaseLookupMessageHandler.`createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`boolean` | FloodOnlyLookupSelector.`isMatch(I2NPMessage message)`
`boolean` | StoreMessageSelector.`isMatch(I2NPMessage message)`
`boolean` | SearchMessageSelector.`isMatch(I2NPMessage message)`
`void` | SearchUpdateReplyFoundJob.`setMessage(I2NPMessage message)`
`void` | FloodOnlyLookupMatchJob.`setMessage(I2NPMessage message)`
`(package private) static MessageWrapper.WrappedMessage` | MessageWrapper.`wrap(RouterContext ctx, I2NPMessage m, Hash from, RouterInfo to)` Garlic wrap a message from a client or this router, destined for a router, to hide the contents from the OBEP.

### Uses of I2NPMessage in net.i2p.router.transport

Methods in net.i2p.router.transport with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`List` | OutboundMessageRegistry.`getOriginalMessages(I2NPMessage message)` Retrieve all messages that are waiting for the specified message.
`void` | TransportEventListener.`messageReceived(I2NPMessage message, RouterIdentity fromRouter, Hash fromRouterHash)`
`void` | TransportManager.`messageReceived(I2NPMessage message, RouterIdentity fromRouter, Hash fromRouterHash)`
`void` | TransportImpl.`messageReceived(I2NPMessage inMsg, RouterIdentity remoteIdent, Hash remoteIdentHash, long msToReceive, int bytesReceived)` Message received from the I2NPMessageReader - send it to the listener

### Uses of I2NPMessage in net.i2p.router.transport.udp

Methods in net.i2p.router.transport.udp with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`boolean` | OutboundMessageState.`initialize(I2NPMessage msg, PeerState peer)`
`boolean` | OutboundMessageState.`initialize(OutNetMessage m, I2NPMessage msg)`
`void` | UDPTransport.`messageReceived(I2NPMessage inMsg, RouterIdentity remoteIdent, Hash remoteIdentHash, long msToReceive, int bytesReceived)` infinite loop public RouterAddress getCurrentAddress() { if (needsRebuild()) rebuildExternalAddress(false); return super.getCurrentAddress(); }
`(package private) void` | UDPTransport.`send(I2NPMessage msg, PeerState peer)`

### Uses of I2NPMessage in net.i2p.router.tunnel

Methods in net.i2p.router.tunnel with parameters of type I2NPMessage
Modifier and Type | Method and Description
--- | ---
`void` | ThrottledPumpedTunnelGateway.`add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel)` Possibly drop a message due to bandwidth before adding it to the preprocessor queue.
`void` | PumpedTunnelGateway.`add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel)` Add a message to be sent down the tunnel, either sending it now (perhaps coallesced with other pending messages) or after a brief pause (_flushFrequency).
`void` | TunnelGateway.`add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel)` Add a message to be sent down the tunnel, either sending it now (perhaps coallesced with other pending messages) or after a brief pause (_flushFrequency).
`void` | TunnelGatewayZeroHop.`add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel)` Add a message to be sent down the tunnel (immediately forwarding it to the `InboundMessageDistributor` or `OutboundMessageDistributor`, as necessary).
`void` | TunnelDispatcher.`dispatchOutbound(I2NPMessage msg, TunnelId outboundTunnel, Hash targetPeer)` We are the outbound tunnel gateway (we created it), so wrap up this message with instructions to be forwarded to the targetPeer when it reaches the endpoint.
`void` | TunnelDispatcher.`dispatchOutbound(I2NPMessage msg, TunnelId outboundTunnel, TunnelId targetTunnel, Hash targetPeer)` We are the outbound tunnel gateway (we created it), so wrap up this message with instructions to be forwarded to the targetTunnel on the targetPeer when it reaches the endpoint.
`void` | OutboundMessageDistributor.`distribute(I2NPMessage msg, Hash target)`
`void` | InboundMessageDistributor.`distribute(I2NPMessage msg, Hash target)`
`void` | OutboundMessageDistributor.`distribute(I2NPMessage msg, Hash target, TunnelId tunnel)`
`void` | InboundMessageDistributor.`distribute(I2NPMessage msg, Hash target, TunnelId tunnel)`
`void` | OutboundMessageDistributor.`distribute(I2NPMessage msg, RouterInfo target, TunnelId tunnel)`
`void` | InboundMessageDistributor.`handleClove(DeliveryInstructions instructions, I2NPMessage data)` Handle a clove removed from the garlic message
`void` | FragmentHandler.DefragmentedReceiver.`receiveComplete(I2NPMessage msg, Hash toRouter, TunnelId toTunnel)` Receive a fully formed I2NPMessage out of the tunnel

Constructors in net.i2p.router.tunnel with parameters of type I2NPMessage
Constructor and Description
`TunnelGateway.Pending(I2NPMessage message, Hash toRouter, TunnelId toTunnel)`
`TunnelGateway.Pending(I2NPMessage message, Hash toRouter, TunnelId toTunnel, long now)`
`TunnelGateway.PendingImpl(I2NPMessage message, Hash toRouter, TunnelId toTunnel)`