net.i2p.i2ptunnel

## Class I2PTunnelHTTPClient

- java.lang.Object
- - 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

  Act as a mini HTTP proxy, handling various different types of requests, forwarding them through I2P appropriately, and displaying the reply. Supported request formats are:

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

  Note that http://i2p/$b64key/... and /eepproxy/$site/... are not recommended in browsers or other user-visible applications, as relative links will not resolve correctly, cookies won't work, etc. If the $site resolves with the I2P naming service, then it is directed towards that eepsite, otherwise it is directed towards this client's outproxy (typically "squid.i2p"). Only HTTP is supported (no HTTPS, ftp, mailto, etc). Both GET and POST have been tested, though other $methods should work.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `DEFAULT_JUMP_SERVERS`
    `static String` | `PROP_DISABLE_HELPER`
    `static String` | `PROP_JUMP_SERVERS`
    `static String` | `PROP_REFERER` all default to false
    `static String` | `PROP_USER_AGENT`
    `static String` | `PROP_VIA`

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

      `__clientId, __requestId, _errorDir, _proxyList, DEFAULT_READ_TIMEOUT, PROP_AUTH, PROP_OUTPROXY_AUTH, PROP_OUTPROXY_PW, PROP_OUTPROXY_PW_PREFIX, PROP_OUTPROXY_USER, PROP_OUTPROXY_USER_PREFIX, PROP_PW, PROP_PW_PREFIX, PROP_USER`

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

      `_clientId, _context, _executor, _log, _ownDest, DEFAULT_CONNECT_TIMEOUT, dest, l, mySockets, sockLock, sockMgr`

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

      `open`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `I2PTunnelHTTPClient(int localPort, Logging l, boolean ownDest, String wwwProxy, EventDispatcher notifyThis, I2PTunnel tunnel)`
    `I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected static String` | `_(String key)` lang in routerconsole.lang property, else current locale
    `protected static String` | `_(String key, Object o)` {0}
    `protected static String` | `_(String key, Object o, Object o2)` {0} and {1}
    `protected void` | `clientConnectionRun(Socket s)` Manage a connection in a separate thread.
    `boolean` | `close(boolean forced)` Overridden to close internal socket too.
    `protected I2PSocketOptions` | `getDefaultOptions()` create the default options (using the default timeout, etc) unused?
    `protected I2PSocketOptions` | `getDefaultOptions(Properties overrides)` create the default options (using the default timeout, etc)
    `void` | `startRunning()` Actually start working on incoming connections.

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

      `authorize, getPrefix, selectProxy`

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

      `buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, closeSocket, createI2PSocket, createI2PSocket, getListenHost, getLocalPort, getSocketManager, getSocketManager, getSocketManager, manageConnection, run, verifySocketManager`

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

      `attachEventDispatcher, detachEventDispatcher, disconnected, errorOccurred, getEventDispatcher, getEvents, getEventValue, getId, getTunnel, ignoreEvents, isOpen, notifyEvent, reportAbuse, routerDisconnected, setId, setName, setTunnel, toString, 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

    - #### PROP_REFERER

          public static final String PROP_REFERER

      all default to false
      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

    - #### PROP_JUMP_SERVERS

          public static final String PROP_JUMP_SERVERS

      See Also:
        Constant Field Values

    - #### PROP_DISABLE_HELPER

          public static final String PROP_DISABLE_HELPER

      See Also:
        Constant Field Values

    - #### DEFAULT_JUMP_SERVERS

          public static final String DEFAULT_JUMP_SERVERS

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### I2PTunnelHTTPClient

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

    - #### I2PTunnelHTTPClient

          public I2PTunnelHTTPClient(int localPort,
                             Logging l,
                             boolean ownDest,
                             String wwwProxy,
                             EventDispatcher notifyThis,
                             I2PTunnel tunnel)
                              throws IllegalArgumentException

      Throws:
        `IllegalArgumentException` - if the I2PTunnel does not contain valid config to contact the router

  - ### Method Detail

    - #### getDefaultOptions

          protected I2PSocketOptions getDefaultOptions()

      create the default options (using the default timeout, etc) unused?
      Overrides:
        `getDefaultOptions` in class `I2PTunnelClientBase`

    - #### getDefaultOptions

          protected I2PSocketOptions getDefaultOptions(Properties overrides)

      create the default options (using the default timeout, etc)
      Overrides:
        `getDefaultOptions` in class `I2PTunnelClientBase`

    - #### startRunning

          public void startRunning()

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

    - #### close

          public boolean close(boolean forced)

      Overridden to close internal socket too.
      Overrides:
        `close` in class `I2PTunnelClientBase`

    - #### 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()
      Specified by:
        `clientConnectionRun` in class `I2PTunnelClientBase`

    - #### _

          protected static String _(String key)

      lang in routerconsole.lang property, else current locale

    - #### _

          protected static String _(String key,
                 Object o)

      {0}

    - #### _

          protected static String _(String key,
                 Object o,
                 Object o2)

      {0} and {1}