## Uses of Interface
net.i2p.client.I2PSession

Packages that use I2PSession
net.i2p.client: Implements the base I2P SDK for developing applications that communicate through I2P.
net.i2p.client.datagram: Provides a standard way for reading and writing messages transferred over I2P so that the recipient has an authenticated mechanism to reply to it.
net.i2p.client.streaming: Implements a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages.
net.i2p.i2ptunnel

Uses of I2PSession in net.i2p.client

Classes in net.i2p.client that implement I2PSession
`(package private) class` `I2PSessionImpl` Implementation of an I2P session running over TCP.
`(package private) class` `I2PSessionImpl2` Thread safe implementation of an I2P session running over TCP.

Methods in net.i2p.client that return I2PSession
`I2PSession` `I2PClientImpl.createSession(I2PAppContext context, java.io.InputStream destKeyStream, java.util.Properties options)` Create a new session (though do not connect it yet)
`I2PSession` `I2PClientImpl.createSession(java.io.InputStream destKeyStream, java.util.Properties options)` Create a new session (though do not connect it yet)
`I2PSession` `I2PClient.createSession(java.io.InputStream destKeyStream, java.util.Properties options)` Create a new client session for the Destination stored at the destKeyStream using the specified options to both connect to the router, to instruct the router how to handle the new session, and to configure the end to end encryption.

Methods in net.i2p.client with parameters of type I2PSession
`void` `I2PSessionListener.disconnected(I2PSession session)` Notify the client that the session has been terminated
`void` `ATalk.disconnected(I2PSession session)` required by `I2PSessionListener` to notify of disconnect
`void` `I2PSessionListener.errorOccurred(I2PSession session, java.lang.String message, java.lang.Throwable error)` Notify the client that some error occurred
`void` `ATalk.errorOccurred(I2PSession session, java.lang.String message, java.lang.Throwable error)` required by `I2PSessionListener` to notify of error
`void` `I2PSessionListener.messageAvailable(I2PSession session, int msgId, long size)` Instruct the client that the given session has received a message with size # of bytes.
`void` `ATalk.messageAvailable(I2PSession session, int msgId, long size)` I2PSessionListener.messageAvailable requires this method to be called whenever I2P wants to tell the session that a message is available.
`void` `I2PSessionListener.reportAbuse(I2PSession session, int severity)` Instruct the client that the session specified seems to be under attack and that the client may wish to move its destination to another router.
`void` `ATalk.reportAbuse(I2PSession session, int severity)` required by `I2PSessionListener` to notify of abuse

Uses of I2PSession in net.i2p.client.datagram

Constructors in net.i2p.client.datagram with parameters of type I2PSession
`I2PDatagramMaker(I2PSession session)` Construct a new I2PDatagramMaker that will be able to create I2P repliable datagrams going to be sent through the specified I2PSession.

Uses of I2PSession in net.i2p.client.streaming

Methods in net.i2p.client.streaming that return I2PSession
`I2PSession` `I2PSocketManagerFull.getSession()`
`I2PSession` `ConnectionManager.getSession()`
`I2PSession` `Connection.getSession()`
`I2PSession` `I2PSocketManagerImpl.getSession()`
`I2PSession` `I2PSocketManager.getSession()`

Methods in net.i2p.client.streaming with parameters of type I2PSession
`void` `MessageHandler.disconnected(I2PSession session)` Notify the client that the session has been terminated
`void` `I2PSocketManagerImpl.disconnected(I2PSession session)`
`void` `MessageHandler.errorOccurred(I2PSession session, java.lang.String message, java.lang.Throwable error)` Notify the client that some error occurred
`void` `I2PSocketManagerImpl.errorOccurred(I2PSession session, java.lang.String message, java.lang.Throwable error)`
`void` `I2PSocketManagerFull.init(I2PAppContext context, I2PSession session, java.util.Properties opts, java.lang.String name)`
`void` `I2PSocketManagerImpl.init(I2PAppContext context, I2PSession session, java.util.Properties opts, java.lang.String name)`
`void` `I2PSocketManager.init(I2PAppContext context, I2PSession session, java.util.Properties opts, java.lang.String name)`
`void` `MessageHandler.messageAvailable(I2PSession session, int msgId, long size)` Instruct the client that the given session has received a message with size # of bytes.
`void` `I2PSocketManagerImpl.messageAvailable(I2PSession session, int msgId, long size)`
`void` `MessageHandler.reportAbuse(I2PSession session, int severity)` Instruct the client that the session specified seems to be under attack and that the client may wish to move its destination to another router.
`void` `I2PSocketManagerImpl.reportAbuse(I2PSession session, int severity)`
`void` `I2PSocketManagerImpl.setSession(I2PSession session)`

Constructors in net.i2p.client.streaming with parameters of type I2PSession
`ConnectionManager(I2PAppContext context, I2PSession session, int maxConcurrent, ConnectionOptions defaultOptions)`
`I2PSocketManagerFull(I2PAppContext context, I2PSession session, java.util.Properties opts, java.lang.String name)`
`PacketQueue(I2PAppContext context, I2PSession session, ConnectionManager mgr)`

Uses of I2PSession in net.i2p.i2ptunnel

Methods in net.i2p.i2ptunnel with parameters of type I2PSession
`(package private) void` `TunnelControllerGroup.acquire(TunnelController controller, I2PSession session)` Note the fact that the controller is using the session so that it isn't destroyed prematurely.
`(package private) void` `I2PTunnel.addSession(I2PSession session)`
`void` `I2PTunnelTask.disconnected(I2PSession session)`
`void` `I2PTunnelTask.errorOccurred(I2PSession session, java.lang.String message, java.lang.Throwable error)`
`(package private) void` `TunnelControllerGroup.release(TunnelController controller, I2PSession session)` Note the fact that the controller is no longer using the session, and if no other controllers are using it, destroy the session.
`(package private) void` `I2PTunnel.removeSession(I2PSession session)`
`void` `I2PTunnelTask.reportAbuse(I2PSession session, int severity)`