diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
index 41f0ad90c..114579a27 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
@@ -11,6 +11,7 @@ public class NetDbHelper {
private RouterContext _context;
private Writer _out;
private String _routerPrefix;
+ private boolean _full = false;
/**
* Configure this bean to query a particular router context
@@ -30,6 +31,7 @@ public class NetDbHelper {
public void setWriter(Writer writer) { _out = writer; }
public void setRouter(String r) { _routerPrefix = r; }
+ public void setFull(String f) { _full = "1".equals(f); };
public String getNetDbSummary() {
try {
@@ -37,14 +39,14 @@ public class NetDbHelper {
if (_routerPrefix != null)
_context.netDb().renderRouterInfoHTML(_out, _routerPrefix);
else
- _context.netDb().renderStatusHTML(_out);
+ _context.netDb().renderStatusHTML(_out, _full);
return "";
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024);
if (_routerPrefix != null)
_context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix);
else
- _context.netDb().renderStatusHTML(new OutputStreamWriter(baos));
+ _context.netDb().renderStatusHTML(new OutputStreamWriter(baos), _full);
return new String(baos.toByteArray());
}
} catch (IOException ioe) {
diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp
index 89c2bdec2..08a1377d3 100644
--- a/apps/routerconsole/jsp/netdb.jsp
+++ b/apps/routerconsole/jsp/netdb.jsp
@@ -14,6 +14,7 @@
" />
+ " />
" />
diff --git a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
index ed4fe1555..e4a5ce08b 100644
--- a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java
@@ -62,4 +62,5 @@ public abstract class NetworkDatabaseFacade implements Service {
public int getKnownRouters() { return 0; }
public int getKnownLeaseSets() { return 0; }
public void renderRouterInfoHTML(Writer out, String s) throws IOException {}
+ public void renderStatusHTML(Writer out, boolean b) throws IOException {}
}
diff --git a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java
index 96dbadd6c..8fa729d63 100644
--- a/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java
+++ b/router/java/src/net/i2p/router/networkdb/PublishLocalRouterInfoJob.java
@@ -20,12 +20,12 @@ import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
- * Publish the local router's RouterInfo every 5 to 10 minutes
+ * Publish the local router's RouterInfo periodically
*
*/
public class PublishLocalRouterInfoJob extends JobImpl {
private Log _log;
- final static long PUBLISH_DELAY = 5*60*1000; // every 5 to 10 minutes (since we randomize)
+ final static long PUBLISH_DELAY = 20*60*1000;
public PublishLocalRouterInfoJob(RouterContext ctx) {
super(ctx);
@@ -67,6 +67,6 @@ public class PublishLocalRouterInfoJob extends JobImpl {
} catch (DataFormatException dfe) {
_log.error("Error signing the updated local router info!", dfe);
}
- requeue(PUBLISH_DELAY + getContext().random().nextInt((int)PUBLISH_DELAY));
+ requeue((PUBLISH_DELAY/2) + getContext().random().nextInt((int)PUBLISH_DELAY));
}
}
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
index c74499f95..23ef78d86 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
@@ -125,6 +125,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
private final static long ROUTER_INFO_EXPIRATION_SHORT = 90*60*1000l;
private final static long EXPLORE_JOB_DELAY = 10*60*1000l;
+ private final static long PUBLISH_JOB_DELAY = 5*60*1000l;
public KademliaNetworkDatabaseFacade(RouterContext context) {
_context = context;
@@ -326,7 +327,9 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
}
// periodically update and resign the router's 'published date', which basically
// serves as a version
- _context.jobQueue().addJob(new PublishLocalRouterInfoJob(_context));
+ Job plrij = new PublishLocalRouterInfoJob(_context);
+ plrij.getTiming().setStartAfter(_context.clock().now() + PUBLISH_JOB_DELAY);
+ _context.jobQueue().addJob(plrij);
try {
publish(ri);
} catch (IllegalArgumentException iae) {
@@ -970,7 +973,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
StringBuffer buf = new StringBuffer(4*1024);
buf.append("Network Database RouterInfo Lookup
\n");
if (".".equals(routerPrefix)) {
- renderRouterInfo(buf, _context.router().getRouterInfo(), true);
+ renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
} else {
boolean notFound = true;
Set routers = getRouters();
@@ -978,7 +981,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
RouterInfo ri = (RouterInfo)iter.next();
Hash key = ri.getIdentity().getHash();
if (key.toBase64().startsWith(routerPrefix)) {
- renderRouterInfo(buf, ri, false);
+ renderRouterInfo(buf, ri, false, true);
notFound = false;
}
}
@@ -990,7 +993,14 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
}
public void renderStatusHTML(Writer out) throws IOException {
- StringBuffer buf = new StringBuffer(getKnownRouters() * 2048);
+ renderStatusHTML(out, true);
+ }
+
+ public void renderStatusHTML(Writer out, boolean full) throws IOException {
+ int size = getKnownRouters() * 512;
+ if (full)
+ size *= 4;
+ StringBuffer buf = new StringBuffer(size);
buf.append("Network Database Contents
\n");
if (!_initialized) {
buf.append("Not initialized\n");
@@ -1044,10 +1054,15 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
}
Hash us = _context.routerHash();
- out.write("Routers
\n");
+ out.write("\n");
RouterInfo ourInfo = _context.router().getRouterInfo();
- renderRouterInfo(buf, ourInfo, true);
+ renderRouterInfo(buf, ourInfo, true, true);
out.write(buf.toString());
buf.setLength(0);
@@ -1061,7 +1076,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
Hash key = ri.getIdentity().getHash();
boolean isUs = key.equals(us);
if (!isUs) {
- renderRouterInfo(buf, ri, false);
+ renderRouterInfo(buf, ri, false, full);
out.write(buf.toString());
buf.setLength(0);
String coreVersion = ri.getOption("coreVersion");
@@ -1102,7 +1117,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
out.flush();
}
- private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs) {
+ private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs, boolean full) {
String hash = info.getIdentity().getHash().toBase64();
buf.append("");
if (isUs) {
@@ -1129,13 +1144,18 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
}
}
buf.append("
\n");
- buf.append("Stats:
\n");
- for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
- String key = (String)iter.next();
- String val = info.getOption(key);
- buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("
\n");
+ if (full) {
+ buf.append("Stats:
\n");
+ for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
+ String key = (String)iter.next();
+ String val = info.getOption(key);
+ buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("
\n");
+ }
+ buf.append("
\n");
+ } else {
+ buf.append("Full entry\n");
}
- buf.append("
\n");
+ buf.append("
\n");
}
}
diff --git a/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java b/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java
index a43fc6311..967bc7a79 100644
--- a/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java
+++ b/router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java
@@ -28,6 +28,13 @@ import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
+ * This used be called from StartAcceptingClientsJob but is now disabled.
+ * It is still called once from LoadRouterInfoJob (but not run as a Job).
+ *
+ * The following comments appear to be incorrect...
+ * it rebuilds if the router.info file does not exist.
+ * There is no check for a router.info.rebuild file.
+ *
* If the file router.info.rebuild exists, rebuild the router info and republish.
* This is useful for dhcp or other situations where the router addresses change -
* simply create the router.info.rebuild file after modifying router.config and within
diff --git a/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java b/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java
index 7ad54299f..727d06ac6 100644
--- a/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java
+++ b/router/java/src/net/i2p/router/startup/StartAcceptingClientsJob.java
@@ -28,7 +28,8 @@ public class StartAcceptingClientsJob extends JobImpl {
getContext().clientManager().startup();
getContext().jobQueue().addJob(new ReadConfigJob(getContext()));
- getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
+ // pointless
+ //getContext().jobQueue().addJob(new RebuildRouterInfoJob(getContext()));
getContext().jobQueue().allowParallelOperation();
}
}