Interface I2PSocketManager

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()
      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 and different signing keys
      opts - subsession options if any, may be null
      Returns:
      a new subsession, non-null
      Throws:
      I2PSessionException
      Since:
      0.9.21
    • removeSubsession

      void removeSubsession(I2PSession session)
      Since:
      0.9.21
    • getSubsessions

      List<I2PSession> getSubsessions()
      Returns:
      a list of subsessions, non-null, does not include the primary session
      Since:
      0.9.21
    • 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()
    • 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.
    • 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.
    • buildOptions

      I2PSocketOptions buildOptions(Properties opts)
      Create a modified copy of the current options, to be used in a setDefaultOptions() call. As of 0.9.19, defaults in opts are honored.
      Parameters:
      opts - The new options, may be null
    • 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?
      Since:
      0.9.9
    • 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
    • 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
      Since:
      0.9.12
    • 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
      Since:
      0.9.18
    • getName

      String getName()
      For logging / diagnostics only
    • setName

      void setName(String name)
      For logging / diagnostics only
    • init

      void init(I2PAppContext context, I2PSession session, Properties opts, String name)
      Deprecated - Factory will initialize.
      Throws:
      UnsupportedOperationException - always
    • addDisconnectListener

      void addDisconnectListener(I2PSocketManager.DisconnectListener lsnr)
    • removeDisconnectListener

      void removeDisconnectListener(I2PSocketManager.DisconnectListener lsnr)
    • getStandardServerSocket

      ServerSocket getStandardServerSocket() throws IOException
      Like getServerSocket but returns a real ServerSocket for easier porting of apps.
      Throws:
      IOException
      Since:
      0.8.4
    • connectToSocket

      Socket connectToSocket(Destination peer) throws IOException
      Like connect() but returns a real Socket, and throws only IOE, for easier porting of apps.
      Throws:
      IOException
      Since:
      0.8.4
    • 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:
      timeout - ms if > 0, forces blocking (disables connectDelay)
      Throws:
      IOException
      Since:
      0.8.4