From cc085755aa3fd79fb51ec8f1de8d46484df3a804 Mon Sep 17 00:00:00 2001 From: jrandom Date: Sat, 21 Aug 2004 22:39:27 +0000 Subject: [PATCH] oOo's patch to add support for temporary name<-->destination assignment (w00t!) to use this, make a link going to http://some.name.i2p/some/path/blah?i2paddresshelper=base64Destination e.g. http://whitehouse.gov.i2p/?i2paddresshelper=FpCkYW5pwVz36sSHoBuRT4ZvGif9QC9oQUWfz-wu4zEnJ1ewlAvinPuw3YnXUKmgLFZ0UY3wB7wqd0eQYiW2ZV1bwVhXvsyGV5ZehzxGaFu05IspCJjyaMIe90z5fyda4KgzyBwHKqwjGX57SMyn2cZhXbCKF6aNuipWxYOnL65uATDbw3jShEtL9v9299ohhGA3EcrYk3u86FgLmsOdi2GZruxy2RzioA-VKhaZl4RSJs6dFHPUYWgeLF3gT7Ciy-HbMZdDuiLTEX7mUlO0UZwnzT8mjUDeeYfyWtv9arwv-rAMeXxAVUYm7X2dDHN8TvmQCZ~LiQrnGmGReSIDKVT4u59xZX2Qg0GZf0fA5LRSW1zHLrlZWDJfNeESW57RlOkA9DDDOxwSVSw8LUQN-hPsoz~AgwA-vDklNWULqvp4lLifEJUlr5ZmnWrviLr6W6cHhdJBl89VzMThoknb5UibIvwTnu~tfA0rkyILXX07hdaoXF~prptuOhMtEcV2AAAA this is better than the existing http://i2p/base64Destination/ since images at that page will now resolve the name is resolved only if/when the hosts.txt doesn't have a matching entry (aka no spoofing duck.i2p), but the name is *not* persisted to hosts.txt - if you restart your tunnel (or router, if they're in the same JVM), the address helper is lost --- .../i2p/i2ptunnel/I2PTunnelHTTPClient.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index 445d92680..5d4a85b11 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.StringTokenizer; +import java.util.HashMap; import net.i2p.I2PAppContext; import net.i2p.I2PException; @@ -48,6 +49,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable private List proxyList; + private HashMap addressHelpers = new HashMap(); + private final static byte[] ERR_REQUEST_DENIED = ("HTTP/1.1 403 Access Denied\r\n"+ "Content-Type: text/html; charset=iso-8859-1\r\n"+ @@ -196,6 +199,34 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable if (host.toLowerCase().endsWith(".i2p")) { destination = host; host = getHostName(destination); + if (host == "i2p") { + int pos2; + if ((pos2 = line.indexOf("?")) != -1) { + // Try to find an address helper in the fragments + String fragments = line.substring(pos2 + 1); + pos2 = fragments.indexOf(" "); + fragments = fragments.substring(0, pos2); + fragments = fragments + "&"; + String fragment; + while(fragments.length() > 0) { + pos2 = fragments.indexOf("&"); + fragment = fragments.substring(0, pos2); + fragments = fragments.substring(pos2 + 1); + if (fragment.startsWith("i2paddresshelper")) { + pos2 = fragment.indexOf("="); + if (pos2 >= 0) { + addressHelpers.put(destination,fragment.substring(pos2 + 1)); + } + } + } + } + + String addressHelper = (String) addressHelpers.get(destination); + if (addressHelper != null) { + destination = addressHelper; + host = getHostName(destination); + } + } line = method + " " + request.substring(pos); } else if (host.indexOf(".") != -1) { // The request must be forwarded to a WWW proxy