## Uses of Class
net.i2p.client.I2PSessionException

- Packages that use I2PSessionException
  Package | Description
  --- | ---
  net.i2p.client | Interfaces and factories for the base I2P SDK used to develop applications that communicate through I2P.
  net.i2p.client.impl | Internal implementation of the I2P client SDK, providing the client side of the I2CP protocol for applications communicating through I2P.
  net.i2p.client.naming | Naming service for resolving human-readable names to I2P destinations, providing a standard interface without JNDI complexity.
  net.i2p.client.streaming | API, interfaces, and factory for a TCP-like (reliable, authenticated, in order) set of sockets for communicating over IP-like (unreliable, unauthenticated, unordered) I2P messages.
  net.i2p.client.streaming.impl | Implementation of a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages.
  net.i2p.data | These classes define the common data structures used by the various I2P protocols.
  net.i2p.internal | Internal communication interfaces for router and client within same JVM, using queues instead of socket-based I2CP.
  net.i2p.router | The I2P router application handles I2P network communication.
  net.i2p.router.client | Router-side implementation of the I2CP (I2P Client Protocol) interface for application integration.
  net.i2p.sam | The SAM (Simple Anonymous Messaging) client API.

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

    Methods in net.i2p.client that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `I2PSession` | I2PSession.`addSubsession(InputStream privateKeyStream, Properties opts)`
    `int[]` | I2PSession.`bandwidthLimits()` Get the current bandwidth limits.
    `void` | I2PSession.`connect()` Actually connect the session and start receiving/sending messages.
    `I2PSession` | I2PSimpleClient.`createSession(I2PAppContext context, Properties options)` Create a new session (though do not connect it yet)
    `I2PSession` | I2PClient.`createSession(InputStream destKeyStream, 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.
    `I2PSession` | I2PSimpleClient.`createSession(InputStream destKeyStream, Properties options)` Create a new session (though do not connect it yet)
    `void` | I2PSession.`destroySession()` Tear down the session and release any resources.
    `Destination` | I2PSession.`lookupDest(Hash h)` Lookup a Destination by Hash.
    `Destination` | I2PSession.`lookupDest(Hash h, long maxWait)` Lookup a Destination by Hash.
    `LookupResult` | I2PSession.`lookupDest(Hash h, long maxWait, LookupCallback callback)` Lookup a Destination by hostname.
    `Destination` | I2PSession.`lookupDest(String name)` Ask the router to lookup a Destination by host name.
    `Destination` | I2PSession.`lookupDest(String name, long maxWait)` Ask the router to lookup a Destination by host name.
    `LookupResult` | I2PSession.`lookupDest(String name, long maxWait, LookupCallback callback)` Lookup a Destination by hash.
    `LookupResult` | I2PSession.`lookupDest2(String name, long maxWait)` Ask the router to lookup a Destination by host name.
    `byte[]` | I2PSession.`receiveMessage(int msgId)` Receive a message that the router has notified the client about, returning the payload.
    `void` | I2PSession.`reportAbuse(int msgId, int severity)` Instruct the router that the message received was abusive (including how abusive on a 1-100 scale) in the hopes the router can do something to minimize receiving abusive messages like that in the future.
    `void` | I2PSession.`sendBlindingInfo(BlindData bd)`
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload)` Send a new message to the given destination, containing the specified payload, returning true if the router feels confident that the message was delivered.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size)` Send a new message to the given destination, containing the specified payload, returning true if the router feels confident that the message was delivered.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int proto, int fromport, int toport)` See I2PSessionMuxedImpl for proto/port details.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options)` See I2PSessionMuxedImpl for proto/port details.
    `long` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options, SendMessageStatusListener listener)` Send a message and request an asynchronous notification of delivery status.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent)` End-to-End Crypto is disabled, tags and keys are ignored.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, int proto, int fromPort, int toPort)` See I2PSessionMuxedImpl for proto/port details.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expire)` End-to-End Crypto is disabled, tags and keys are ignored.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expire, int proto, int fromPort, int toPort)` See I2PSessionMuxedImpl for proto/port details.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expire, int proto, int fromPort, int toPort, int flags)` See I2PSessionMuxedImpl for proto/port details.
    `boolean` | I2PSession.`sendMessage(Destination dest, byte[] payload, SessionKey keyUsed, Set<SessionTag> tagsSent)` End-to-End Crypto is disabled, tags and keys are ignored! Like sendMessage above, except the key used and the tags sent are exposed to the application.

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

    Methods in net.i2p.client.impl that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `void` | ClientWriterRunner.`addMessage(I2CPMessage msg)` Add this message to the writer's queue.
    `I2PSession` | I2PSessionImpl.`addSubsession(InputStream privateKeyStream, Properties opts)` Router must be connected or was connected...
    `I2PSession` | SubSession.`addSubsession(InputStream destKeyStream, Properties opts)` Unsupported in a subsession.
    `int[]` | I2PSessionImpl.`bandwidthLimits()` Blocking.
    `int[]` | SubSession.`bandwidthLimits()` This won't be called, as the reply does not contain a session ID, so it won't be routed back to us
    `void` | I2PSimpleSession.`connect()` Connect to the router and establish a session.
    `void` | I2PSessionImpl.`connect()` Connect to the router and establish a session.
    `void` | SubSession.`connect()` Connect to the router and establish a session.
    `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.
    `I2PSession` | I2PClientImpl.`createSession(I2PAppContext context, InputStream destKeyStream, Properties options)` Create a new session (though do not connect it yet)
    `I2PSession` | I2PClientImpl.`createSession(InputStream destKeyStream, Properties options)` Create a new session (though do not connect it yet)
    `void` | I2CPMessageProducer.`disconnect(I2PSessionImpl session)` Send a message to the router destroying the session, which could be a subsession.
    `Destination` | I2PSessionImpl.`lookupDest(Hash h)` Blocking.
    `Destination` | SubSession.`lookupDest(Hash h)` Blocking.
    `Destination` | I2PSessionImpl.`lookupDest(Hash h, long maxWait)` Blocking.
    `Destination` | SubSession.`lookupDest(Hash h, long maxWait)` Blocking.
    `LookupResult` | I2PSessionImpl.`lookupDest(Hash h, long maxWait, LookupCallback callback)` Lookup a Destination by hostname.
    `Destination` | I2PSessionImpl.`lookupDest(String name)` Ask the router to lookup a Destination by host name.
    `Destination` | SubSession.`lookupDest(String name)` Ask the router to lookup a Destination by host name.
    `Destination` | I2PSessionImpl.`lookupDest(String name, long maxWait)` Ask the router to lookup a Destination by host name.
    `Destination` | SubSession.`lookupDest(String name, long maxWait)` Ask the router to lookup a Destination by host name.
    `LookupResult` | I2PSessionImpl.`lookupDest(String name, long maxWait, LookupCallback callback)` Lookup a Destination by hash.
    `LookupResult` | I2PSessionImpl.`lookupDest2(String name, long maxWait)` Ask the router to lookup a Destination by host name.
    `byte[]` | I2PSessionImpl.`receiveMessage(int msgId)` Pull the unencrypted data from the message that we've already prefetched and notified the user that its available.
    `byte[]` | I2PSessionImpl2.`receiveMessage(int msgId)` pull the unencrypted AND DECOMPRESSED data
    `void` | I2CPMessageProducer.`reportAbuse(I2PSessionImpl session, int msgId, int severity)` Send an abuse message to the router
    `void` | I2PSessionImpl.`reportAbuse(int msgId, int severity)` Report abuse with regards to the given messageId
    `protected boolean` | I2PSessionImpl2.`sendBestEffort(Destination dest, byte[] payload, long expires, int flags)` TODO - Don't need to save MessageState since actuallyWait is false...
    `protected boolean` | I2PSessionImpl2.`sendBestEffort(Destination dest, byte[] payload, SessionKey keyUsed, Set<SessionTag> tagsSent, long expires)`
    `void` | I2PSessionImpl.`sendBlindingInfo(BlindData bd)`
    `(package private) void` | I2PSessionImpl.`sendMessage_unchecked(I2CPMessage message)` Deliver an I2CP message to the router.
    `(package private) void` | SubSession.`sendMessage_unchecked(I2CPMessage message)` Deliver an I2CP message to the router.
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload)` unused, see MuxedImpl override
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int proto, int fromport, int toport)`
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int proto, int fromport, int toport)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromport, int toport, SendMessageOptions options)`
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options)` See SendMessageOptions for option details.
    `long` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromport, int toport, SendMessageOptions options, SendMessageStatusListener listener)`
    `long` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options, SendMessageStatusListener listener)` Send a message and request an asynchronous notification of delivery status.
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, int proto, int fromport, int toport)`
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, int proto, int fromport, int toport)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expires)` Unused? see MuxedImpl override
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expires)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expire, int proto, int fromport, int toport)`
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expires, int proto, int fromPort, int toPort)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expire, int proto, int fromport, int toport, int flags)`
    `boolean` | I2PSessionMuxedImpl.`sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set<SessionTag> tagsSent, long expires, int proto, int fromPort, int toPort, int flags)`
    `boolean` | I2PSessionImpl2.`sendMessage(Destination dest, byte[] payload, SessionKey keyUsed, Set<SessionTag> tagsSent)`
    `(package private) void` | I2PSessionImpl.`sendMessage(I2CPMessage message)` Deliver an I2CP message to the router As of 0.9.3, may block for several seconds if the write queue to the router is full
    `(package private) void` | SubSession.`sendMessage(I2CPMessage message)` Deliver an I2CP message to the router May block for several seconds if the write queue to the router is full
    `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 boolean` | I2PSessionImpl2.`sendNoEffort(Destination dest, byte[] payload, long expires, int flags)` Same as sendBestEffort(), except we do not expect any MessageStatusMessage responses - not for accepted, or success, or failure.
    `void` | I2CPMessageProducer.`updateTunnels(I2PSessionImpl session, int tunnels)` Update number of tunnels
    `protected void` | I2PSessionImpl.`verifyOpen()` Throws I2PSessionException if uninitialized, closed or closing.

    Constructors in net.i2p.client.impl that throw I2PSessionException
    Constructor and Description
    `I2PSessionImpl(I2PAppContext context, InputStream destKeyStream, Properties options)` Create a new session, reading the Destination, PrivateKey, and SigningPrivateKey from the destKeyStream, and using the specified options to connect to the router As of 0.9.19, defaults in options are honored.
    `I2PSessionImpl(I2PSessionImpl primary, InputStream destKeyStream, Properties options)`
    `I2PSessionImpl2(I2PAppContext ctx, InputStream destKeyStream, Properties options)` for extension by I2PSessionMuxedImpl Create a new session, reading the Destination, PrivateKey, and SigningPrivateKey from the destKeyStream, and using the specified options to connect to the router
    `I2PSessionImpl2(I2PSessionImpl primary, InputStream destKeyStream, Properties options)`
    `I2PSessionMuxedImpl(I2PAppContext ctx, InputStream destKeyStream, Properties options)`
    `I2PSessionMuxedImpl(I2PSessionImpl primary, InputStream destKeyStream, Properties options)`
    `I2PSimpleSession(I2PAppContext context, Properties options)` Create a new session for doing naming and bandwidth queries only.
    `SubSession(I2PSession primary, InputStream destKeyStream, Properties options)`

  - ### Uses of I2PSessionException in net.i2p.client.naming

    Methods in net.i2p.client.naming that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `(package private) static Destination` | LookupDest.`lookupBase32Hash(I2PAppContext ctx, String key)`
    `(package private) static Destination` | LookupDest.`lookupHostname(I2PAppContext ctx, String hostname)` Any hostname, but this is for long-format b32

  - ### Uses of I2PSessionException in net.i2p.client.streaming

    Methods in net.i2p.client.streaming that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `I2PSession` | I2PSocketManager.`addSubsession(InputStream privateKeyStream, Properties opts)` For a server, you must call connect() on the returned object.
    `static I2PSocketManager` | I2PSocketManagerFactory.`createDisconnectedManager(InputStream myPrivateKeyStream, String i2cpHost, int i2cpPort, Properties opts)` Create a disconnected socket manager using the destination loaded from the given private key stream, or null for a transient destination.
    `static I2PSocketManager` | I2PSocketManagerFactory.`createDisconnectedManager(InputStream myPrivateKeyStream, String i2cpHost, int i2cpPort, Properties opts, IncomingConnectionFilter filter)` Create a disconnected socket manager using the destination loaded from the given private key stream, or null for a transient destination.

  - ### Uses of I2PSessionException in net.i2p.client.streaming.impl

    Methods in net.i2p.client.streaming.impl that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `I2PSession` | I2PSocketManagerFull.`addSubsession(InputStream privateKeyStream, Properties opts)` For a server, you must call connect() on the returned object.

  - ### Uses of I2PSessionException in net.i2p.data

    Methods in net.i2p.data that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `Destination` | PrivateKeyFile.`getDestination()` If the destination is not set, read it in from the file.
    `I2PSession` | PrivateKeyFile.`open()`
    `I2PSession` | PrivateKeyFile.`open(Properties opts)`

    Constructors in net.i2p.data that throw I2PSessionException
    Constructor and Description
    `PrivateKeyFile(InputStream in)` Can't be used for writing

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

    Methods in net.i2p.internal that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `I2CPMessageQueue` | InternalClientManager.`connect()` Connect to the router, receiving a message queue to talk to the router with.

  - ### Uses of I2PSessionException in net.i2p.router

    Methods in net.i2p.router that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `void` | ClientManagerFacade.`registerMetaDest(Destination dest)` Declare that we're going to publish a meta LS for this destination.

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

    Methods in net.i2p.router.client that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `I2CPMessageQueue` | ClientManagerFacadeImpl.`connect()` The InternalClientManager interface.
    `I2CPMessageQueue` | ClientManager.`internalConnect()` The InternalClientManager interface.
    `void` | ClientManager.`registerMetaDest(Destination dest)` Declare that we're going to publish a meta LS for this destination.
    `void` | ClientManagerFacadeImpl.`registerMetaDest(Destination dest)` Declare that we're going to publish a meta LS for this destination.

  - ### Uses of I2PSessionException in net.i2p.sam

    Methods in net.i2p.sam that throw I2PSessionException
    Modifier and Type | Method and Description
    --- | ---
    `abstract boolean` | SAMMessageSession.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort)` Send bytes through a SAM message-based session.
    `boolean` | SAMMessageSess.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort)` Send bytes through a SAM message-based session.
    `boolean` | SAMRawSession.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort)` Send bytes through a SAM RAW session.
    `boolean` | SAMDatagramSession.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort)` Send bytes through a SAM DATAGRAM session.
    `boolean` | SAMStreamSession.`sendBytes(String s, byte[] b, int pr, int fp, int tp)` Unsupported
    `boolean` | SAMMessageSess.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration)` Send bytes through a SAM message-based session.
    `boolean` | SAMRawSession.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration)` Send bytes through a SAM RAW session.
    `boolean` | SAMDatagramSession.`sendBytes(String dest, byte[] data, int proto, int fromPort, int toPort, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration)` Send bytes through a SAM DATAGRAM session.
    `boolean` | SAMStreamSession.`sendBytes(String s, byte[] b, int pr, int fp, int tp, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration)` Unsupported
    `protected boolean` | SAMMessageSession.`sendBytesThroughMessageSession(String dest, byte[] data, int proto, int fromPort, int toPort)` Actually send bytes through the SAM message-based session I2PSession (er...).
    `protected boolean` | SAMMessageSession.`sendBytesThroughMessageSession(String dest, byte[] data, int proto, int fromPort, int toPort, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration)` Actually send bytes through the SAM message-based session I2PSession, using per-message extended options.

    Constructors in net.i2p.sam that throw I2PSessionException
    Constructor and Description
    `SAMDatagramSession(I2PSession sess, Properties props, int listenPort, SAMDatagramReceiver recv)` Create a new SAM DATAGRAM session on an existing I2P session.
    `SAMDatagramSession(InputStream destStream, Properties props, SAMDatagramReceiver recv)` Create a new SAM DATAGRAM session.
    `SAMDatagramSession(String dest, Properties props, SAMDatagramReceiver recv)` Create a new SAM DATAGRAM session.
    `SAMMessageSession(I2PSession sess, int listenProtocol, int listenPort)` Initialize a new SAM message-based session using an existing I2PSession.
    `SAMMessageSession(InputStream destStream, Properties props)` Initialize a new SAM message-based session.
    `SAMMessageSession(String dest, Properties props)` Initialize a new SAM message-based session.
    `SAMRawSession(I2PSession sess, Properties props, int listenProtocol, int listenPort, SAMRawReceiver recv)` Create a new SAM RAW session on an existing I2P session.
    `SAMRawSession(InputStream destStream, Properties props, SAMRawReceiver recv)` Create a new SAM RAW session.
    `SAMRawSession(String dest, Properties props, SAMRawReceiver recv)` Create a new SAM RAW session.
    `SAMv3DatagramSession(String nick, Properties props, SAMv3Handler handler, I2PSession isess, int listenPort, SAMv3DatagramServer dgServer)` Build a Datagram Session on an existing i2p session registered with the given nickname Caller MUST call start().
    `SAMv3DatagramSession(String nick, SAMv3DatagramServer dgServer)` build a DatagramSession according to informations registered with the given nickname Caller MUST call start().
    `SAMv3RawSession(String nick, Properties props, SAMv3Handler handler, I2PSession isess, int listenProtocol, int listenPort, SAMv3DatagramServer dgServer)` Build a Raw Session on an existing i2p session registered with the given nickname Caller MUST call start().
    `SAMv3RawSession(String nick, SAMv3DatagramServer dgServer)` Build a Raw Datagram Session according to information registered with the given nickname Caller MUST call start().