Package 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
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
CONNECT (https) supported as of release 0.9.11. 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 hostname characters. Rewrite as http://i2p/$b64key/... If the $site resolves with the I2P naming service, then it is directed towards that I2P Site, otherwise it is directed towards this client's outproxy (typically "squid.i2p"). Only HTTP and HTTPS are supported (no 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, I2PTunnelHTTPClientBase.OnProxySuccess, I2PTunnelHTTPClientBase.OnTimeout
-
-
Field Summary
Fields Modifier and Type Field Description static String
AUTH_REALM
static String
DEFAULT_JUMP_SERVERS
static String
LOCAL_SERVER
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 falsestatic 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_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
-
-
Constructor Summary
Constructors Constructor 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 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
addSubsession, 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, 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
-
-
-
-
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
-
PROP_ACCEPT
public static final String PROP_ACCEPT
- Since:
- 0.9.14
- See Also:
- Constant Field Values
-
PROP_INTERNAL_SSL
public static final String PROP_INTERNAL_SSL
- Since:
- 0.9.14, overridden to true as of 0.9.35 unlesss PROP_SSL_SET is set
- See Also:
- Constant Field Values
-
PROP_SSL_SET
public static final String PROP_SSL_SET
- Since:
- 0.9.35
- 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. 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
-
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
-
-
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 classI2PTunnelClientBase
-
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 classI2PTunnelClientBase
-
startRunning
public void startRunning()
Actually start working on incoming connections. Overridden to start an internal socket too.- Overrides:
startRunning
in classI2PTunnelClientBase
-
close
public boolean close(boolean forced)
Overridden to close internal socket too.- Overrides:
close
in classI2PTunnelClientBase
- Returns:
- success
-
getRealm
protected String getRealm()
- Specified by:
getRealm
in classI2PTunnelHTTPClientBase
- Since:
- 0.9.4
-
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 classI2PTunnelClientBase
-
-