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
-
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
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 Details
-
PROP_USE_OUTPROXY_PLUGIN
- Since:
- 0.9.11, moved to Base in 0.9.29
- See Also:
- Constant Field Values
-
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_TIMEOUTThis 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_TIMEOUTFailsafe- Since:
- 0.9.42
- See Also:
- Constant Field Values
-
_proxyList
-
ERR_NO_OUTPROXY
- See Also:
- Constant Field Values
-
ERR_DESTINATION_UNKNOWN
- See Also:
- Constant Field Values
-
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
-
PROP_AUTH
all auth @since 0.8.2- See Also:
- Constant Field Values
-
PROP_USER
- See Also:
- Constant Field Values
-
PROP_PW
- See Also:
- Constant Field Values
-
PROP_PW_PREFIX
additional users may be added with proxyPassword.user=pw- See Also:
- Constant Field Values
-
PROP_OUTPROXY_AUTH
- See Also:
- Constant Field Values
-
PROP_OUTPROXY_USER
- See Also:
- Constant Field Values
-
PROP_OUTPROXY_PW
- See Also:
- Constant Field Values
-
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
- See Also:
- Constant Field Values
-
PROP_PROXY_DIGEST_PREFIX
new style MD5 auth- See Also:
- Constant Field Values
-
PROP_PROXY_DIGEST_SUFFIX
- See Also:
- Constant Field Values
-
BASIC_AUTH
- See Also:
- Constant Field Values
-
DIGEST_AUTH
- See Also:
- Constant Field Values
-
-
Constructor Details
-
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 IllegalArgumentExceptionThis 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 Details
-
getPrefix
-
selectProxy
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
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
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
-
optionsUpdated
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
What to send if digest auth fails- Since:
- 0.9.4
-
getErrorPage
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
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 IOExceptionNo 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 IOExceptionNo 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 IOExceptionNo 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
Decode a hostname for display. Returns original string on any error.- Since:
- 0.9.50
-
writeFooter
Flushes. Public only for LocalHTTPServer, not for general use- Throws:
IOException
- Since:
- 0.9.14 moved from I2PTunnelHTTPClient
-
writeFooter
Flushes. Public only for LocalHTTPServer, not for general use- Throws:
IOException
- Since:
- 0.9.19
-
_t
Translate- Since:
- 0.9.14 moved from I2PTunnelHTTPClient
-
_t
Translate {0}- Since:
- 0.9.14 moved from I2PTunnelHTTPClient
-
_t
Translate {0} and {1}- Since:
- 0.9.14 moved from I2PTunnelHTTPClient
-