net.i2p.i2ptunnel

## Class I2PTunnelHTTPClient

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

- All Implemented Interfaces:
    Runnable, EventDispatcher
  Direct Known Subclasses:
    I2PTunnelHTTPBidirProxy

      public class I2PTunnelHTTPClient
      extends I2PTunnelHTTPClientBase
      implements Runnable

  HTTP proxy that tunnels requests through I2P.

  Handles various request formats and forwards through I2P:

         $method http://$site[$port]/$path $protocolVersion
         $method $path $protocolVersion\nHost: $site
         $method http://i2p/$b64key/$path $protocolVersion
         $method /$site/$path $protocolVersion
         (deprecated) $method /eepproxy/$site/$path $protocolVersion

  CONNECT (HTTPS) supported since 0.9.11. Note: http://i2p/$b64key/... and /eepproxy/$site/... not recommended for browsers due to broken relative links and cookies. http://$b64key/... and http://$b64key.i2p/... unsupported (illegal characters). Rewrite as http://i2p/$b64key/...

  Directs I2P-resolved sites to destinations, others to outproxy (typically "squid.i2p"). Supports HTTP and HTTPS only. GET and POST tested; other methods should work.

- - ### 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`
    `(package private) static int` | `BROWSER_KEEPALIVE_TIMEOUT`
    `static String` | `DEFAULT_JUMP_SERVERS`
    `static String` | `LOCAL_SERVER`
    `static String` | `OPT_KEEPALIVE_BROWSER`
    `static String` | `OPT_KEEPALIVE_I2P`
    `static String` | `PROP_ACCEPT`
    `static String` | `PROP_DISABLE_HELPER`
    `static String` | `PROP_INTERNAL_SSL`
    `static String` | `PROP_JUMP_SERVERS`
    `static String` | `PROP_REFERER` all default to false
    `static String` | `PROP_SSL_SET`
    `static String` | `PROP_USER_AGENT`
    `static String` | `PROP_VIA`

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

      `__requestId, _proxyList, BASIC_AUTH, BROWSER_READ_TIMEOUT, DEFAULT_READ_TIMEOUT, DIGEST_AUTH, ERR_DESTINATION_UNKNOWN, 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
    `I2PTunnelHTTPClient(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.
    `I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)` This constructor always starts the tunnel (ignoring the i2cp.delayOpen option).

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `clientConnectionRun(Socket s)` Note: This does not handle RFC 2616 header line splitting, which is obsoleted in RFC 7230.
    `boolean` | `close(boolean forced)` Overridden to close internal socket too.
    `protected I2PSocketOptions` | `getDefaultOptions()` Create the default options (using the default timeout, etc).
    `protected I2PSocketOptions` | `getDefaultOptions(Properties overrides)` Create the default options (using the default timeout, etc).
    `protected String` | `getRealm()`
    `void` | `startRunning()` Actually start working on incoming connections.

    - ### 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, 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

    - #### BROWSER_KEEPALIVE_TIMEOUT

          static final int BROWSER_KEEPALIVE_TIMEOUT

      See Also:
        Constant Field Values

    - #### DEFAULT_JUMP_SERVERS

          public static final String DEFAULT_JUMP_SERVERS

      See Also:
        Constant Field Values

    - #### LOCAL_SERVER

          public static final String LOCAL_SERVER

      See Also:
        Constant Field Values

    - #### OPT_KEEPALIVE_BROWSER

          public static final String OPT_KEEPALIVE_BROWSER

      See Also:
        Constant Field Values

    - #### OPT_KEEPALIVE_I2P

          public static final String OPT_KEEPALIVE_I2P

      See Also:
        Constant Field Values

    - #### PROP_ACCEPT

          public static final String PROP_ACCEPT

      See Also:
        Constant Field Values

    - #### PROP_DISABLE_HELPER

          public static final String PROP_DISABLE_HELPER

      See Also:
        Constant Field Values

    - #### PROP_INTERNAL_SSL

          public static final String PROP_INTERNAL_SSL

      See Also:
        Constant Field Values

    - #### PROP_JUMP_SERVERS

          public static final String PROP_JUMP_SERVERS

      See Also:
        Constant Field Values

    - #### PROP_REFERER

          public static final String PROP_REFERER

      all default to false
      See Also:
        Constant Field Values

    - #### PROP_SSL_SET

          public static final String PROP_SSL_SET

      See Also:
        Constant Field Values

    - #### PROP_USER_AGENT

          public static final String PROP_USER_AGENT

      See Also:
        Constant Field Values

    - #### PROP_VIA

          public static final String PROP_VIA

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### I2PTunnelHTTPClient

          public I2PTunnelHTTPClient(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

    - #### I2PTunnelHTTPClient

          public I2PTunnelHTTPClient(int localPort,
                                     Logging l,
                                     I2PSocketManager sockMgr,
                                     I2PTunnel tunnel,
                                     EventDispatcher notifyThis,
                                     long clientId)

      This constructor always starts the tunnel (ignoring the i2cp.delayOpen option). It is used to add a client to an existing socket manager. 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:
        `sockMgr` - the existing socket manager

  - ### Method Detail

    - #### clientConnectionRun

          protected void clientConnectionRun(Socket s)

      Note: This does not handle RFC 2616 header line splitting, which is obsoleted in RFC 7230.
      Specified by:
        `clientConnectionRun` in class `I2PTunnelClientBase`

    - #### close

          public boolean close(boolean forced)

      Overridden to close internal socket too.
      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. unused?
      Overrides:
        `getDefaultOptions` in class `I2PTunnelClientBase`

    - #### getDefaultOptions

          protected I2PSocketOptions getDefaultOptions(Properties overrides)

      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. Do not use overrides for per-socket options.
      Overrides:
        `getDefaultOptions` in class `I2PTunnelClientBase`

    - #### getRealm

          protected String getRealm()

      Specified by:
        `getRealm` in class `I2PTunnelHTTPClientBase`

    - #### startRunning

          public void startRunning()

      Actually start working on incoming connections. Overridden to start an internal socket too.
      Overrides:
        `startRunning` in class `I2PTunnelClientBase`