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 c9e1a5a28320b8f3ebb9b05a3016e2396b6eeb86..cce957c0e9f8263170be6b3fe8e26920d892a1dc 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 @@ -61,13 +61,13 @@ class NetDbRenderer { */ private class LeaseSetComparator implements Comparator<LeaseSet> { public int compare(LeaseSet l, LeaseSet r) { - Destination dl = l.getDestination(); - Destination dr = r.getDestination(); + Hash dl = l.getHash(); + Hash dr = r.getHash(); boolean locall = _context.clientManager().isLocal(dl); boolean localr = _context.clientManager().isLocal(dr); if (locall && !localr) return -1; if (localr && !locall) return 1; - return dl.calculateHash().toBase64().compareTo(dr.calculateHash().toBase64()); + return dl.toBase32().compareTo(dr.toBase32()); } } @@ -447,6 +447,7 @@ class NetDbRenderer { long now = _context.clock().now(); buf.append("<div class=\"leasesets_container\">"); for (LeaseSet ls : leases) { + // warning - will be null for non-local encrypted Destination dest = ls.getDestination(); Hash key = ls.getHash(); buf.append("<table class=\"leaseset\">\n") @@ -455,7 +456,7 @@ class NetDbRenderer { if (type == DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2 || _context.keyRing().get(key) != null) buf.append(" <b>(").append(_t("Encrypted")).append(")</b>"); buf.append("</th>"); - if (_context.clientManager().isLocal(dest)) { + if (_context.clientManager().isLocal(key)) { buf.append("<th><a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> "); boolean unpublished = ! _context.clientManager().shouldPublishLeaseSet(key); if (unpublished) @@ -489,17 +490,22 @@ class NetDbRenderer { } // else probably a client } else { buf.append("<th><b>").append(_t("Destination")).append(":</b> "); - String host = _context.namingService().reverseLookup(dest); + String host = (dest != null) ? _context.namingService().reverseLookup(dest) : null; if (host != null) { buf.append("<a href=\"http://").append(host).append("/\">").append(host).append("</a></th>"); } else { - String b32 = dest.toBase32(); - buf.append("<code>").append(dest.toBase64().substring(0, 6)).append("</code></th>") - .append("</tr>\n<tr><td"); + String b32 = key.toBase32(); + buf.append("<code>"); + if (dest != null) + buf.append(dest.toBase64().substring(0, 6)); + else + buf.append("n/a"); + buf.append("</code></th>" + + "</tr>\n<tr><td"); if (!linkSusi) buf.append(" colspan=\"2\""); buf.append("><a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>\n"); - if (linkSusi) { + if (linkSusi && dest != null) { buf.append("<td class=\"addtobook\"><a title=\"").append(_t("Add to addressbook")) .append("\" href=\"/susidns/addressbook.jsp?book=private&destination=") .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>"); @@ -544,7 +550,13 @@ class NetDbRenderer { } buf.append("</td></tr>\n<tr><td colspan=\"2\">"); //buf.append(dest.toBase32()).append("<br>"); - buf.append("<b>Signature type:</b> ").append(dest.getSigningPublicKey().getType()); + buf.append("<b>Signature type:</b> "); + if (dest != null && type != DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2) { + buf.append(dest.getSigningPublicKey().getType()); + } else { + // encrypted, show blinded key type + buf.append(ls.getSigningKey().getType()); + } if (type == DatabaseEntry.KEY_TYPE_LEASESET) { buf.append("</td></tr>\n<tr><td colspan=\"2\"><b>Encryption Key:</b> ELGAMAL_2048 ") .append(ls.getEncryptionKey().toBase64().substring(0, 20))