public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implements Runnable
| Modifier and Type | Class and Description |
|---|---|
protected static class |
I2PTunnelHTTPClientBase.AuthResult
Authentication result status for HTTP client connections
|
protected class |
I2PTunnelHTTPClientBase.OnProxySuccess
Callback for successful proxy connections.
|
protected class |
I2PTunnelHTTPClientBase.OnTimeout
Callback for timeout events.
|
| Modifier and Type | Field and Description |
|---|---|
protected static AtomicLong |
__requestId |
protected List<String> |
_proxyList |
static String |
BASIC_AUTH |
protected static int |
BROWSER_READ_TIMEOUT
Failsafe
|
protected static int |
DEFAULT_READ_TIMEOUT
-1 (forever) as of 0.9.36,
so that large POSTs won't timeout on the read side
|
static 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.2
|
static 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=pw
|
static String |
PROP_PROXY_DIGEST_PREFIX
new style MD5 auth
|
static String |
PROP_PROXY_DIGEST_SHA256_SUFFIX |
static String |
PROP_PROXY_DIGEST_SUFFIX |
static String |
PROP_PW |
static String |
PROP_PW_PREFIX
additional users may be added with proxyPassword.user=pw
|
static String |
PROP_SSL_OUTPROXIES |
static String |
PROP_USE_OUTPROXY_PLUGIN |
static String |
PROP_USER |
protected static String |
SUCCESS_RESPONSE |
_clientId, _context, _log, _ownDest, DEFAULT_CONNECT_TIMEOUT, dest, l, listenerReady, mySockets, PROP_USE_SSL, sockLock, sockMgr, ssopen, tunnel| Constructor and 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).
|
| Modifier and Type | Method and Description |
|---|---|
protected String |
_t(String key)
Translate
|
protected 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 fails
|
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 |
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 String |
getPrefix(long requestId)
Generates a unique log prefix for request tracking.
|
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()
Checks if HTTP Digest authentication is required by the outproxy.
|
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)
Selects an appropriate outproxy for the given host from the proxy pool.
|
protected String |
selectSSLProxy(String host)
Selects an SSL-capable outproxy for HTTPS connections.
|
protected void |
writeErrorMessage(String errMessage,
OutputStream out,
String targetRequest,
boolean usingWWWProxy,
String wwwProxy)
No jump servers or extra message
|
protected void |
writeErrorMessage(String errMessage,
OutputStream out,
String targetRequest,
boolean usingWWWProxy,
String wwwProxy,
String jumpServers)
No extra message
|
protected void |
writeErrorMessage(String errMessage,
String extraMessage,
OutputStream out,
String targetRequest,
boolean usingWWWProxy,
String wwwProxy)
No jump servers
|
protected 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.
|
buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, clientConnectionRun, close, closeSocket, createI2PSocket, createI2PSocket, createI2PSocket, destroy, getDefaultOptions, getDefaultOptions, getListenHost, getLocalPort, getSocketManager, getSocketManager, getSocketManager, killSharedClient, manageConnection, run, startRunning, verifySocketManagerconnected, disconnected, errorOccurred, getBooleanOption, getId, getTunnel, isOpen, reportAbuse, routerDisconnected, setId, setName, setTunnel, toStringattachEventDispatcher, detachEventDispatcher, getEventDispatcher, getEvents, getEventValue, ignoreEvents, notifyEvent, unIgnoreEvents, waitEventValueprotected static final AtomicLong __requestId
public static final String BASIC_AUTH
protected static final int BROWSER_READ_TIMEOUT
protected static final int DEFAULT_READ_TIMEOUT
public static final String DIGEST_AUTH
protected static final String ERR_DESTINATION_UNKNOWN
protected static final String ERR_NO_OUTPROXY
protected static final int INITIAL_SO_TIMEOUT
public static final String PROP_AUTH
public static final String PROP_OUTPROXY_AUTH
public static final String PROP_OUTPROXY_PW
public static final String PROP_OUTPROXY_PW_PREFIX
public static final String PROP_OUTPROXY_USER
public static final String PROP_OUTPROXY_USER_PREFIX
public static final String PROP_PROXY_DIGEST_PREFIX
public static final String PROP_PROXY_DIGEST_SHA256_SUFFIX
public static final String PROP_PROXY_DIGEST_SUFFIX
public static final String PROP_PW
public static final String PROP_PW_PREFIX
public static final String PROP_SSL_OUTPROXIES
public static final String PROP_USE_OUTPROXY_PLUGIN
public static final String PROP_USER
protected static final String SUCCESS_RESPONSE
public I2PTunnelHTTPClientBase(int localPort,
boolean ownDest,
Logging l,
EventDispatcher notifyThis,
String handlerName,
I2PTunnel tunnel)
throws IllegalArgumentException
IllegalArgumentExceptionpublic I2PTunnelHTTPClientBase(int localPort,
Logging l,
I2PSocketManager sktMgr,
I2PTunnel tunnel,
EventDispatcher notifyThis,
long clientId)
throws IllegalArgumentException
sktMgr - the existing socket managerIllegalArgumentExceptionprotected I2PTunnelHTTPClientBase.AuthResult authorize(Socket s, long requestId, String method, String authorization)
method - GET, POST, etc.authorization - may be null, the full auth line e.g. "Basic lskjlksjf"public static String decodeIDNHost(String host)
protected String getAuthError(boolean isStale)
protected static String getErrorPage(I2PAppContext ctx, String base, String backup)
protected String getErrorPage(String base, String backup)
protected String getPrefix(long requestId)
This method creates a consistent prefix string that includes the request ID for correlating log entries across multiple threads and connections.
requestId - the unique identifier for this requestprotected abstract String getRealm()
protected void handleClientException(Exception ex, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy, long requestId)
ex - may be nullprotected void handleI2PSocketException(I2PSocketException ise, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy)
ise - may be nullprotected boolean isDigestAuthRequired()
This method checks the configured authentication requirements and determines whether the current request requires digest authentication.
protected void noteProxyResult(String proxy, String host, boolean isSSL, boolean ok)
proxy - whichhost - clearnet hostname targetedisSSL - set to FALSE for ConnectClientok - success or failurepublic void optionsUpdated(I2PTunnel tunnel)
optionsUpdated in class I2PTunnelClientBaseprotected String selectProxy(String host)
This method implements load balancing across multiple configured outproxies. It uses a simple round-robin or hash-based selection to distribute requests evenly across the available proxies. Failed proxies are remembered and temporarily skipped.
host - the target hostname to route through the outproxy (may be used for stickiness)_proxyListprotected String selectSSLProxy(String host)
This method is similar to selectProxy() but only considers outproxies configured for SSL support (via i2ptunnel.httpclient.SSLOutproxies).
Unlike selectProxy(), we parse the option on the fly so it can be changed without restart. ConnectClient should use selectProxy().
host - the target hostname (may be used for proxy stickiness)selectProxy(String)protected void writeErrorMessage(String errMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy) throws IOException
IOExceptionprotected void writeErrorMessage(String errMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy, String jumpServers) throws IOException
jumpServers - comma- or space-separated list, or nullIOExceptionprotected void writeErrorMessage(String errMessage, String extraMessage, OutputStream out, String targetRequest, boolean usingWWWProxy, String wwwProxy) throws IOException
extraMessage - extra message or null, will be HTML-escapedIOExceptionprotected void writeErrorMessage(String errMessage, String extraMessage, OutputStream outs, String targetRequest, boolean usingWWWProxy, String wwwProxy, String jumpServers) throws IOException
jumpServers - comma- or space-separated list, or nullextraMessage - extra message or null, will be HTML-escapedIOExceptionpublic static void writeFooter(OutputStream out) throws IOException
IOExceptionpublic static void writeFooter(Writer out) throws IOException
IOException