Package net.i2p.i2ptunnel
Class I2PTunnelHTTPClientBase
- java.lang.Object
-
- net.i2p.util.EventDispatcherImpl
-
- net.i2p.i2ptunnel.I2PTunnelTask
-
- net.i2p.i2ptunnel.I2PTunnelClientBase
-
- net.i2p.i2ptunnel.I2PTunnelHTTPClientBase
-
- All Implemented Interfaces:
Runnable
,EventDispatcher
- Direct Known Subclasses:
I2PTunnelConnectClient
,I2PTunnelHTTPClient
public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implements Runnable
Common things for HTTPClient and ConnectClient Retrofit over them in 0.8.2- Since:
- 0.8.2
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
I2PTunnelHTTPClientBase.AuthResult
protected class
I2PTunnelHTTPClientBase.OnProxySuccess
protected class
I2PTunnelHTTPClientBase.OnTimeout
-
Field Summary
Fields Modifier and Type Field Description protected static AtomicLong
__requestId
protected List<String>
_proxyList
static String
BASIC_AUTH
protected static int
BROWSER_READ_TIMEOUT
Failsafeprotected static int
DEFAULT_READ_TIMEOUT
-1 (forever) as of 0.9.36, so that large POSTs won't timeout on the read sidestatic String
DIGEST_AUTH
protected static String
ERR_DESTINATION_UNKNOWN
protected static String
ERR_NO_OUTPROXY
protected static int
INITIAL_SO_TIMEOUT
This is a standard soTimeout, not a total timeout.static String
PROP_AUTH
all auth @since 0.8.2static String
PROP_OUTPROXY_AUTH
static String
PROP_OUTPROXY_PW
static String
PROP_OUTPROXY_PW_PREFIX
static String
PROP_OUTPROXY_USER
static String
PROP_OUTPROXY_USER_PREFIX
passwords for specific outproxies may be added with outproxyUsername.fooproxy.i2p=user and outproxyPassword.fooproxy.i2p=pwstatic String
PROP_PROXY_DIGEST_PREFIX
new style MD5 authstatic String
PROP_PROXY_DIGEST_SUFFIX
static String
PROP_PW
static String
PROP_PW_PREFIX
additional users may be added with proxyPassword.user=pwstatic String
PROP_SSL_OUTPROXIES
static String
PROP_USE_OUTPROXY_PLUGIN
static String
PROP_USER
protected static String
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 I2PTunnelHTTPClientBase(int localPort, boolean ownDest, Logging l, EventDispatcher notifyThis, String handlerName, I2PTunnel tunnel)
I2PTunnelHTTPClientBase(int localPort, Logging l, I2PSocketManager sktMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)
This constructor always starts the tunnel (ignoring the i2cp.delayOpen option).
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected String
_t(String key)
Translateprotected String
_t(String key, Object o)
Translate {0}protected String
_t(String key, Object o, Object o2)
Translate {0} and {1}protected I2PTunnelHTTPClientBase.AuthResult
authorize(Socket s, long requestId, String method, String authorization)
Authorization Ref: RFC 2617 If the socket is an InternalSocket, no auth required.static String
decodeIDNHost(String host)
Decode a hostname for display.protected String
getAuthError(boolean isStale)
What to send if digest auth failsprotected String
getErrorPage(String base, String backup)
foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, or the backup byte array on fail.protected static String
getErrorPage(I2PAppContext ctx, String base, String backup)
foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, or the backup byte array on fail.protected String
getPrefix(long requestId)
protected abstract String
getRealm()
protected void
handleClientException(Exception ex, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy, long requestId)
protected void
handleI2PSocketException(I2PSocketException ise, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy)
Generate an error page based on the status code in our custom exception.protected boolean
isDigestAuthRequired()
protected void
noteProxyResult(String proxy, String host, boolean isSSL, boolean ok)
Update the cache and note if failed.void
optionsUpdated(I2PTunnel tunnel)
Update the outproxy list then call super.protected String
selectProxy(String host)
Simple random selection, with caching by hostname, and avoidance of the last one to fail.protected String
selectSSLProxy(String host)
Only for SSL via HTTPClient.protected void
writeErrorMessage(String errMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy)
No jump servers or extra messageprotected void
writeErrorMessage(String errMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy, String jumpServers)
No extra messageprotected void
writeErrorMessage(String errMessage, String extraMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy)
No jump serversprotected void
writeErrorMessage(String errMessage, String extraMessage, OutputStream outs, String targetRequest, boolean usingWWWProxy, String wwwProxy, String jumpServers)
static void
writeFooter(OutputStream out)
Flushes.static void
writeFooter(Writer out)
Flushes.-
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
addSubsession, buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, clientConnectionRun, close, closeSocket, createI2PSocket, createI2PSocket, createI2PSocket, destroy, getDefaultOptions, getDefaultOptions, getListenHost, getLocalPort, getSocketManager, getSocketManager, getSocketManager, killSharedClient, manageConnection, run, startRunning, 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
-
PROP_USE_OUTPROXY_PLUGIN
public static final String PROP_USE_OUTPROXY_PLUGIN
- Since:
- 0.9.11, moved to Base in 0.9.29
- See Also:
- Constant Field Values
-
PROP_SSL_OUTPROXIES
public static final String PROP_SSL_OUTPROXIES
- Since:
- 0.9.11, moved to Base in 0.9.39
- See Also:
- Constant Field Values
-
INITIAL_SO_TIMEOUT
protected static final int INITIAL_SO_TIMEOUT
This is a standard soTimeout, not a total timeout. We have no slowloris protection on the client side. See I2PTunnelHTTPServer or SAM's ReadLine if we need that.- Since:
- 0.9.33
- See Also:
- Constant Field Values
-
BROWSER_READ_TIMEOUT
protected static final int BROWSER_READ_TIMEOUT
Failsafe- Since:
- 0.9.42
- See Also:
- Constant Field Values
-
ERR_NO_OUTPROXY
protected static final String ERR_NO_OUTPROXY
- See Also:
- Constant Field Values
-
ERR_DESTINATION_UNKNOWN
protected static final String ERR_DESTINATION_UNKNOWN
- See Also:
- Constant Field Values
-
SUCCESS_RESPONSE
protected static final String SUCCESS_RESPONSE
- See Also:
- Constant Field Values
-
DEFAULT_READ_TIMEOUT
protected static final int DEFAULT_READ_TIMEOUT
-1 (forever) as of 0.9.36, so that large POSTs won't timeout on the read side- See Also:
- Constant Field Values
-
__requestId
protected static final AtomicLong __requestId
-
PROP_AUTH
public static final String PROP_AUTH
all auth @since 0.8.2- See Also:
- Constant Field Values
-
PROP_USER
public static final String PROP_USER
- See Also:
- Constant Field Values
-
PROP_PW
public static final String PROP_PW
- See Also:
- Constant Field Values
-
PROP_PW_PREFIX
public static final String PROP_PW_PREFIX
additional users may be added with proxyPassword.user=pw- See Also:
- Constant Field Values
-
PROP_OUTPROXY_AUTH
public static final String PROP_OUTPROXY_AUTH
- See Also:
- Constant Field Values
-
PROP_OUTPROXY_USER
public static final String PROP_OUTPROXY_USER
- See Also:
- Constant Field Values
-
PROP_OUTPROXY_PW
public static final String PROP_OUTPROXY_PW
- See Also:
- Constant Field Values
-
PROP_OUTPROXY_USER_PREFIX
public static final String PROP_OUTPROXY_USER_PREFIX
passwords for specific outproxies may be added with outproxyUsername.fooproxy.i2p=user and outproxyPassword.fooproxy.i2p=pw- See Also:
- Constant Field Values
-
PROP_OUTPROXY_PW_PREFIX
public static final String PROP_OUTPROXY_PW_PREFIX
- See Also:
- Constant Field Values
-
PROP_PROXY_DIGEST_PREFIX
public static final String PROP_PROXY_DIGEST_PREFIX
new style MD5 auth- See Also:
- Constant Field Values
-
PROP_PROXY_DIGEST_SUFFIX
public static final String PROP_PROXY_DIGEST_SUFFIX
- See Also:
- Constant Field Values
-
BASIC_AUTH
public static final String BASIC_AUTH
- See Also:
- Constant Field Values
-
DIGEST_AUTH
public static final String DIGEST_AUTH
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
I2PTunnelHTTPClientBase
public I2PTunnelHTTPClientBase(int localPort, boolean ownDest, Logging l, EventDispatcher notifyThis, String handlerName, I2PTunnel tunnel) throws IllegalArgumentException
- Throws:
IllegalArgumentException
-
I2PTunnelHTTPClientBase
public I2PTunnelHTTPClientBase(int localPort, Logging l, I2PSocketManager sktMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId) throws IllegalArgumentException
This constructor always starts the tunnel (ignoring the i2cp.delayOpen option). It is used to add a client to an existing socket manager.- Parameters:
sktMgr
- the existing socket manager- Throws:
IllegalArgumentException
-
-
Method Detail
-
getPrefix
protected String getPrefix(long requestId)
-
selectProxy
protected String selectProxy(String host)
Simple random selection, with caching by hostname, and avoidance of the last one to fail.- Parameters:
host
- the clearnet hostname we're targeting- Returns:
- null if none configured
-
selectSSLProxy
protected String selectSSLProxy(String host)
Only for SSL via HTTPClient. ConnectClient should use selectProxy() Unlike selectProxy(), we parse the option on the fly so it can be changed. selectProxy() requires restart...- Returns:
- null if none configured
- Since:
- 0.9.11, moved from I2PTunnelHTTPClient in 0.9.39
-
noteProxyResult
protected void noteProxyResult(String proxy, String host, boolean isSSL, boolean ok)
Update the cache and note if failed.- Parameters:
proxy
- whichhost
- clearnet hostname targetedisSSL
- set to FALSE for ConnectClientok
- success or failure- Since:
- 0.9.39
-
getRealm
protected abstract String getRealm()
-
optionsUpdated
public void optionsUpdated(I2PTunnel tunnel)
Update the outproxy list then call super.- Overrides:
optionsUpdated
in classI2PTunnelClientBase
- Since:
- 0.9.12
-
isDigestAuthRequired
protected boolean isDigestAuthRequired()
- Since:
- 0.9.4
-
authorize
protected I2PTunnelHTTPClientBase.AuthResult authorize(Socket s, long requestId, String method, String authorization)
Authorization Ref: RFC 2617 If the socket is an InternalSocket, no auth required.- Parameters:
method
- GET, POST, etc.authorization
- may be null, the full auth line e.g. "Basic lskjlksjf"- Returns:
- success
-
getAuthError
protected String getAuthError(boolean isStale)
What to send if digest auth fails- Since:
- 0.9.4
-
getErrorPage
protected String getErrorPage(String base, String backup)
foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, or the backup byte array on fail. .ht files must be UTF-8 encoded and use \r\n terminators so the HTTP headers are conformant. We can't use FileUtil.readFile() because it strips \r- Returns:
- non-null
- Since:
- 0.9.4 moved from I2PTunnelHTTPClient
-
getErrorPage
protected static String getErrorPage(I2PAppContext ctx, String base, String backup)
foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, or the backup byte array on fail. .ht files must be UTF-8 encoded and use \r\n terminators so the HTTP headers are conformant. We can't use FileUtil.readFile() because it strips \r- Returns:
- non-null
- Since:
- 0.9.4 moved from I2PTunnelHTTPClient
-
handleClientException
protected void handleClientException(Exception ex, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy, long requestId)
- Parameters:
ex
- may be null- Since:
- 0.9.14 moved from subclasses
-
handleI2PSocketException
protected void handleI2PSocketException(I2PSocketException ise, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy)
Generate an error page based on the status code in our custom exception.- Parameters:
ise
- may be null- Since:
- 0.9.14
-
writeErrorMessage
protected void writeErrorMessage(String errMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy) throws IOException
No jump servers or extra message- Throws:
IOException
- Since:
- 0.9.14
-
writeErrorMessage
protected void writeErrorMessage(String errMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy, String jumpServers) throws IOException
No extra message- Parameters:
jumpServers
- comma- or space-separated list, or null- Throws:
IOException
- Since:
- 0.9.14 moved from subclasses
-
writeErrorMessage
protected void writeErrorMessage(String errMessage, String extraMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy) throws IOException
No jump servers- Parameters:
extraMessage
- extra message or null, will be HTML-escaped- Throws:
IOException
- Since:
- 0.9.14
-
writeErrorMessage
protected void writeErrorMessage(String errMessage, String extraMessage, OutputStream outs, String targetRequest, boolean usingWWWProxy, String wwwProxy, String jumpServers) throws IOException
- Parameters:
jumpServers
- comma- or space-separated list, or nullextraMessage
- extra message or null, will be HTML-escaped- Throws:
IOException
- Since:
- 0.9.14
-
decodeIDNHost
public static String decodeIDNHost(String host)
Decode a hostname for display. Returns original string on any error.- Since:
- 0.9.50
-
writeFooter
public static void writeFooter(OutputStream out) throws IOException
Flushes. Public only for LocalHTTPServer, not for general use- Throws:
IOException
- Since:
- 0.9.14 moved from I2PTunnelHTTPClient
-
writeFooter
public static void writeFooter(Writer out) throws IOException
Flushes. Public only for LocalHTTPServer, not for general use- Throws:
IOException
- Since:
- 0.9.19
-
_t
protected String _t(String key, Object o)
Translate {0}- Since:
- 0.9.14 moved from I2PTunnelHTTPClient
-
-