NetDb: Add MTU, SSU caps, IPv6 prefix, and cost lookups

This commit is contained in:
zzz
2016-11-27 15:46:07 +00:00
parent 2318a2b319
commit 850f1504f7
3 changed files with 90 additions and 7 deletions

View File

@ -8,8 +8,8 @@ public class NetDbHelper extends HelperBase {
private String _routerPrefix; private String _routerPrefix;
private String _version; private String _version;
private String _country; private String _country;
private String _family, _caps, _ip, _sybil; private String _family, _caps, _ip, _sybil, _mtu, _ssucaps, _ipv6;
private int _full, _port; private int _full, _port, _cost;
private boolean _lease; private boolean _lease;
private boolean _debug; private boolean _debug;
private boolean _graphical; private boolean _graphical;
@ -99,6 +99,34 @@ public class NetDbHelper extends HelperBase {
_type = SigType.parseSigType(f); _type = SigType.parseSigType(f);
} }
/** @since 0.9.28 */
public void setMtu(String f) {
if (f != null && f.length() > 0)
_mtu = DataHelper.stripHTML(f); // XSS
}
/** @since 0.9.28 */
public void setIpv6(String f) {
if (f != null && f.length() > 0) {
_ipv6 = DataHelper.stripHTML(f); // XSS
if (!_ipv6.endsWith(":"))
_ipv6 = _ipv6 + ':';
}
}
/** @since 0.9.28 */
public void setSsucaps(String f) {
if (f != null && f.length() > 0)
_ssucaps = DataHelper.stripHTML(f); // XSS
}
/** @since 0.9.28 */
public void setCost(String f) {
try {
_cost = Integer.parseInt(f);
} catch (NumberFormatException nfe) {}
}
public void setFull(String f) { public void setFull(String f) {
try { try {
_full = Integer.parseInt(f); _full = Integer.parseInt(f);
@ -127,9 +155,11 @@ public class NetDbHelper extends HelperBase {
renderNavBar(); renderNavBar();
if (_routerPrefix != null || _version != null || _country != null || if (_routerPrefix != null || _version != null || _country != null ||
_family != null || _caps != null || _ip != null || _sybil != null || _family != null || _caps != null || _ip != null || _sybil != null ||
_port != 0 || _type != null) _port != 0 || _type != null || _mtu != null || _ipv6 != null ||
_ssucaps != null || _cost != 0)
renderer.renderRouterInfoHTML(_out, _routerPrefix, _version, _country, renderer.renderRouterInfoHTML(_out, _routerPrefix, _version, _country,
_family, _caps, _ip, _sybil, _port, _type); _family, _caps, _ip, _sybil, _port, _type,
_mtu, _ipv6, _ssucaps, _cost);
else if (_lease) else if (_lease)
renderer.renderLeaseSetHTML(_out, _debug); renderer.renderLeaseSetHTML(_out, _debug);
else if (_full == 3) else if (_full == 3)
@ -156,7 +186,8 @@ public class NetDbHelper extends HelperBase {
return 1; return 1;
if (_routerPrefix != null || _version != null || _country != null || if (_routerPrefix != null || _version != null || _country != null ||
_family != null || _caps != null || _ip != null || _sybil != null || _family != null || _caps != null || _ip != null || _sybil != null ||
_port != 0 || _type != null) _port != 0 || _type != null || _mtu != null || _ipv6 != null ||
_ssucaps != null || _cost != 0)
return 2; return 2;
if (_full == 2) if (_full == 2)
return 3; return 3;
@ -214,12 +245,16 @@ public class NetDbHelper extends HelperBase {
private void renderLookupForm() throws IOException { private void renderLookupForm() throws IOException {
_out.write("<form action=\"/netdb\" method=\"GET\"><p><b>Pick One</b></p>\n" + _out.write("<form action=\"/netdb\" method=\"GET\"><p><b>Pick One</b></p>\n" +
"Caps <input type=\"text\" name=\"caps\">e.g. f or XOfR<br>\n" + "Caps <input type=\"text\" name=\"caps\">e.g. f or XOfR<br>\n" +
"Cost <input type=\"text\" name=\"cost\"><br>\n" +
"Country code <input type=\"text\" name=\"c\">e.g. ru<br>\n" + "Country code <input type=\"text\" name=\"c\">e.g. ru<br>\n" +
"Family <input type=\"text\" name=\"fam\"><br>\n" + "Family <input type=\"text\" name=\"fam\"><br>\n" +
"Hash prefix <input type=\"text\" name=\"r\"><br>\n" + "Hash prefix <input type=\"text\" name=\"r\"><br>\n" +
"IP <input type=\"text\" name=\"ip\">IPv4 or IPv6, /24,/16,/8 suffixes optional for IPv4<br>\n" + "IP <input type=\"text\" name=\"ip\">host name, IPv4, or IPv6, /24,/16,/8 suffixes optional for IPv4<br>\n" +
"IPv6 Prefix <input type=\"text\" name=\"ipv6\"><br>\n" +
"MTU <input type=\"text\" name=\"mtu\"><br>\n" +
"Port <input type=\"text\" name=\"port\"><br>\n" + "Port <input type=\"text\" name=\"port\"><br>\n" +
"Sig Type <input type=\"text\" name=\"type\"><br>\n" + "Sig Type <input type=\"text\" name=\"type\"><br>\n" +
"SSU Caps <input type=\"text\" name=\"ssucaps\"><br>\n" +
"Version <input type=\"text\" name=\"v\"><br>\n" + "Version <input type=\"text\" name=\"v\"><br>\n" +
"<p><b>Add Sybil analysis (must pick one above):</b></p>\n" + "<p><b>Add Sybil analysis (must pick one above):</b></p>\n" +
"Sybil close to <input type=\"text\" name=\"sybil2\">Router hash, dest hash, b32, or from address book<br>\n" + "Sybil close to <input type=\"text\" name=\"sybil2\">Router hash, dest hash, b32, or from address book<br>\n" +

View File

@ -90,7 +90,8 @@ class NetDbRenderer {
*/ */
public void renderRouterInfoHTML(Writer out, String routerPrefix, String version, public void renderRouterInfoHTML(Writer out, String routerPrefix, String version,
String country, String family, String caps, String country, String family, String caps,
String ip, String sybil, int port, SigType type) throws IOException { String ip, String sybil, int port, SigType type,
String mtu, String ipv6, String ssucaps, int cost) throws IOException {
StringBuilder buf = new StringBuilder(4*1024); StringBuilder buf = new StringBuilder(4*1024);
List<Hash> sybils = sybil != null ? new ArrayList<Hash>(128) : null; List<Hash> sybils = sybil != null ? new ArrayList<Hash>(128) : null;
if (".".equals(routerPrefix)) { if (".".equals(routerPrefix)) {
@ -156,6 +157,49 @@ class NetDbRenderer {
break; break;
} }
} }
} else if (mtu != null) {
for (RouterAddress ra : ri.getAddresses()) {
if (mtu.equals(ra.getOption("mtu"))) {
renderRouterInfo(buf, ri, false, true);
if (sybil != null)
sybils.add(key);
notFound = false;
break;
}
}
} else if (ipv6 != null) {
for (RouterAddress ra : ri.getAddresses()) {
String host = ra.getHost();
if (host != null && host.startsWith(ipv6)) {
renderRouterInfo(buf, ri, false, true);
if (sybil != null)
sybils.add(key);
notFound = false;
break;
}
}
} else if (ssucaps != null) {
for (RouterAddress ra : ri.getAddresses()) {
if (!"SSU".equals(ra.getTransportStyle()))
continue;
if (ssucaps.equals(ra.getOption("caps"))) {
renderRouterInfo(buf, ri, false, true);
if (sybil != null)
sybils.add(key);
notFound = false;
break;
}
}
} else if (cost != 0) {
for (RouterAddress ra : ri.getAddresses()) {
if (cost == ra.getCost()) {
renderRouterInfo(buf, ri, false, true);
if (sybil != null)
sybils.add(key);
notFound = false;
break;
}
}
} }
} }
if (notFound) { if (notFound) {

View File

@ -32,5 +32,9 @@
<jsp:setProperty name="netdbHelper" property="sybil2" value="<%=request.getParameter(\"sybil2\")%>" /> <jsp:setProperty name="netdbHelper" property="sybil2" value="<%=request.getParameter(\"sybil2\")%>" />
<jsp:setProperty name="netdbHelper" property="port" value="<%=request.getParameter(\"port\")%>" /> <jsp:setProperty name="netdbHelper" property="port" value="<%=request.getParameter(\"port\")%>" />
<jsp:setProperty name="netdbHelper" property="type" value="<%=request.getParameter(\"type\")%>" /> <jsp:setProperty name="netdbHelper" property="type" value="<%=request.getParameter(\"type\")%>" />
<jsp:setProperty name="netdbHelper" property="ipv6" value="<%=request.getParameter(\"ipv6\")%>" />
<jsp:setProperty name="netdbHelper" property="cost" value="<%=request.getParameter(\"cost\")%>" />
<jsp:setProperty name="netdbHelper" property="mtu" value="<%=request.getParameter(\"mtu\")%>" />
<jsp:setProperty name="netdbHelper" property="ssucaps" value="<%=request.getParameter(\"ssucaps\")%>" />
<jsp:getProperty name="netdbHelper" property="netDbSummary" /> <jsp:getProperty name="netdbHelper" property="netDbSummary" />
</div></div></body></html> </div></div></body></html>