# Package net.i2p.client.impl

Internal implementation of the I2P client SDK, providing the client side of the I2CP protocol for applications communicating through I2P.

See: Description

- Interface Summary
  Interface | Description
  --- | ---
  I2CPMessageHandler | Define a way to handle a particular type of message

- Class Summary
  Class | Description
  --- | ---
  BWLimitsMessageHandler | Handle I2CP BW replies from the router
  ClientWriterRunner | Copied from net.i2p.router.client We need a single thread that writes so we don't have issues with the Piped Streams used in InternalSocket.
  DestReplyMessageHandler | Handle I2CP dest replies from the router
  DisconnectMessageHandler | Handle I2CP disconnect messages from the router
  HandlerImpl | Base class for handling I2CP messages
  HostReplyMessageHandler | Handle I2CP dest replies from the router
  I2CPMessageProducer | Produce the various messages the session needs to send to the router.
  I2PClientImpl | Base client implementation.
  I2PClientMessageHandlerMap | Contains a map of message handlers that a session will want to use
  I2PSessionDemultiplexer | Implement multiplexing with a 1-byte 'protocol' and a two-byte 'port'.
  I2PSessionImpl | Implementation of an I2P session running over TCP.
  I2PSessionImpl2 | Thread safe implementation of an I2P session running over TCP.
  I2PSessionMuxedImpl | I2PSession with protocol and ports Streaming lib has been modified to send I2PSession.PROTO_STREAMING but still receives all.
  I2PSimpleSession | Create a new session for doing naming and bandwidth queries only.
  LkupResult | The return value of I2PSession.lookupDest2()
  MessagePayloadMessageHandler | Handle I2CP MessagePayloadMessages from the router delivering the contents of a message by accepting it, decrypting the payload, adding it to the set of received messages, and telling the router that it has been received correctly.
  MessageState | Contains the state of a payload message being sent to a peer.
  MessageStatusMessageHandler | Handle I2CP MessageStatusMessages from the router.
  RequestLeaseSetMessageHandler | Handle I2CP RequestLeaseSetMessage from the router by granting all leases, using the specified expiration time for each lease.
  RequestVariableLeaseSetMessageHandler | Handle I2CP RequestVariableLeaseSetMessage from the router by granting all leases, retaining the individual expiration time for each lease.
  SessionIdleTimer | Reduce tunnels or shutdown the session on idle if so configured
  SessionStatusMessageHandler | Handle I2CP SessionStatusMessagese from the router, updating the session as necssary.
  SetDateMessageHandler | Handle I2CP time messages from the router
  SubSession | An additional session using another session's connection.

- Enum Summary
  Enum | Description
  --- | ---
  I2PSessionImpl.State | Session state enumeration.

## Package net.i2p.client.impl Description

Internal implementation of the I2P client SDK, providing the client side of the I2CP protocol for applications communicating through I2P.

This package contains:

- I2PSession implementation and management
- I2CP protocol message handling
- Client connection lifecycle management
- Session configuration and state handling
- Message sending and receiving logic

These classes implement the client side of I2CP and are not to be used externally. Subject to change and not part of the public API. Moved from net.i2p.client in 0.9.21 to separate implementation from interface.