## Uses of Interface
net.i2p.data.i2cp.I2CPMessage

- Packages that use I2CPMessage
  Package | Description
  --- | ---
  net.i2p.client | Implements the base I2P SDK for developing applications that communicate through I2P.
  net.i2p.data.i2cp | The Invisible Internet Client Protocol (I2CP) allows applications simplified access to the I2P network without requiring them to deal with the issues involved with the Invisible Internet Network Protocol (I2NP).
  net.i2p.internal | Interface and classes for a router and client within the same JVM to directly pass I2CP messages using Queues instead of serialized messages over socket streams.
  net.i2p.router.client |

- - ### Uses of I2CPMessage in net.i2p.client

    Methods in net.i2p.client with parameters of type I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `void` | ClientWriterRunner.`addMessage(I2CPMessage msg)` Add this message to the writer's queue
    `void` | MessagePayloadMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | DisconnectMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | BWLimitsMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | DestReplyMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | RequestLeaseSetMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | SetDateMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | I2CPMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | SessionStatusMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | MessageStatusMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | I2PSessionImpl.`messageReceived(I2CPMessageReader reader, I2CPMessage message)` The I2CPMessageEventListener callback.
    `(package private) void` | I2PSessionImpl.`sendMessage(I2CPMessage message)` Deliver an I2CP message to the router

  - ### Uses of I2CPMessage in net.i2p.data.i2cp

    Classes in net.i2p.data.i2cp that implement I2CPMessage
    Modifier and Type | Class and Description
    --- | ---
    `class` | `BandwidthLimitsMessage` Tell the other side the limits
    `class` | `CreateLeaseSetMessage` Defines the message a client sends to a router when authorizing the LeaseSet
    `class` | `CreateSessionMessage` Defines the message a client sends to a router when establishing a new session.
    `class` | `DestLookupMessage` Request the router look up the dest for a hash
    `class` | `DestReplyMessage` Response to DestLookupMessage.
    `class` | `DestroySessionMessage` Defines the message a client sends to a router when destroying existing session.
    `class` | `DisconnectMessage` Defines the message a client sends to a router when destroying existing session.
    `class` | `GetBandwidthLimitsMessage` Request the router tells us the current bw limits
    `class` | `GetDateMessage` Request the other side to send us what they think the current time is/ Only supported from client to router.
    `class` | `I2CPMessageImpl` Defines the base message implementation.
    `class` | `MessagePayloadMessage` Defines the payload message a router sends to the client
    `class` | `MessageStatusMessage` Defines the message a client sends to a router when destroying existing session.
    `class` | `ReceiveMessageBeginMessage` Defines the message a client sends to a router when asking the router to start sending a message to it.
    `class` | `ReceiveMessageEndMessage` Defines the message a client sends to a router when asking the router to start sending a message to it.
    `class` | `ReconfigureSessionMessage` Defines the message a client sends to a router when updating the config on an existing session.
    `class` | `ReportAbuseMessage` Defines the message a client sends to a router when asking the router what its address visibility is
    `class` | `RequestLeaseSetMessage` Defines the message a client sends to a router when destroying existing session.
    `class` | `SendMessageExpiresMessage` Same as SendMessageMessage, but with an expiration to be passed to the router As of 0.8.4, retrofitted to use DateAndFlags.
    `class` | `SendMessageMessage` Defines the message a client sends to a router to ask it to deliver a new message
    `class` | `SessionStatusMessage` Defines the message a client sends to a router when destroying existing session.
    `class` | `SetDateMessage` Tell the other side what time it is.

    Methods in net.i2p.data.i2cp that return I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `static I2CPMessage` | I2CPMessageHandler.`readMessage(InputStream in)` Read an I2CPMessage from the stream and return the fully populated object.

    Methods in net.i2p.data.i2cp with parameters of type I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `void` | I2CPMessageReader.I2CPMessageEventListener.`messageReceived(I2CPMessageReader reader, I2CPMessage message)` Notify the listener that a message has been received from the given reader

  - ### Uses of I2CPMessage in net.i2p.internal

    Classes in net.i2p.internal that implement I2CPMessage
    Modifier and Type | Class and Description
    --- | ---
    `class` | `PoisonI2CPMessage` For marking end-of-queues in a standard manner.

    Methods in net.i2p.internal that return I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `abstract I2CPMessage` | I2CPMessageQueue.`poll()` Receive a message, nonblocking.
    `abstract I2CPMessage` | I2CPMessageQueue.`take()` Receive a message, blocking until one is available.

    Methods in net.i2p.internal with parameters of type I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `abstract boolean` | I2CPMessageQueue.`offer(I2CPMessage msg)` Send a message, nonblocking.
    `abstract void` | I2CPMessageQueue.`put(I2CPMessage msg)` Send a message, blocking until space is available.

  - ### Uses of I2CPMessage in net.i2p.router.client

    Methods in net.i2p.router.client that return I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `I2CPMessage` | I2CPMessageQueueImpl.`poll()` Receive a message, nonblocking
    `I2CPMessage` | I2CPMessageQueueImpl.`take()` Receive a message, blocking until one is available

    Methods in net.i2p.router.client with parameters of type I2CPMessage
    Modifier and Type | Method and Description
    --- | ---
    `void` | ClientWriterRunner.`addMessage(I2CPMessage msg)` Add this message to the writer's queue
    `(package private) void` | QueuedClientConnectionRunner.`doSend(I2CPMessage msg)` Actually send the I2CPMessage to the client.
    `(package private) void` | ClientConnectionRunner.`doSend(I2CPMessage msg)` Actually send the I2CPMessage to the peer through the socket
    `void` | ClientMessageEventListener.`messageReceived(I2CPMessageReader reader, I2CPMessage message)` Handle an incoming message and dispatch it to the appropriate handler
    `boolean` | I2CPMessageQueueImpl.`offer(I2CPMessage msg)` Send a message, nonblocking
    `void` | I2CPMessageQueueImpl.`put(I2CPMessage msg)` Send a message, blocking until space is available
    `(package private) void` | QueuedClientConnectionRunner.`writeMessage(I2CPMessage msg)` In super(), doSend queues it to the writer thread and the writer thread calls writeMessage() to write to the output stream.
    `(package private) void` | ClientConnectionRunner.`writeMessage(I2CPMessage msg)`

    Constructor parameters in net.i2p.router.client with type arguments of type I2CPMessage
    Constructor and Description
    `I2CPMessageQueueImpl(BlockingQueue<I2CPMessage> in, BlockingQueue<I2CPMessage> out)`
    `I2CPMessageQueueImpl(BlockingQueue<I2CPMessage> in, BlockingQueue<I2CPMessage> out)`