diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
index df0d75019..42fb39549 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
@@ -261,6 +261,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
public static final String PROP_REFERER = "i2ptunnel.httpclient.sendReferer";
public static final String PROP_USER_AGENT = "i2ptunnel.httpclient.sendUserAgent";
public static final String PROP_VIA = "i2ptunnel.httpclient.sendVia";
+ public static final String PROP_JUMP_SERVERS = "i2ptunnel.httpclient.jumpServers";
private static long __requestId = 0;
protected void clientConnectionRun(Socket s) {
@@ -591,7 +592,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
if (_log.shouldLog(Log.WARN))
_log.warn("Unable to resolve " + destination + " (proxy? " + usingWWWProxy + ", request: " + targetRequest);
byte[] header;
- boolean showAddrHelper = false;
+ String jumpServers = null;
if (usingWWWProxy)
header = getErrorPage("dnfp", ERR_DESTINATION_UNKNOWN);
else if(ahelper != 0)
@@ -600,9 +601,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
header = getErrorPage("dnf", ERR_DESTINATION_UNKNOWN);
else {
header = getErrorPage("dnfh", ERR_DESTINATION_UNKNOWN);
- showAddrHelper = true;
+ jumpServers = getTunnel().getClientOptions().getProperty(PROP_JUMP_SERVERS);
+ if (jumpServers == null)
+ jumpServers = DEFAULT_JUMP_SERVERS;
}
- writeErrorMessage(header, out, targetRequest, usingWWWProxy, destination, showAddrHelper);
+ writeErrorMessage(header, out, targetRequest, usingWWWProxy, destination, jumpServers);
s.close();
return;
}
@@ -757,15 +760,16 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
}
}
- private static String jumpServers[] = {
- "http://i2host.i2p/cgi-bin/i2hostjump?",
- // "http://orion.i2p/jump/",
- "http://stats.i2p/cgi-bin/jump.cgi?a=",
- // "http://trevorreznik.i2p/cgi-bin/jump.php?hostname=",
- "http://i2jump.i2p/"
- };
+ private static String DEFAULT_JUMP_SERVERS =
+ "http://i2host.i2p/cgi-bin/i2hostjump?," +
+ "http://stats.i2p/cgi-bin/jump.cgi?a=," +
+ "http://i2jump.i2p/";
+
+ /**
+ * @param jumpServers comma- or space-separated list, or null
+ */
private static void writeErrorMessage(byte[] errMessage, OutputStream out, String targetRequest,
- boolean usingWWWProxy, String wwwProxy, boolean showAddrHelper) throws IOException {
+ boolean usingWWWProxy, String wwwProxy, String jumpServers) throws IOException {
if (out != null) {
out.write(errMessage);
if (targetRequest != null) {
@@ -781,12 +785,17 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
out.write(uri.getBytes());
out.write("".getBytes());
if (usingWWWProxy) out.write(("
WWW proxy: " + wwwProxy).getBytes());
- if (showAddrHelper) {
+ if (jumpServers != null && jumpServers.length() > 0) {
// Fixme untranslated
out.write("
Click a link below to look for an address helper by using a \"jump\" service:
".getBytes());
- for (int i = 0; i < jumpServers.length; i++) {
+
+ StringTokenizer tok = new StringTokenizer(jumpServers, ", ");
+ while (tok.hasMoreTokens()) {
+ String jurl = tok.nextToken();
+ if (!jurl.startsWith("http://"))
+ continue;
// Skip jump servers we don't know
- String jumphost = jumpServers[i].substring(7); // "http://"
+ String jumphost = jurl.substring(7); // "http://"
jumphost = jumphost.substring(0, jumphost.indexOf('/'));
try {
Destination dest = I2PTunnel.destFromName(jumphost);
@@ -796,10 +805,10 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
}
out.write("
".getBytes());
- out.write(jumpServers[i].getBytes());
+ out.write(jurl.getBytes());
out.write(uri.getBytes());
out.write("".getBytes());
}
@@ -823,7 +832,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
header = getErrorPage(I2PAppContext.getGlobalContext(), "dnfp", ERR_DESTINATION_UNKNOWN);
else
header = getErrorPage(I2PAppContext.getGlobalContext(), "dnf", ERR_DESTINATION_UNKNOWN);
- writeErrorMessage(header, out, targetRequest, usingWWWProxy, wwwProxy, false);
+ writeErrorMessage(header, out, targetRequest, usingWWWProxy, wwwProxy, null);
} catch (IOException ioe) {
// static
//_log.warn(getPrefix(requestId) + "Error writing out the 'destination was unknown' " + "message", ioe);