All Known Implementing Classes:
I2PSocketManagerFull

public interface I2PSocketManager
Centralize the coordination and multiplexing of the local client's streaming. There should be one I2PSocketManager for each I2PSession, and if an application is sending and receiving data through the streaming library using an I2PSocketManager, it should not attempt to call I2PSession's setSessionListener or receive any messages with its .receiveMessage.
  • Method Details

    • getSession

      I2PSession getSession()
      The I2P session associated with this manager.
      Returns:
      the session, non-null
    • addSubsession

      I2PSession addSubsession(InputStream privateKeyStream, Properties opts) throws I2PSessionException
      For a server, you must call connect() on the returned object. Connecting the primary session does NOT connect any subsessions. If the primary session is not connected, connecting a subsession will connect the primary session first.
      Parameters:
      privateKeyStream - null for transient, if non-null must have same encryption keys as primary session
      opts - subsession options if any, may be null
      Returns:
      a new subsession, non-null
      Throws:
      I2PSessionException - if the router does not support sub-sessions, if a sub-session request is already pending, or if the new session duplicates an existing one by private key
    • removeSubsession

      void removeSubsession(I2PSession session)
      Remove a subsession.
      Parameters:
      session - the subsession to remove
    • getSubsessions

      List<I2PSession> getSubsessions()
      All subsessions of the primary session.
      Returns:
      a list of subsessions, non-null, does not include the primary session
    • setAcceptTimeout

      void setAcceptTimeout(long ms)
      How long should we wait for the client to .accept() a socket before sending back a NACK/Close?
      Parameters:
      ms - milliseconds to wait, maximum
    • getAcceptTimeout

      long getAcceptTimeout()
      The current accept timeout.
      Returns:
      the accept timeout
    • setDefaultOptions

      void setDefaultOptions(I2PSocketOptions options)
      Update the options on a running socket manager. Parameters in the I2PSocketOptions interface may be changed directly with the setters; no need to use this method for those. This does NOT update the underlying I2CP or tunnel options; use getSession().updateOptions() for that.
      Parameters:
      options - as created from a call to buildOptions(properties), non-null
    • getDefaultOptions

      I2PSocketOptions getDefaultOptions()
      Current options, not a copy, setters may be used to make changes.
      Returns:
      the default options
    • getServerSocket

      I2PServerSocket getServerSocket()
      Returns non-null socket. This method does not throw exceptions, but methods on the returned socket may throw exceptions if the socket or socket manager is closed.
      Returns:
      non-null
    • buildOptions

      I2PSocketOptions buildOptions()
      Create a copy of the current options, to be used in a setDefaultOptions() call.
      Returns:
      a copy of the current options
    • buildOptions

      I2PSocketOptions buildOptions(Properties opts)
      Create a modified copy of the current options, to be used in a setDefaultOptions() call. Defaults in opts are honored: a property absent from opts keeps its current value rather than reverting to the default.
      Parameters:
      opts - The new options, may be null
      Returns:
      a modified copy of the current options
    • connect

      Create a new connected socket (block until the socket is created).
      Parameters:
      peer - Destination to connect to
      options - I2P socket options to be used for connecting
      Returns:
      new connected socket
      Throws:
      ConnectException - if the peer refuses the connection
      NoRouteToHostException - if the peer is not found or not reachable
      InterruptedIOException - if the connection timeouts
      I2PException - if there is some other I2P-related problem
    • connect

      Create a new connected socket (block until the socket is created).
      Parameters:
      peer - Destination to connect to
      Returns:
      new connected socket
      Throws:
      ConnectException - if the peer refuses the connection
      NoRouteToHostException - if the peer is not found or not reachable
      InterruptedIOException - if the connection timeouts
      I2PException - if there is some other I2P-related problem
    • destroySocketManager

      void destroySocketManager()
      Destroy the socket manager, freeing all the associated resources. This method will block untill all the managed sockets are closed. The socket manager CANNOT be reused after this.
    • isDestroyed

      boolean isDestroyed()
      Has the socket manager been destroyed?
      Returns:
      true if destroyed
    • listSockets

      Set<I2PSocket> listSockets()
      Retrieve a set of currently connected I2PSockets, either initiated locally or remotely.
      Returns:
      a set of currently connected I2PSockets
    • ping

      boolean ping(Destination peer, long timeoutMs)
      Ping the specified peer, returning true if they replied to the ping within the timeout specified, false otherwise. This call blocks. Uses the ports from the default options.
      Parameters:
      peer - Destination to ping
      timeoutMs - timeout in ms, greater than zero
      Returns:
      success or failure
      Throws:
      IllegalArgumentException - on bad args
    • ping

      boolean ping(Destination peer, int localPort, int remotePort, long timeoutMs)
      Ping the specified peer, returning true if they replied to the ping within the timeout specified, false otherwise. This call blocks. Uses the ports specified.
      Parameters:
      peer - Destination to ping
      localPort - 0 - 65535
      remotePort - 0 - 65535
      timeoutMs - timeout in ms, greater than zero
      Returns:
      success or failure
      Throws:
      IllegalArgumentException - on bad args
    • ping

      byte[] ping(Destination peer, int localPort, int remotePort, long timeoutMs, byte[] payload)
      Ping the specified peer, returning true if they replied to the ping within the timeout specified, false otherwise. This call blocks. Uses the ports specified.
      Parameters:
      peer - Destination to ping
      localPort - 0 - 65535
      remotePort - 0 - 65535
      timeoutMs - timeout in ms, greater than zero
      payload - to include in the ping
      Returns:
      the payload received in the pong, zero-length if none, null on failure or timeout
      Throws:
      IllegalArgumentException - on bad args
    • getName

      String getName()
      For logging / diagnostics only.
      Returns:
      the label reported for this manager in logs and console output, as set by setName()
    • setName

      void setName(String name)
      For logging / diagnostics only.
      Parameters:
      name - the label reported in logs and console output
    • addDisconnectListener

      void addDisconnectListener(I2PSocketManager.DisconnectListener lsnr)
      Register a listener to be notified when the I2P session disconnects.
      Parameters:
      lsnr - the listener to invoke on session disconnect
    • removeDisconnectListener

      void removeDisconnectListener(I2PSocketManager.DisconnectListener lsnr)
      Remove a disconnection listener.
      Parameters:
      lsnr - the listener previously passed to addDisconnectListener(I2PSocketManager.DisconnectListener)
    • getStandardServerSocket

      ServerSocket getStandardServerSocket() throws IOException
      Like getServerSocket but returns a real ServerSocket for easier porting of apps.
      Returns:
      a standard ServerSocket
      Throws:
      IOException - on I/O error
    • connectToSocket

      Socket connectToSocket(Destination peer) throws IOException
      Like connect() but returns a real Socket, and throws only IOE, for easier porting of apps.
      Parameters:
      peer - destination to connect to
      Returns:
      a connected Socket
      Throws:
      IOException - on I/O error
    • connectToSocket

      Socket connectToSocket(Destination peer, int timeout) throws IOException
      Like connect() but returns a real Socket, and throws only IOE, for easier porting of apps.
      Parameters:
      peer - destination to connect to
      timeout - ms if > 0, forces blocking (disables connectDelay)
      Returns:
      a connected Socket
      Throws:
      IOException - on I/O error