## 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
`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
`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
`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}