* IPV6/localhost:

- Enable IPv6 stack in the JVM, hopefully won't break anything
      - Patch Jetty to support binding to IPv6 addresses
      - Allow multiple bind addresses for the router console
        in the clients.config file; for new installs the
        default is now "127.0.0.1,::1"
      - Change most instances of "localhost" to "127.0.0.1"
        throughout the code
    * Router:
      - Move some classes to private static inner
This commit is contained in:
zzz
2009-04-08 01:34:12 +00:00
parent f5614c8a41
commit 0cfbe9c28b
24 changed files with 349 additions and 63 deletions

View File

@ -133,7 +133,7 @@ public class Daemon {
}
Map defaultSettings = new HashMap();
defaultSettings.put("proxy_host", "localhost");
defaultSettings.put("proxy_host", "127.0.0.1");
defaultSettings.put("proxy_port", "4444");
defaultSettings.put("master_addressbook", "../userhosts.txt");
defaultSettings.put("router_addressbook", "../hosts.txt");

View File

@ -135,13 +135,13 @@ public class SnarkManager implements Snark.CompleteListener {
}
// now add sane defaults
if (!_config.containsKey(PROP_I2CP_HOST))
_config.setProperty(PROP_I2CP_HOST, "localhost");
_config.setProperty(PROP_I2CP_HOST, "127.0.0.1");
if (!_config.containsKey(PROP_I2CP_PORT))
_config.setProperty(PROP_I2CP_PORT, "7654");
if (!_config.containsKey(PROP_I2CP_OPTS))
_config.setProperty(PROP_I2CP_OPTS, "inbound.length=2 inbound.lengthVariance=0 outbound.length=2 outbound.lengthVariance=0 inbound.quantity=3 outbound.quantity=3");
if (!_config.containsKey(PROP_EEP_HOST))
_config.setProperty(PROP_EEP_HOST, "localhost");
_config.setProperty(PROP_EEP_HOST, "127.0.0.1");
if (!_config.containsKey(PROP_EEP_PORT))
_config.setProperty(PROP_EEP_PORT, "4444");
if (!_config.containsKey(PROP_UPLOADERS_TOTAL))

View File

