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 Detail

      • 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
      • 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
      • 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