net.i2p.i2ptunnel

## Class I2PTunnelConnectClient

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

- All Implemented Interfaces:
    Runnable, EventDispatcher

      public class I2PTunnelConnectClient
      extends I2PTunnelHTTPClientBase
      implements Runnable

  SSL tunnel through HTTP proxy using CONNECT method.

  Supports various host formats (example.i2p, .b32.i2p, base64, external domains) and CONNECT syntax variations. Protocol ignored for I2P destinations.

  Additional lines after CONNECT are stripped. CONNECT line removed for .i2p accesses, passed through for outproxy accesses.

  Reference: RFC draft-luotonen-ssl-tunneling-03.txt (1997) "Tunneling SSL Through a WWW Proxy"

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class net.i2p.i2ptunnel.I2PTunnelHTTPClientBase

      `I2PTunnelHTTPClientBase.AuthResult, I2PTunnelHTTPClientBase.OnProxySuccess, I2PTunnelHTTPClientBase.OnTimeout`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `AUTH_REALM`

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

      `__requestId, _proxyList, BASIC_AUTH, BROWSER_READ_TIMEOUT, DEFAULT_READ_TIMEOUT, DIGEST_AUTH, ERR_DESTINATION_UNKNOWN, ERR_NO_OUTPROXY, INITIAL_SO_TIMEOUT, PROP_AUTH, PROP_OUTPROXY_AUTH, PROP_OUTPROXY_PW, PROP_OUTPROXY_PW_PREFIX, PROP_OUTPROXY_USER, PROP_OUTPROXY_USER_PREFIX, PROP_PROXY_DIGEST_PREFIX, PROP_PROXY_DIGEST_SHA256_SUFFIX, PROP_PROXY_DIGEST_SUFFIX, PROP_PW, PROP_PW_PREFIX, PROP_SSL_OUTPROXIES, PROP_USE_OUTPROXY_PLUGIN, PROP_USER, SUCCESS_RESPONSE`

    - ### 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
    `I2PTunnelConnectClient(int localPort, Logging l, boolean ownDest, String wwwProxy, EventDispatcher notifyThis, I2PTunnel tunnel)` 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)` Closes the CONNECT proxy and unregisters from port mapper.
    `protected I2PSocketOptions` | `getDefaultOptions()` Create the default options (using the default timeout, etc).
    `protected String` | `getRealm()`
    `void` | `startRunning()` Starts the CONNECT proxy and registers with port mapper.

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

      `_t, _t, _t, authorize, decodeIDNHost, getAuthError, getErrorPage, getErrorPage, getPrefix, handleClientException, handleI2PSocketException, isDigestAuthRequired, noteProxyResult, optionsUpdated, selectProxy, selectSSLProxy, writeErrorMessage, writeErrorMessage, writeErrorMessage, writeErrorMessage, writeFooter, writeFooter`

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

      `buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, closeSocket, createI2PSocket, createI2PSocket, createI2PSocket, destroy, 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`

    - ### Methods inherited from interface java.lang.Runnable

      `run`

- - ### Field Detail

    - #### AUTH_REALM

          public static final String AUTH_REALM

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### I2PTunnelConnectClient

          public I2PTunnelConnectClient(int localPort,
                                        Logging l,
                                        boolean ownDest,
                                        String wwwProxy,
                                        EventDispatcher notifyThis,
                                        I2PTunnel tunnel)
                                 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.
      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)

      Closes the CONNECT proxy and unregisters from port mapper.
      Overrides:
        `close` in class `I2PTunnelClientBase`
      Returns:
        success

    - #### getDefaultOptions

          protected I2PSocketOptions getDefaultOptions()

      Create the default options (using the default timeout, etc). Warning, this does not make a copy of I2PTunnel's client options, it modifies them directly.
      Overrides:
        `getDefaultOptions` in class `I2PTunnelClientBase`

    - #### getRealm

          protected String getRealm()

      Specified by:
        `getRealm` in class `I2PTunnelHTTPClientBase`

    - #### startRunning

          public void startRunning()

      Starts the CONNECT proxy and registers with port mapper.
      Overrides:
        `startRunning` in class `I2PTunnelClientBase`