@ -206,7 +206,7 @@ public class EditBean extends IndexBean {
if (tun != null)
return tun.getI2CPHost();
else
return "localhost";
return "127.0.0.1";
}
public String getI2CPPort(int tunnel) {

View File

@ -0,0 +1,253 @@
// ========================================================================
// $Id: InetAddrPort.java,v 1.7 2004/10/23 09:03:22 gregwilkins Exp $
// Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.mortbay.util;
import java.io.Serializable;
import java.net.InetAddress;
/* ======================================================================== */
/** InetAddress and Port.
*/
public class InetAddrPort implements Serializable
{
/* ------------------------------------------------------------ */
public final static String __0_0_0_0 = "0.0.0.0";
/* ------------------------------------------------------------ */
private InetAddress _addr=null;
private boolean _addrIsHost=false;
private int _port=0;
/* ------------------------------------------------------------------- */
public InetAddrPort()
{}
/* ------------------------------------------------------------ */
/** Constructor for a port on all local host address.
* @param port
*/
public InetAddrPort(int port)
{
_port=port;
}
/* ------------------------------------------------------------ */
/** Constructor.
* @param addr
* @param port
*/
public InetAddrPort(InetAddress addr, int port)
{
_addr=addr;
_port=port;
}
/* ------------------------------------------------------------ */
/** Constructor.
* @param host
* @param port
*/
public InetAddrPort(String host, int port)
throws java.net.UnknownHostException
{
setHost(host);
setPort(port);
}
/* ------------------------------------------------------------ */
/** Constructor.
* Patched to support [::1]:port for I2P
*
* @param inetAddrPort String of the form "addr:port"
*/
public InetAddrPort(String inetAddrPort)
throws java.net.UnknownHostException
{
int b = inetAddrPort.indexOf('[');
if (b>0)
throw new java.net.UnknownHostException("Bad [] syntax");
if (b==0) // IPV6
{
int b2 = inetAddrPort.indexOf(']');
if (b2<2)
throw new java.net.UnknownHostException("Bad [] syntax");
String addr=inetAddrPort.substring(1,b2);
if (addr.indexOf('/')>0)
addr=addr.substring(addr.indexOf('/')+1);
inetAddrPort=inetAddrPort.substring(b2+1);
int c = inetAddrPort.indexOf(':');
if (c>0)
throw new java.net.UnknownHostException("Bad [] syntax");
if (c==0)
inetAddrPort=inetAddrPort.substring(1);
if (addr.length()>0 && ! __0_0_0_0.equals(addr))
{
_addrIsHost=!Character.isDigit((addr.charAt(0)));
this._addr=InetAddress.getByName(addr);
}
} else { // IPV4
int c = inetAddrPort.indexOf(':');
if (c>=0)
{
String addr=inetAddrPort.substring(0,c);
if (addr.indexOf('/')>0)
addr=addr.substring(addr.indexOf('/')+1);
inetAddrPort=inetAddrPort.substring(c+1);
if (addr.length()>0 && ! __0_0_0_0.equals(addr))
{
_addrIsHost=!Character.isDigit((addr.charAt(0)));
this._addr=InetAddress.getByName(addr);
}
}
}
_port = Integer.parseInt(inetAddrPort);
}
/* ------------------------------------------------------------ */
/** Constructor.
* @param address InetAddrPort top copy.
*/
public InetAddrPort(InetAddrPort address)
{
if (address!=null)
{
_addr=address._addr;
_port=address._port;
}
}
/* ------------------------------------------------------------ */
/** Get the Host.
* @return The IP address
*/
public String getHost()
{
if (_addr==null)
return __0_0_0_0;
return _addrIsHost?_addr.getHostName():_addr.getHostAddress();
}
/* ------------------------------------------------------------ */
/** Set the Host.
* @param host
* @exception java.net.UnknownHostException
*/
public void setHost(String host)
throws java.net.UnknownHostException
{
_addr=null;
if (host!=null)
{
if (host.indexOf('/')>0)
host=host.substring(0,host.indexOf('/'));
_addrIsHost=!Character.isDigit((host.charAt(0)));
_addr=InetAddress.getByName(host);
}
}
/* ------------------------------------------------------------ */
/** Get the IP address.
* @return The IP address
*/
public InetAddress getInetAddress()
{
return _addr;
}
/* ------------------------------------------------------------ */
/** Set the IP address.
* @param addr The IP address
*/
public void setInetAddress(InetAddress addr)
{
_addrIsHost=false;
_addr=addr;
}
/* ------------------------------------------------------------ */
/** Get the port.
* @return The port number
*/
public int getPort()
{
return _port;
}
/* ------------------------------------------------------------ */
/** Set the port.
* @param port The port number
*/
public void setPort(int port)
{
_port=port;
}
/* ------------------------------------------------------------------- */
public String toString()
{
return getHost()+':'+_port;
}
/* ------------------------------------------------------------ */
/** Clone the InetAddrPort.
* @return A new instance.
*/
public Object clone()
{
return new InetAddrPort(this);
}
/* ------------------------------------------------------------ */
/** Hash Code.
* @return hash Code.
*/
public int hashCode()
{
return _port+((_addr==null)?0:_addr.hashCode());
}
/* ------------------------------------------------------------ */
/** Equals.
* @param o
* @return True if is the same address and port.
*/
public boolean equals(Object o)
{
if (o==null)
return false;
if (o==this)
return true;
if (o instanceof InetAddrPort)
{
InetAddrPort addr=(InetAddrPort)o;
return addr._port==_port &&
( addr._addr==_addr ||
addr._addr!=null && addr._addr.equals(_addr));
}
return false;
}
}

View File

@ -196,7 +196,7 @@ public class I2PSocketManagerFactory {
}
private static String getHost() {
return System.getProperty(I2PClient.PROP_TCP_HOST, "localhost");
return System.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
}
private static int getPort() {
int i2cpPort = 7654;

View File

@ -155,7 +155,7 @@ public class ConfigServiceHandler extends FormHandler {
}
// releases <= 0.6.5 deleted the entry completely
if (shouldLaunchBrowser && !found) {
ClientAppConfig ca = new ClientAppConfig(UrlLauncher.class.getName(), "consoleBrowser", "http://localhost:7657", 5, false);
ClientAppConfig ca = new ClientAppConfig(UrlLauncher.class.getName(), "consoleBrowser", "http://127.0.0.1:7657", 5, false);
clients.add(ca);
}
ClientAppConfig.writeClientAppConfig(_context, clients);

View File

@ -27,7 +27,7 @@ public class ConfigUpdateHandler extends FormHandler {
public static final String PROP_SHOULD_PROXY = "router.updateThroughProxy";
public static final String DEFAULT_SHOULD_PROXY = Boolean.TRUE.toString();
public static final String PROP_PROXY_HOST = "router.updateProxyHost";
public static final String DEFAULT_PROXY_HOST = "localhost";
public static final String DEFAULT_PROXY_HOST = "127.0.0.1";
public static final String PROP_PROXY_PORT = "router.updateProxyPort";
public static final String DEFAULT_PROXY_PORT = "4444";

View File

@ -5,6 +5,7 @@ import java.io.FilenameFilter;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
import net.i2p.I2PAppContext;
import net.i2p.apps.systray.SysTray;
@ -36,6 +37,14 @@ public class RouterConsoleRunner {
System.setProperty("java.awt.headless", "true");
}
/**
* @param args second arg may be a comma-separated list of bind addresses,
* for example ::1,127.0.0.1
* On XP, the other order (127.0.0.1,::1) fails the IPV6 bind,
* because 127.0.0.1 will bind ::1 also. But even though it's bound
* to both, we can't connect to [::1]:7657 for some reason.
* So the wise choice is ::1,127.0.0.1
*/
public RouterConsoleRunner(String args[]) {
if (args.length == 3) {
_listenPort = args[0].trim();
@ -66,7 +75,24 @@ public class RouterConsoleRunner {
rewrite = true;
}
try {
_server.addListener(_listenHost + ':' + _listenPort);
StringTokenizer tok = new StringTokenizer(_listenHost, " ,");
int boundAddresses = 0;
while (tok.hasMoreTokens()) {
String host = tok.nextToken().trim();
try {
if (host.indexOf(":") >= 0) // IPV6 - requires patched Jetty 5
_server.addListener('[' + host + "]:" + _listenPort);
else
_server.addListener(host + ':' + _listenPort);
boundAddresses++;
} catch (IOException ioe) { // this doesn't seem to work, exceptions don't happen until start() below
System.err.println("Unable to bind routerconsole to " + host + " port " + _listenPort + ' ' + ioe);
}
}
if (boundAddresses <= 0) {
System.err.println("Unable to bind routerconsole to any address on port " + _listenPort);
return;
}
_server.setRootWebApp(ROUTERCONSOLE);
WebApplicationContext wac = _server.addWebApplication("/", _webAppsDir + ROUTERCONSOLE + ".war");
initialize(wac);
@ -100,7 +126,12 @@ public class RouterConsoleRunner {
try {
_server.start();
} catch (Exception me) {
me.printStackTrace();
System.err.println("WARNING: Error starting one or more listeners of the Router Console server.\n" +
"If your console is still accessible at http://127.0.0.1:7657/,\n" +
"this may be a problem only with binding to the IPV6 address ::1.\n" +
"If so, you may ignore this error, or remove the\n" +
"\"::1,\" in the \"clientApp.0.args\" line of the clients.config file.\n" +
"Exception: " + me);
}
try {
SysTray tray = SysTray.getInstance();

View File

@ -71,7 +71,7 @@
<h4>Launch browser on router startup?</h4>
<p>I2P's main configuration interface is this web console, so for your convenience
I2P can launch a web browser pointing at
<a href="http://localhost:7657/index.jsp">http://localhost:7657/index.jsp</a> whenever
<a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> whenever
the router starts up.</p>
<input type="submit" name="action" value="View console on startup" />
<input type="submit" name="action" value="Do not view console on startup" />

View File

@ -25,7 +25,7 @@
<a href="susidns/index.jsp">SusiDNS</a> |
<!-- <a href="syndie/">Syndie</a> | -->
<a href="i2psnark/">I2PSnark</a> |
<a href="http://localhost:7658/">My Eepsite</a> <br>
<a href="http://127.0.0.1:7658/">My Eepsite</a> <br>
<a href="i2ptunnel/index.jsp">I2PTunnel</a> |
<a href="tunnels.jsp">Tunnels</a> |
<a href="profiles.jsp">Profiles</a> |

View File

@ -76,7 +76,7 @@ public class WebMail extends HttpServlet
private static final int BUFSIZE = 4096;
private static final String DEFAULT_HOST = "localhost";
private static final String DEFAULT_HOST = "127.0.0.1";
private static final int DEFAULT_POP3PORT = 7660;
private static final int DEFAULT_SMTPPORT = 7659;

View File

@ -132,7 +132,7 @@ public class SysTray implements SysTrayMenuListener {
public void iconLeftClicked(SysTrayMenuEvent e) {}
public void iconLeftDoubleClicked(SysTrayMenuEvent e) {
openRouterConsole("http://localhost:" + _portString + "/index.jsp");
openRouterConsole("http://127.0.0.1:" + _portString + "/index.jsp");
}
public void menuItemSelected(SysTrayMenuEvent e) {
@ -153,7 +153,7 @@ public class SysTray implements SysTrayMenuListener {
if (!(browser = promptForBrowser("Select browser")).equals("nullnull"))
setBrowser(browser);
} else if (e.getActionCommand().equals("openconsole")) {
openRouterConsole("http://localhost:" + _portString + "/index.jsp");
openRouterConsole("http://127.0.0.1:" + _portString + "/index.jsp");
}
}

View File

@ -163,7 +163,7 @@ public class UrlLauncher {
if (args.length > 0)
launcher.openUrl(args[0]);
else
launcher.openUrl("http://localhost:7657/index.jsp");
launcher.openUrl("http://127.0.0.1:7657/index.jsp");
} catch (Exception e) {}
}
}

View File

@ -162,7 +162,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
protected void loadConfig(Properties options) {
_options = new Properties();
_options.putAll(filter(options));
_hostname = _options.getProperty(I2PClient.PROP_TCP_HOST, "localhost");
_hostname = _options.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
String portNum = _options.getProperty(I2PClient.PROP_TCP_PORT, LISTEN_PORT + "");
try {
_portNum = Integer.parseInt(portNum);

View File

@ -18,7 +18,7 @@ import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
/**
* EepGet [-p localhost:4444]
* EepGet [-p 127.0.0.1:4444]
* [-n #retries]
* [-o outputFile]
* [-m markSize lineLen]
@ -123,11 +123,11 @@ public class EepGet {
}
/**
* EepGet [-p localhost:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url
* EepGet [-p 127.0.0.1:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url
*
*/
public static void main(String args[]) {
String proxyHost = "localhost";
String proxyHost = "127.0.0.1";
int proxyPort = 4444;
int numRetries = 5;
int markSize = 1024;
@ -212,7 +212,7 @@ public class EepGet {
}
private static void usage() {
System.err.println("EepGet [-p localhost:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] [-t timeout] url");
System.err.println("EepGet [-p 127.0.0.1:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] [-t timeout] url");
}
public static interface StatusListener {

View File

@ -6,7 +6,7 @@ Proxy-Connection: close
<html><head>
<title>Destination key conflict</title>
<link rel="shortcut icon" href="http://localhost:7657/favicon.ico" />
<link rel="shortcut icon" href="http://127.0.0.1:7657/favicon.ico" />
<style type='text/css'>
div.warning {
margin: 0em 1em 1em 224px;
@ -32,8 +32,8 @@ div.logo {
</head>
<body>
<div class=logo>
<a href="http://localhost:7657/index.jsp" title="Router Console"><img src="http://localhost:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://localhost:7657/config.jsp">configuration</a> | <a href="http://localhost:7657/help.jsp">help</a>]
<a href="http://127.0.0.1:7657/index.jsp" title="Router Console"><img src="http://127.0.0.1:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://127.0.0.1:7657/config.jsp">configuration</a> | <a href="http://127.0.0.1:7657/help.jsp">help</a>]
</div>
<div class=warning id=warning>
The addresshelper link you followed specifies a different destination key

View File

@ -1,5 +1,5 @@
# fire up the web console
clientApp.0.args=7657 127.0.0.1 ./webapps/
clientApp.0.args=7657 ::1,127.0.0.1 ./webapps/
clientApp.0.main=net.i2p.router.web.RouterConsoleRunner
clientApp.0.name=webConsole
clientApp.0.onBoot=true
@ -8,7 +8,7 @@ clientApp.0.startOnLoad=true
# SAM bridge
clientApp.1.main=net.i2p.sam.SAMBridge
clientApp.1.name=SAMBridge
clientApp.1.args=sam.keys 127.0.0.1 7656 i2cp.tcp.host=localhost i2cp.tcp.port=7654
clientApp.1.args=sam.keys 127.0.0.1 7656 i2cp.tcp.host=127.0.0.1 i2cp.tcp.port=7654
clientApp.1.startOnLoad=false
# poke the i2ptunnels defined in i2ptunnel.config
@ -27,7 +27,7 @@ clientApp.3.startOnLoad=true
# load a browser pointing at the web console whenever we start up
clientApp.4.main=net.i2p.apps.systray.UrlLauncher
clientApp.4.name=consoleBrowser
clientApp.4.args=http://localhost:7657/index.jsp
clientApp.4.args=http://127.0.0.1:7657/index.jsp
clientApp.4.delay=5
clientApp.4.startOnLoad=true

View File

@ -6,7 +6,7 @@ Proxy-Connection: close
<html><head>
<title>Eepsite not reachable</title>
<link rel="shortcut icon" href="http://localhost:7657/favicon.ico" />
<link rel="shortcut icon" href="http://127.0.0.1:7657/favicon.ico" />
<style type='text/css'>
div.warning {
margin: 0em 1em 1em 224px;
@ -32,8 +32,8 @@ div.logo {
</head>
<body>
<div class=logo>
<a href="http://localhost:7657/index.jsp" title="Router Console"><img src="http://localhost:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://localhost:7657/config.jsp">configuration</a> | <a href="http://localhost:7657/help.jsp">help</a>]
<a href="http://127.0.0.1:7657/index.jsp" title="Router Console"><img src="http://127.0.0.1:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://127.0.0.1:7657/config.jsp">configuration</a> | <a href="http://127.0.0.1:7657/help.jsp">help</a>]
</div>
<div class=warning id=warning>
The eepsite was not reachable.

View File

@ -6,7 +6,7 @@ Proxy-Connection: close
<html><head>
<title>Invalid eepsite destination</title>
<link rel="shortcut icon" href="http://localhost:7657/favicon.ico" />
<link rel="shortcut icon" href="http://127.0.0.1:7657/favicon.ico" />
<style type='text/css'>
div.warning {
margin: 0em 1em 1em 224px;
@ -32,8 +32,8 @@ div.logo {
</head>
<body>
<div class=logo>
<a href="http://localhost:7657/index.jsp" title="Router Console"><img src="http://localhost:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://localhost:7657/config.jsp">configuration</a> | <a href="http://localhost:7657/help.jsp">help</a>]
<a href="http://127.0.0.1:7657/index.jsp" title="Router Console"><img src="http://127.0.0.1:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://127.0.0.1:7657/config.jsp">configuration</a> | <a href="http://127.0.0.1:7657/help.jsp">help</a>]
</div>
<div class=warning id=warning>
The eepsite destination specified was not valid, or was

View File

@ -6,7 +6,7 @@ Proxy-Connection: close
<html><head>
<title>Eepsite unknown</title>
<link rel="shortcut icon" href="http://localhost:7657/favicon.ico" />
<link rel="shortcut icon" href="http://127.0.0.1:7657/favicon.ico" />
<style type='text/css'>
div.warning {
margin: 0em 1em 1em 224px;
@ -32,16 +32,16 @@ div.logo {
</head>
<body>
<div class=logo>
<a href="http://localhost:7657/index.jsp" title="Router Console"><img src="http://localhost:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://localhost:7657/config.jsp">configuration</a> | <a href="http://localhost:7657/help.jsp">help</a>]
<a href="http://127.0.0.1:7657/index.jsp" title="Router Console"><img src="http://127.0.0.1:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://127.0.0.1:7657/config.jsp">configuration</a> | <a href="http://127.0.0.1:7657/help.jsp">help</a>]
</div>
<div class=warning id=warning>
The eepsite was not found in your router's addressbook.
Check the link or find a BASE64 address.
If you have the BASE64 address, paste it into your userhosts.txt using
<a href="http://localhost:7657/susidns/addressbook.jsp?book=master">SusiDNS</a>,
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">SusiDNS</a>,
use a BASE64 address helper, or use a jump service link below.
Seeing this page often? See <a href="http://www.i2p2.i2p/faq.html#subscriptions">the FAQ</a>
for help in <a href="http://localhost:7657/susidns/config.jsp">adding some subscriptions</a>
for help in <a href="http://127.0.0.1:7657/susidns/config.jsp">adding some subscriptions</a>
to your addressbook.
<BR><BR>Could not find the following destination:<BR><BR>

View File

@ -6,7 +6,7 @@ Proxy-Connection: close
<html><head>
<title>Outproxy Not Found</title>
<link rel="shortcut icon" href="http://localhost:7657/favicon.ico" />
<link rel="shortcut icon" href="http://127.0.0.1:7657/favicon.ico" />
<style type='text/css'>
div.warning {
margin: 0em 1em 1em 224px;
@ -33,8 +33,8 @@ div.logo {
</head>
<body>
<div class=logo>
<a href="http://localhost:7657/index.jsp" title="Router Console"><img src="http://localhost:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://localhost:7657/config.jsp">configuration</a> | <a href="http://localhost:7657/help.jsp">help</a>]
<a href="http://127.0.0.1:7657/index.jsp" title="Router Console"><img src="http://127.0.0.1:7657/i2plogo.png" alt="Router Console" width="187" height="35" border="0"/></a><br />
[<a href="http://127.0.0.1:7657/config.jsp">configuration</a> | <a href="http://127.0.0.1:7657/help.jsp">help</a>]
</div>
<div class=warning id=warning>
The WWW Outproxy was not found.
@ -43,8 +43,8 @@ or your router is not yet well-integrated with peers.
You may want to
<a href="javascript: parent.window.location.reload()">retry</a>
as this will randomly reselect an outproxy from the pool you have defined
<a href="http://localhost:7657/i2ptunnel/index.jsp">here</a>
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">here</a>
(if you have more than one configured).
If you continue to have trouble you may want to edit your outproxy list
<a href="http://localhost:7657/i2ptunnel/edit.jsp?tunnel=0">here</a>.
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=0">here</a>.
<BR><BR>Could not find the following destination:<BR><BR>

View File

@ -11,11 +11,11 @@
In I2P, eepsites are addressed using a 'key', which is represented as a really long Base64 string.
(The 'key' is somewhat analogous to an IP address, and
is shown on the eepsite's I2PTunnel
<a href="http://localhost:7657/i2ptunnel/edit.jsp?tunnel=3">configuration page</a>).
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">configuration page</a>).
The instructions below detail how to assign a name like "mysite.i2p" to your key and
start up your eepsite.</p>
<p>You can reach your eepsite locally through
<a href="http://localhost:7658/">http://localhost:7658/</a>.
<a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
</p>
<h2>Step-by-step instructions for starting your new eepsite and announcing it to the I2P community</h2>
@ -27,24 +27,24 @@
<ul>
<li>Pick a name for your eepsite (<i>something</i>.i2p). Use all lower-case.
You may wish to check first in your own router's address book
<a href="http://localhost:7657/susidns/addressbook.jsp?book=router&filter=none">here</a>,
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router&filter=none">here</a>,
or the file i2p/hosts.txt to see if your name is already taken.
Enter the new name for your eepsite on the
<a href="http://localhost:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>
where it says "Website name". This will replace the default "mysite.i2p".
Also, check the "Auto Start" box. Your eepsite will now start every time you start your router.
Be sure and click "Save".
<li>Click the start button for your eepsite on the
<a href="http://localhost:7657/i2ptunnel/index.jsp">main i2ptunnel configuration page</a>.
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">main i2ptunnel configuration page</a>.
You should now see "eepsite" listed under "Local Destinations" on the left side of the
<a href="http://localhost:7657/index.jsp">I2P Router Console</a>.
<a href="http://127.0.0.1:7657/index.jsp">I2P Router Console</a>.
Your eepsite is now running.
<li>Highlight the entire "Local destination" key on the
<a href="http://localhost:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
and copy it for
later pasting. Make sure you get the whole thing - it's over 500 characters and it must end in "AAAA".
<li>Enter the name and paste in the destination key into your
<a href="http://localhost:7657/susidns/addressbook.jsp?book=master">master address book</a>.
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">master address book</a>.
Click "Add" to add the destination to your address book.
<li>In your browser, enter in your eepsite name (<i>something</i>.i2p) and you should
be right back here. Hopefully it worked.
@ -57,14 +57,14 @@
your eepsite name and key into a web interface on one or more of these sites.
Here is <a href="http://stats.i2p/i2p/addkey.html">the key entry form at stats.i2p</a>.
Again, your key is the entire "Local destination" key on the
<a href="http://localhost:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
Be sure you get the whole thing, ending with "AAAA".
Don't forget to click "add a key".
Check to see if it reports the key was added.
Since many routers periodically get address book updates from these sites, within several hours others will be able to find your
website by simply typing <i>something</i>.i2p into their browser.
<li>Speaking of address book updates, this would be a good time to add some more addressbooks
to your own subscription list. Go to your <a href="http://localhost:7657/susidns/subscriptions.jsp">subscriptions configuration page</a>
to your own subscription list. Go to your <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">subscriptions configuration page</a>
and add a couple of these -
<a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a>,
<a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>,

View File

@ -1,6 +1,6 @@
<html><body>
<meta http-equiv="Refresh" CONTENT="0;URL=http://localhost:7657/index.jsp" />
Continue to your <a href="http://localhost:7657/index.jsp">I2P Router console</a>.
<meta http-equiv="Refresh" CONTENT="0;URL=http://127.0.0.1:7657/index.jsp" />
Continue to your <a href="http://127.0.0.1:7657/index.jsp">I2P Router console</a>.
If that page does not load, please make sure I2P is running, or review the file
wrapper.log for critical errors.
</body></html>

View File

@ -90,8 +90,6 @@ public class Router {
System.setProperty("sun.net.inetaddr.negative.ttl", DNS_CACHE_TIME);
System.setProperty("networkaddress.cache.ttl", DNS_CACHE_TIME);
System.setProperty("networkaddress.cache.negative.ttl", DNS_CACHE_TIME);
// until we handle restricted routes and/or all peers support v6, try v4 first
System.setProperty("java.net.preferIPv4Stack", "true");
System.setProperty("http.agent", "I2P");
// (no need for keepalive)
System.setProperty("http.keepAlive", "false");
@ -135,7 +133,9 @@ public class Router {
envProps.setProperty(k, v);
}
}
// This doesn't work, guess it has to be in the static block above?
// if (Boolean.valueOf(envProps.getProperty("router.disableIPv6")).booleanValue())
// System.setProperty("java.net.preferIPv4Stack", "true");
_context = new RouterContext(this, envProps);
_routerInfo = null;
@ -1206,13 +1206,13 @@ public class Router {
return Math.max(send, recv);
}
}
/* following classes are now private static inner classes, didn't bother to reindent */
/**
* coalesce the stats framework every minute
*
*/
class CoalesceStatsEvent implements SimpleTimer.TimedEvent {
private static class CoalesceStatsEvent implements SimpleTimer.TimedEvent {
private RouterContext _ctx;
public CoalesceStatsEvent(RouterContext ctx) {
_ctx = ctx;
@ -1278,7 +1278,7 @@ class CoalesceStatsEvent implements SimpleTimer.TimedEvent {
* This is done here because we want to make sure the key is updated before anyone
* uses it.
*/
class UpdateRoutingKeyModifierJob extends JobImpl {
private static class UpdateRoutingKeyModifierJob extends JobImpl {
private Log _log;
private Calendar _cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
public UpdateRoutingKeyModifierJob(RouterContext ctx) {
@ -1310,7 +1310,7 @@ class UpdateRoutingKeyModifierJob extends JobImpl {
}
}
class MarkLiveliness implements Runnable {
private static class MarkLiveliness implements Runnable {
private RouterContext _context;
private Router _router;
private File _pingFile;
@ -1342,7 +1342,7 @@ class MarkLiveliness implements Runnable {
}
}
class ShutdownHook extends Thread {
private static class ShutdownHook extends Thread {
private RouterContext _context;
private static int __id = 0;
private int _id;
@ -1359,7 +1359,7 @@ class ShutdownHook extends Thread {
}
/** update the router.info file whenever its, er, updated */
class PersistRouterInfoJob extends JobImpl {
private static class PersistRouterInfoJob extends JobImpl {
private Log _log;
public PersistRouterInfoJob(RouterContext ctx) {
super(ctx);
@ -1389,3 +1389,5 @@ class PersistRouterInfoJob extends JobImpl {
}
}
}
}