net.i2p.router.client

## Class ClientListenerRunner

- java.lang.Object
- - net.i2p.router.client.ClientListenerRunner

- All Implemented Interfaces:
    Runnable
  Direct Known Subclasses:
    SSLClientListenerRunner

       class ClientListenerRunner
      extends 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.
  Author:
    jrandom

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `_bindAllInterfaces`
    `protected RouterContext` | `_context`
    `protected boolean` | `_listening`
    `protected Log` | `_log`
    `protected ClientManager` | `_manager`
    `protected int` | `_port`
    `protected boolean` | `_running`
    `protected ServerSocket` | `_socket`
    `static String` | `BIND_ALL_INTERFACES`
    `protected static int` | `CONNECT_TIMEOUT` give the i2cp client 5 seconds to show that they're really i2cp clients

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ClientListenerRunner(RouterContext context, ClientManager manager, int port)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected ServerSocket` | `getServerSocket()` Get a ServerSocket.
    `boolean` | `isListening()`
    `void` | `run()`
    `protected void` | `runConnection(Socket socket)` Handle the connection by passing it off to a `ClientConnectionRunner`
    `void` | `runServer()` Start up the socket listener, listens for connections, and fires those connections off via `runConnection`.
    `void` | `stopListening()`
    `protected boolean` | `validate(Socket socket)` Verify the first byte.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### _log

          protected final Log _log

    - #### _context

          protected final RouterContext _context

    - #### _manager

          protected final ClientManager _manager

    - #### _socket

          protected ServerSocket _socket

    - #### _port

          protected final int _port

    - #### _bindAllInterfaces

          protected final boolean _bindAllInterfaces

    - #### _running

          protected boolean _running

    - #### _listening

          protected boolean _listening

    - #### BIND_ALL_INTERFACES

          public static final String BIND_ALL_INTERFACES

      See Also:
        Constant Field Values

    - #### CONNECT_TIMEOUT

          protected static final int CONNECT_TIMEOUT

      give the i2cp client 5 seconds to show that they're really i2cp clients
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ClientListenerRunner

          public ClientListenerRunner(RouterContext context,
                              ClientManager manager,
                              int port)

  - ### Method Detail

    - #### isListening

          public boolean isListening()

    - #### getServerSocket

          protected ServerSocket getServerSocket()
                                          throws IOException

      Get a ServerSocket. Split out so it can be overridden for SSL.
      Throws:
        `IOException`
      Since:
        0.8.3

    - #### runServer

          public 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.

    - #### validate

          protected boolean validate(Socket socket)

      Verify the first byte. The InternalSocket doesn't support SoTimeout, so use available() instead to prevent hanging.

    - #### runConnection

          protected void runConnection(Socket socket)

      Handle the connection by passing it off to a `ClientConnectionRunner`

    - #### stopListening

          public void stopListening()

    - #### run

          public void run()

      Specified by:
        `run` in interface `Runnable`