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 $protocolVersionCONNECT (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 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 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 StringAUTH_REALMstatic StringDEFAULT_JUMP_SERVERSstatic StringLOCAL_SERVERstatic StringPROP_ACCEPTstatic StringPROP_DISABLE_HELPERstatic StringPROP_INTERNAL_SSLstatic StringPROP_JUMP_SERVERSstatic StringPROP_REFERERall default to falsestatic StringPROP_SSL_SETstatic StringPROP_USER_AGENTstatic StringPROP_VIAFields 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_RESPONSEFields inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
_clientId, _context, _log, _ownDest, DEFAULT_CONNECT_TIMEOUT, dest, l, listenerReady, mySockets, PROP_USE_SSL, sockLock, sockMgr, ss -
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
Modifier and Type Method Description protected voidclientConnectionRun(Socket s)Note: This does not handle RFC 2616 header line splitting, which is obsoleted in RFC 7230.booleanclose(boolean forced)Overridden to close internal socket too.protected I2PSocketOptionsgetDefaultOptions()Create the default options (using the default timeout, etc).protected I2PSocketOptionsgetDefaultOptions(Properties overrides)Create the default options (using the default timeout, etc).protected StringgetRealm()voidstartRunning()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, writeFooterMethods 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, verifySocketManagerMethods inherited from class net.i2p.i2ptunnel.I2PTunnelTask
connected, disconnected, errorOccurred, getId, getTunnel, isOpen, reportAbuse, routerDisconnected, setId, setName, setTunnel, toStringMethods inherited from class net.i2p.util.EventDispatcherImpl
attachEventDispatcher, detachEventDispatcher, getEventDispatcher, getEvents, getEventValue, ignoreEvents, notifyEvent, unIgnoreEvents, waitEventValue
-
Field Details
-
AUTH_REALM
- See Also:
- Constant Field Values
-
LOCAL_SERVER
- See Also:
- Constant Field Values
-
PROP_REFERER
all default to false- See Also:
- Constant Field Values
-
PROP_USER_AGENT
- See Also:
- Constant Field Values
-
PROP_VIA
- See Also:
- Constant Field Values
-
PROP_JUMP_SERVERS
- See Also:
- Constant Field Values
-
PROP_DISABLE_HELPER
- See Also:
- Constant Field Values
-
PROP_ACCEPT
- Since:
- 0.9.14
- See Also:
- Constant Field Values
-
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
- Since:
- 0.9.35
- See Also:
- Constant Field Values
-
DEFAULT_JUMP_SERVERS
- See Also:
- Constant Field Values
-
-
Constructor Details
-
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 IllegalArgumentExceptionAs 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 Details
-
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:
getDefaultOptionsin classI2PTunnelClientBase
-
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. Do not use overrides for per-socket options.- Overrides:
getDefaultOptionsin classI2PTunnelClientBase
-
startRunning
public void startRunning()Actually start working on incoming connections. Overridden to start an internal socket too.- Overrides:
startRunningin classI2PTunnelClientBase
-
close
public boolean close(boolean forced)Overridden to close internal socket too.- Overrides:
closein classI2PTunnelClientBase- Returns:
- success
-
getRealm
- Specified by:
getRealmin classI2PTunnelHTTPClientBase- Since:
- 0.9.4
-
clientConnectionRun
Note: This does not handle RFC 2616 header line splitting, which is obsoleted in RFC 7230.- Specified by:
clientConnectionRunin classI2PTunnelClientBase
-