java.lang.Object
net.i2p.router.client.ClientListenerRunner
All Implemented Interfaces:
Runnable
Direct Known Subclasses:
SSLClientListenerRunner

class ClientListenerRunnerextends Object implements Runnable
Listen for connections on the specified port, and toss them onto the client manager's set of connections once they are established.

This is not used for internal (in-JVM) connections - see ClientManager and QueuedClientConnectionRunner.

Note that this is extended by SSLClientListenerRunner for SSL, and by DomainClientListenerRunner in Android for domain sockets.

  • Field Details

    • _log

      protected final Log _log
      Logger for this class.
    • _context

      protected final RouterContext _context
      Router context.
    • _manager

      protected final ClientManager _manager
      Client manager.
    • _socket

      protected ServerSocket _socket
      Server socket for accepting connections.
    • _port

      protected final int _port
      Port to listen on.
    • _bindAllInterfaces

      protected final boolean _bindAllInterfaces
      Whether to bind on all interfaces.
    • _running

      protected volatile boolean _running
      Whether the runner is running.
    • _listening

      protected volatile boolean _listening
      Whether the socket is currently listening.
    • BIND_ALL_INTERFACES

      public static final String BIND_ALL_INTERFACES
      Property to control binding to all interfaces.
      See Also:
    • CONNECT_TIMEOUT

      protected static final int CONNECT_TIMEOUT
      Give the i2cp client 5 seconds to show that they're really i2cp clients.
      See Also:
  • Constructor Details

    • ClientListenerRunner

      public ClientListenerRunner(RouterContext context, ClientManager manager, int port)
      Create a new client listener runner for the given port.
      Parameters:
      context - the router context
      manager - the client manager
      port - the port number
  • Method Details

    • isListening

      public boolean isListening()
      Check if the listener is currently running and listening.
      Returns:
      true if the listener is currently running and listening
    • getServerSocket

      protected ServerSocket getServerSocket() throws IOException
      A ServerSocket for this listener. Split out so it can be overridden for SSL.
      Returns:
      the socket this listener is bound to
      Throws:
      IOException - if the socket cannot be created
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • runServer

      protected void runServer()
      Start up the socket listener, listens for connections, and fires those connections off via runConnection. This only returns if the socket cannot be opened or there is a catastrophic failure.
    • isAlive

      private boolean isAlive()
      Just so unit tests don't NPE, where the router could be null.
      Returns:
      true if the router is running, or absent entirely so unit tests do not NPE
    • validate

      protected boolean validate(Socket socket)
      Verify the first byte.
      Parameters:
      socket - the accepted connection to probe for the I2CP protocol byte
      Returns:
      true if the first byte is the I2CP protocol byte
    • runConnection

      protected void runConnection(Socket socket)
      Handle the connection by passing it off to a ClientConnectionRunner.
      Parameters:
      socket - the accepted socket connection
    • stopListening

      public void stopListening()
      Stop listening for connections.