diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java index c2653c7e8..18ee54596 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java @@ -28,6 +28,7 @@ import java.util.TreeSet; import net.i2p.crypto.EncType; import net.i2p.crypto.SigType; +import net.i2p.data.Base64; import net.i2p.data.DatabaseEntry; import net.i2p.data.DataHelper; import net.i2p.data.Destination; @@ -38,6 +39,7 @@ import net.i2p.data.LeaseSet2; import net.i2p.data.PublicKey; import net.i2p.data.router.RouterAddress; import net.i2p.data.router.RouterInfo; +import net.i2p.router.JobImpl; import net.i2p.router.RouterContext; import net.i2p.router.TunnelPoolSettings; import net.i2p.router.util.HashDistance; // debug @@ -113,6 +115,38 @@ class NetDbRenderer { .append(_t("Never reveal your router identity to anyone, as it is uniquely linked to your IP address in the network database.")) .append(""); renderRouterInfo(buf, _context.router().getRouterInfo(), true, true); + } else if (routerPrefix != null && routerPrefix.length() >= 44) { + // easy way, full hash + byte[] h = Base64.decode(routerPrefix); + if (h != null && h.length == Hash.HASH_LENGTH) { + Hash hash = new Hash(h); + RouterInfo ri = _context.netDb().lookupRouterInfoLocally(hash); + if (ri == null) { + // remote lookup + LookupWaiter lw = new LookupWaiter(); + _context.netDb().lookupRouterInfo(hash, lw, lw, 8*1000); + // just wait right here in the middle of the rendering, sure + synchronized(lw) { + try { lw.wait(9*1000); } catch (InterruptedException ie) {} + } + ri = _context.netDb().lookupRouterInfoLocally(hash); + } + if (ri != null) { + renderRouterInfo(buf, ri, false, true); + } else { + buf.append("