## Uses of Class
net.i2p.client.impl.I2PSessionImpl

- Packages that use I2PSessionImpl
  Package | Description
  --- | ---
  net.i2p.client.impl | Internal implementation of the I2P client SDK, providing the client side of the I2CP protocol for applications communicating through I2P.

- - ### Uses of I2PSessionImpl in net.i2p.client.impl

    Subclasses of I2PSessionImpl in net.i2p.client.impl
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `I2PSessionImpl2` Thread safe implementation of an I2P session running over TCP.
    `(package private) class` | `I2PSessionMuxedImpl` I2PSession with protocol and ports Streaming lib has been modified to send I2PSession.PROTO_STREAMING but still receives all.
    `class` | `I2PSimpleSession` Create a new session for doing naming and bandwidth queries only.
    `(package private) class` | `SubSession` An additional session using another session's connection.

    Methods in net.i2p.client.impl with parameters of type I2PSessionImpl
    Modifier and Type | Method and Description
    --- | ---
    `void` | I2CPMessageProducer.`connect(I2PSessionImpl session)` Send all the messages that a client needs to send to a router to establish a new session.
    `void` | I2CPMessageProducer.`createLeaseSet(I2PSessionImpl session, LeaseSet leaseSet, SigningPrivateKey signingPriv, List<PrivateKey> privs)` In response to a RequestLeaseSet Message from the router, send a CreateLeaseset Message back to the router.
    `void` | I2CPMessageProducer.`disconnect(I2PSessionImpl session)` Send a message to the router destroying the session, which could be a subsession.
    `void` | HostReplyMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | SessionStatusMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | DisconnectMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | RequestVariableLeaseSetMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | BWLimitsMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | DestReplyMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | I2CPMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | RequestLeaseSetMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | SetDateMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | MessageStatusMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | MessagePayloadMessageHandler.`handleMessage(I2CPMessage message, I2PSessionImpl session)`
    `void` | I2CPMessageProducer.`reportAbuse(I2PSessionImpl session, int msgId, int severity)` Send an abuse message to the router
    `protected boolean` | RequestLeaseSetMessageHandler.`requiresLS2(I2PSessionImpl session)` Do we send a LeaseSet or a LeaseSet2? Side effect: sets _ls2Type
    `void` | I2CPMessageProducer.`sendMessage(I2PSessionImpl session, Destination dest, long nonce, byte[] payload, long expires, int flags)` Package up and send the payload to the router for delivery
    `void` | I2CPMessageProducer.`sendMessage(I2PSessionImpl session, Destination dest, long nonce, byte[] payload, SendMessageOptions options)` Package up and send the payload to the router for delivery
    `void` | I2CPMessageProducer.`sendMessage(I2PSessionImpl session, Destination dest, long nonce, byte[] payload, SessionTag tag, SessionKey key, Set<SessionTag> tags, SessionKey newKey, long expires)` Package up and send the payload to the router for delivery
    `protected void` | RequestLeaseSetMessageHandler.`signLeaseSet(LeaseSet leaseSet, boolean isLS2, I2PSessionImpl session)` Finish creating and signing the new LeaseSet
    `void` | I2CPMessageProducer.`updateBandwidth(I2PSessionImpl session)` Update the bandwidth setting
    `void` | I2CPMessageProducer.`updateTunnels(I2PSessionImpl session, int tunnels)` Update number of tunnels

    Constructors in net.i2p.client.impl with parameters of type I2PSessionImpl
    Constructor and Description
    `ClientWriterRunner(OutputStream out, I2PSessionImpl session)` As of 0.9.11 does not start the thread, caller must call startWriting()
    `I2PSessionImpl(I2PSessionImpl primary, InputStream destKeyStream, Properties options)`
    `I2PSessionImpl2(I2PSessionImpl primary, InputStream destKeyStream, Properties options)`
    `I2PSessionMuxedImpl(I2PSessionImpl primary, InputStream destKeyStream, Properties options)`
    `SessionIdleTimer(I2PAppContext context, I2PSessionImpl session, boolean reduce, boolean shutdown)` reduce, shutdown, or both must be true