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 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
-
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 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 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:
getDefaultOptions
in 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:
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
- Specified by:
getRealm
in classI2PTunnelHTTPClientBase
- Since:
- 0.9.4
-
clientConnectionRun
Note: This does not handle RFC 2616 header line splitting, which is obsoleted in RFC 7230.- Specified by:
clientConnectionRun
in classI2PTunnelClientBase
-