net.i2p.i2ptunnel
Class I2PTunnelHTTPClient

java.lang.Object
  extended by net.i2p.i2ptunnel.I2PTunnelTask
      extended by net.i2p.i2ptunnel.I2PTunnelClientBase
          extended by net.i2p.i2ptunnel.I2PTunnelHTTPClient
All Implemented Interfaces:
java.lang.Runnable, EventDispatcher
Direct Known Subclasses:
I2PTunnelHTTPBidirProxy

public class I2PTunnelHTTPClient
extends I2PTunnelClientBase
implements java.lang.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 java.lang.String PROP_JUMP_SERVERS
           
static java.lang.String PROP_REFERER
           
static java.lang.String PROP_USER_AGENT
           
static java.lang.String PROP_VIA
           
protected  java.util.List proxyList
           
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
_clientId, _context, _ownDest, _waitingSockets, DEFAULT_CONNECT_TIMEOUT, dest, l, mySockets, PROP_MAX_WAIT_TIME, PROP_NUM_CONNECTION_BUILDERS, sockLock, sockMgr
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelTask
open
 
Constructor Summary
I2PTunnelHTTPClient(int localPort, Logging l, boolean ownDest, java.lang.String wwwProxy, EventDispatcher notifyThis, I2PTunnel tunnel)
           
I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)
           
 
Method Summary
static java.lang.String _(java.lang.String key)
          lang in routerconsole.lang property, else current locale
static java.lang.String _(java.lang.String key, java.lang.Object o, java.lang.Object o2)
          {0} and {1}
protected  void clientConnectionRun(java.net.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(java.util.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.I2PTunnelClientBase
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

proxyList

protected final java.util.List proxyList

PROP_REFERER

public static final java.lang.String PROP_REFERER
See Also:
Constant Field Values

PROP_USER_AGENT

public static final java.lang.String PROP_USER_AGENT
See Also:
Constant Field Values

PROP_VIA

public static final java.lang.String PROP_VIA
See Also:
Constant Field Values

PROP_JUMP_SERVERS

public static final java.lang.String PROP_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,
                           java.lang.String wwwProxy,
                           EventDispatcher notifyThis,
                           I2PTunnel tunnel)
                    throws java.lang.IllegalArgumentException
Throws:
java.lang.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(java.util.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(java.net.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

_

public static java.lang.String _(java.lang.String key)
lang in routerconsole.lang property, else current locale


_

public static java.lang.String _(java.lang.String key,
                                 java.lang.Object o,
                                 java.lang.Object o2)
{0} and {1}