From 825af3e6c1ee54a4cffdef5b4d45cc1c4772a877 Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 12 Sep 2008 13:37:22 +0000 Subject: [PATCH] * HarvesterJob: Don't instantiate if disabled * NetDb: Add netDb.exploreKeySet stat * netdb.jsp: Add parameter ?r=xxxxxx to view a single routerinfo, and ?r=. to view our own; change links on other pages too --- .../src/net/i2p/router/web/NetDbHelper.java | 13 ++++++-- apps/routerconsole/jsp/netdb.jsp | 1 + apps/routerconsole/jsp/summary.jsp | 2 +- history.txt | 15 +++++++++ .../net/i2p/router/NetworkDatabaseFacade.java | 1 + .../src/net/i2p/router/RouterVersion.java | 2 +- router/java/src/net/i2p/router/Shitlist.java | 2 +- .../networkdb/kademlia/HarvesterJob.java | 2 +- .../KademliaNetworkDatabaseFacade.java | 32 +++++++++++++++++-- .../peermanager/ProfileOrganizerRenderer.java | 2 +- .../router/transport/ntcp/NTCPTransport.java | 2 +- .../router/transport/udp/UDPTransport.java | 2 +- 12 files changed, 64 insertions(+), 12 deletions(-) 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 1cb635ad0..41f0ad90c 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java @@ -10,6 +10,8 @@ import net.i2p.router.RouterContext; public class NetDbHelper { private RouterContext _context; private Writer _out; + private String _routerPrefix; + /** * Configure this bean to query a particular router context * @@ -27,15 +29,22 @@ public class NetDbHelper { public NetDbHelper() {} public void setWriter(Writer writer) { _out = writer; } + public void setRouter(String r) { _routerPrefix = r; } public String getNetDbSummary() { try { if (_out != null) { - _context.netDb().renderStatusHTML(_out); + if (_routerPrefix != null) + _context.netDb().renderRouterInfoHTML(_out, _routerPrefix); + else + _context.netDb().renderStatusHTML(_out); return ""; } else { ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024); - _context.netDb().renderStatusHTML(new OutputStreamWriter(baos)); + if (_routerPrefix != null) + _context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix); + else + _context.netDb().renderStatusHTML(new OutputStreamWriter(baos)); return new String(baos.toByteArray()); } } catch (IOException ioe) { diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp index 0933c7b22..89c2bdec2 100644 --- a/apps/routerconsole/jsp/netdb.jsp +++ b/apps/routerconsole/jsp/netdb.jsp @@ -14,6 +14,7 @@ " /> + " /> diff --git a/apps/routerconsole/jsp/summary.jsp b/apps/routerconsole/jsp/summary.jsp index 7bd85aaf9..ee3027006 100644 --- a/apps/routerconsole/jsp/summary.jsp +++ b/apps/routerconsole/jsp/summary.jsp @@ -10,7 +10,7 @@
General
- Ident: (, never reveal it to anyone" href="netdb.jsp#our-info">view)
+ Ident: (, never reveal it to anyone" href="netdb.jsp?r=.">view)
Version:
Uptime:
Now:
diff --git a/history.txt b/history.txt index 95c57b9a4..9ffe9abd5 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,18 @@ +2008-09-11 zzz + * Blocklist: Fix a log message format + * HarvesterJob: Don't instantiate if disabled + * i2psnark: + - Add config i2psnark.linkPrefix to enable access to completed + torrents from a different machine - examples: + i2psnark.linkPrefix=file://///localserver/path/to/files/ + i2psnark.linkPrefix=http://localwebserver/path/ + (Stop i2psnark, add to i2psnark.config, restart) + - Remove Galen and NickyB trackers + * NetDb: Add netDb.exploreKeySet stat + * netdb.jsp: Add parameter ?r=xxxxxx to view a single routerinfo, + and ?r=. to view our own; change links on other pages too + * Transport: Make 0.0.0.0/8 and 169.254.0.0/16 private + 2008-09-06 zzz * EepGet command line: Fix byte counts after a failed resume * NTCP: Mark unreachable on outbound connection timeout diff --git a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java index eee825177..8812c9855 100644 --- a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java @@ -61,6 +61,7 @@ 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 {} } diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index b48c557f3..14aac6694 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -17,7 +17,7 @@ import net.i2p.CoreVersion; public class RouterVersion { public final static String ID = "$Revision: 1.548 $ $Date: 2008-06-07 23:00:00 $"; public final static String VERSION = "0.6.3"; - public final static long BUILD = 3; + public final static long BUILD = 4; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID); diff --git a/router/java/src/net/i2p/router/Shitlist.java b/router/java/src/net/i2p/router/Shitlist.java index a585f6b3b..08c996792 100644 --- a/router/java/src/net/i2p/router/Shitlist.java +++ b/router/java/src/net/i2p/router/Shitlist.java @@ -280,7 +280,7 @@ public class Shitlist { Hash key = (Hash)iter.next(); Entry entry = (Entry)entries.get(key); buf.append("
  • ").append(key.toBase64()).append(""); - buf.append(" (netdb)"); + buf.append(" (netdb)"); buf.append(" expiring in "); buf.append(DataHelper.formatDuration(entry.expireOn-_context.clock().now())); Set transports = entry.transports; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java index 948709d98..7ced65ed0 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java @@ -41,7 +41,7 @@ class HarvesterJob extends JobImpl { /** background job, who cares */ private static final int PRIORITY = 100; - private static final String PROP_ENABLED = "netDb.shouldHarvest"; + public static final String PROP_ENABLED = "netDb.shouldHarvest"; private boolean harvestDirectly() { return Boolean.valueOf(getContext().getProperty("netDb.harvestDirectly", "false")).booleanValue(); 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 9c4f8a352..0e19e3273 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -130,6 +130,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { _activeRequests = new HashMap(8); _enforceNetId = DEFAULT_ENFORCE_NETID; context.statManager().createRateStat("netDb.lookupLeaseSetDeferred", "how many lookups are deferred for a single leaseSet lookup?", "NetworkDatabase", new long[] { 60*1000, 5*60*1000 }); + context.statManager().createRateStat("netDb.exploreKeySet", "how many keys are queued for exploration?", "NetworkDatabase", new long[] { 10*60*1000 }); } protected PeerSelector createPeerSelector() { return new PeerSelector(_context); } @@ -203,12 +204,14 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { if (!_initialized) return; synchronized (_exploreKeys) { _exploreKeys.removeAll(toRemove); + _context.statManager().addRateData("netDb.exploreKeySet", _exploreKeys.size(), 0); } } public void queueForExploration(Set keys) { if (!_initialized) return; synchronized (_exploreKeys) { _exploreKeys.addAll(keys); + _context.statManager().addRateData("netDb.exploreKeySet", _exploreKeys.size(), 0); } } @@ -297,7 +300,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { // fire off a group of searches from the explore pool _context.jobQueue().addJob(_exploreJob); // if configured to do so, periodically try to get newer routerInfo stats - if (_harvestJob == null) + if (_harvestJob == null && "true".equals(_context.getProperty(HarvesterJob.PROP_ENABLED))) _harvestJob = new HarvesterJob(_context, this); _context.jobQueue().addJob(_harvestJob); } else { @@ -943,9 +946,32 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { } } + public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException { + StringBuffer buf = new StringBuffer(4*1024); + buf.append("

    Network Database RouterInfo Lookup

    \n"); + if (".".equals(routerPrefix)) { + renderRouterInfo(buf, _context.router().getRouterInfo(), true); + } else { + boolean notFound = true; + Set routers = getRouters(); + for (Iterator iter = routers.iterator(); iter.hasNext(); ) { + RouterInfo ri = (RouterInfo)iter.next(); + Hash key = ri.getIdentity().getHash(); + if (key.toBase64().startsWith(routerPrefix)) { + renderRouterInfo(buf, ri, false); + notFound = false; + } + } + if (notFound) + buf.append("Router ").append(routerPrefix).append(" not found in network database"); + } + out.write(buf.toString()); + out.flush(); + } + public void renderStatusHTML(Writer out) throws IOException { - StringBuffer buf = new StringBuffer(10*1024); - buf.append("

    Kademlia Network DB Contents

    \n"); + StringBuffer buf = new StringBuffer(getKnownRouters() * 2048); + buf.append("

    Network Database Contents

    \n"); if (!_initialized) { buf.append("Not initialized\n"); out.write(buf.toString()); diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java index eb29b374e..fe7fd3b1f 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java @@ -163,7 +163,7 @@ class ProfileOrganizerRenderer { buf.append(" "); //buf.append("profile.txt "); //buf.append(" netDb"); - buf.append("netDb"); + buf.append("netDb"); buf.append("/profile"); buf.append("/+-\n"); buf.append(""); diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java index a7e77d54c..349669066 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -600,7 +600,7 @@ public class NTCPTransport extends TransportImpl { for (Iterator iter = peers.iterator(); iter.hasNext(); ) { NTCPConnection con = (NTCPConnection)iter.next(); String name = con.getRemotePeer().calculateHash().toBase64().substring(0,6); - buf.append("").append(name); + buf.append("").append(name); buf.append(""); if (con.isInbound()) buf.append("in"); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index 92a0eb70e..c59ff60f9 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -1687,7 +1687,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority String name = peer.getRemotePeer().toBase64().substring(0,6); buf.append(""); - buf.append(""); buf.append(name);