net.i2p.i2ptunnel
Class I2PTunnelHTTPClient

java.lang.Object
  extended by net.i2p.util.EventDispatcherImpl
      extended by net.i2p.i2ptunnel.I2PTunnelTask
          extended by net.i2p.i2ptunnel.I2PTunnelClientBase
              extended by net.i2p.i2ptunnel.I2PTunnelHTTPClientBase
                  extended by 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. Note that http://$b64key/... and http://$b64key.i2p/... are NOT supported, as a b64 key may contain '=' and '~', both of which are illegal host name characters. Rewrite as http://i2p/$b64key/... 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.


Nested Class Summary
 
Nested classes/interfaces inherited from class net.i2p.i2ptunnel.I2PTunnelHTTPClientBase
I2PTunnelHTTPClientBase.AuthResult
 
Field Summary
static String AUTH_REALM
           
static String DEFAULT_JUMP_SERVERS
           
static String LOCAL_SERVER
           
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, _proxyList, BASIC_AUTH, DEFAULT_READ_TIMEOUT, DIGEST_AUTH, ERR_NO_OUTPROXY, 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_SUFFIX, PROP_PW, PROP_PW_PREFIX, PROP_USER
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
_clientId, _context, _log, _ownDest, DEFAULT_CONNECT_TIMEOUT, dest, l, mySockets, sockLock, sockMgr, ss
 
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)
          This constructor always starts the tunnel (ignoring the i2cp.delayOpen option).
 
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).
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.
static void writeFooter(OutputStream out)
          Public only for LocalHTTPServer, not for general use
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelHTTPClientBase
authorize, getAuthError, getErrorPage, getErrorPage, getPrefix, isDigestAuthRequired, selectProxy
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, closeSocket, createI2PSocket, createI2PSocket, getClientExecutor, getListenHost, getLocalPort, getSocketManager, getSocketManager, getSocketManager, killClientExecutor, manageConnection, optionsUpdated, run, verifySocketManager
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelTask
connected, disconnected, errorOccurred, 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

LOCAL_SERVER

public static final String LOCAL_SERVER
See Also:
Constant Field Values

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

Parameters:
sockMgr - the existing socket manager

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). 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

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

getRealm

protected String getRealm()
Specified by:
getRealm in class I2PTunnelHTTPClientBase
Since:
0.9.4

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

writeFooter

public static void writeFooter(OutputStream out)
                        throws IOException
Public only for LocalHTTPServer, not for general use

Throws:
IOException

_

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}