net.i2p.i2ptunnel

## Class I2PTunnelClient

- java.lang.Object
- - net.i2p.util.EventDispatcherImpl
  - - net.i2p.i2ptunnel.I2PTunnelTask
    - - net.i2p.i2ptunnel.I2PTunnelClientBase
      - - net.i2p.i2ptunnel.I2PTunnelClient

- All Implemented Interfaces:
    Runnable, EventDispatcher

      public class I2PTunnelClient
      extends I2PTunnelClientBase

  Standard I2P tunnel client for connecting to I2P destinations

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected long` | `readTimeout`

    - ### Fields inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase

      `_clientId, _context, _log, _ownDest, DEFAULT_CONNECT_TIMEOUT, dest, l, listenerReady, mySockets, PROP_USE_SSL, sockLock, sockMgr, ss`

    - ### Fields inherited from class net.i2p.i2ptunnel.I2PTunnelTask

      `open, tunnel`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `I2PTunnelClient(int localPort, String destinations, Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel, String pkf)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `clientConnectionRun(Socket s)` Manage a connection in a separate thread.
    `boolean` | `close(boolean forced)` Overridden to unregister with port mapper
    `long` | `getReadTimeout()` Get the read idle timeout for newly-created connections (in milliseconds).
    `void` | `optionsUpdated(I2PTunnel tunnel)` Update the dests then call super.
    `void` | `setReadTimeout(long ms)` Set the read idle timeout for newly-created connections (in milliseconds).
    `void` | `startRunning()` Actually start working on incoming connections.

    - ### Methods inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase

      `buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, closeSocket, createI2PSocket, createI2PSocket, createI2PSocket, destroy, getDefaultOptions, getDefaultOptions, getListenHost, getLocalPort, getSocketManager, getSocketManager, getSocketManager, killSharedClient, manageConnection, run, verifySocketManager`

    - ### Methods inherited from class net.i2p.i2ptunnel.I2PTunnelTask

      `connected, disconnected, errorOccurred, getBooleanOption, getId, getTunnel, isOpen, reportAbuse, routerDisconnected, setId, setName, setTunnel, toString`

    - ### Methods inherited from class net.i2p.util.EventDispatcherImpl

      `attachEventDispatcher, detachEventDispatcher, getEventDispatcher, getEvents, getEventValue, ignoreEvents, notifyEvent, unIgnoreEvents, waitEventValue`

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

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

- - ### Field Detail

    - #### readTimeout

          protected long readTimeout

  - ### Constructor Detail

    - #### I2PTunnelClient

          public I2PTunnelClient(int localPort,
                                 String destinations,
                                 Logging l,
                                 boolean ownDest,
                                 EventDispatcher notifyThis,
                                 I2PTunnel tunnel,
                                 String pkf)
                          throws IllegalArgumentException

      As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket. You MUST call startRunning() for that.
      Parameters:
        `destinations` - peers we target, comma- or space-separated. Since 0.9.9, each dest may be appended with :port
      Throws:
        `IllegalArgumentException` - if the I2PTunnel does not contain valid config to contact the router

  - ### Method Detail

    - #### clientConnectionRun

          protected void clientConnectionRun(Socket s)

      Description copied from class: `I2PTunnelClientBase`
      Manage a connection in a separate thread. This only works if you do not override manageConnection(). This is run in a thread from an unlimited-size thread pool, so it may block or run indefinitely.
      Specified by:
        `clientConnectionRun` in class `I2PTunnelClientBase`

    - #### close

          public boolean close(boolean forced)

      Overridden to unregister with port mapper
      Overrides:
        `close` in class `I2PTunnelClientBase`
      Returns:
        success

    - #### getReadTimeout

          public long getReadTimeout()

      Get the read idle timeout for newly-created connections (in milliseconds). Less than or equal to 0 means forever. Default -1 (forever) as of 0.9.36 for standard tunnels, but extending classes may override. Prior to that, default was 5 minutes, but did not work due to streaming bugs.
      Returns:
        in ms

    - #### optionsUpdated

          public void optionsUpdated(I2PTunnel tunnel)

      Update the dests then call super.
      Overrides:
        `optionsUpdated` in class `I2PTunnelClientBase`

    - #### setReadTimeout

          public void setReadTimeout(long ms)

      Set the read idle timeout for newly-created connections (in milliseconds). After this time expires without data being reached from the I2P network, the connection itself will be closed. Less than or equal to 0 means forever. Default -1 (forever) as of 0.9.36 for standard tunnels, but extending classes may override. Prior to that, default was 5 minutes, but did not work due to streaming bugs. Applies only to future connections; calling this does not affect existing connections.
      Parameters:
        `ms` - in ms

    - #### startRunning

          public void startRunning()

      Actually start working on incoming connections. Overridden to register with port mapper.
      Overrides:
        `startRunning` in class `I2PTunnelClientBase`