From b8d33f7426a17e4a398ae6bc03fc9b5a52bec3de Mon Sep 17 00:00:00 2001
From: zzz
Date: Sat, 6 Oct 2018 16:50:32 +0000
Subject: [PATCH] Console: Tab /peers, fix html errors
---
.../i2p/router/web/helpers/PeerHelper.java | 151 ++++++++++++++----
apps/routerconsole/jsp/peers.jsp | 9 +-
2 files changed, 125 insertions(+), 35 deletions(-)
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
index d0b962de6..02297e2e2 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
@@ -29,6 +29,22 @@ import net.i2p.util.SystemVersion;
public class PeerHelper extends HelperBase {
private int _sortFlags;
private String _urlBase;
+ private String _transport;
+ private boolean _graphical;
+
+ private static final String titles[] = {
+ _x("Addresses"),
+ "NTCP",
+ "SSU",
+ _x("UPnP Status")
+ };
+
+ private static final String links[] = {
+ "",
+ "?tx=ntcp",
+ "?tx=ssu",
+ "?tx=upnp"
+ };
// Opera doesn't have the char, TODO check UA
//private static final String THINSP = " / ";
@@ -47,8 +63,20 @@ public class PeerHelper extends HelperBase {
_sortFlags = 0;
}
}
+
public void setUrlBase(String base) { _urlBase = base; }
+ /** @since 0.9.38 */
+ public void setTransport(String t) { _transport = t; }
+
+ /**
+ * call for non-text-mode browsers
+ * @since 0.9.38
+ */
+ public void allowGraphical() {
+ _graphical = true;
+ }
+
public String getPeerSummary() {
try {
renderStatusHTML(_out, _urlBase, _sortFlags);
@@ -67,54 +95,111 @@ public class PeerHelper extends HelperBase {
* @since 0.9.31 moved from TransportManager
*/
private void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException {
- if (isAdvanced()) {
+ if (_context.commSystem().isDummy()) {
+ out.write("No peers, no transports, no UPnP: i2p.vmCommSystem=true
");
+ return;
+ }
+ renderNavBar(out);
+ if (isAdvanced() && _transport == null) {
out.write("");
out.write(_t("Status"));
out.write(": ");
out.write(_t(_context.commSystem().getStatus().toStatusString()));
out.write("
");
}
+
SortedMap transports = _context.commSystem().getTransports();
- for (Map.Entry e : transports.entrySet()) {
- String style = e.getKey();
- Transport t = e.getValue();
- if (style.equals("NTCP")) {
- NTCPTransport nt = (NTCPTransport) t;
- render(nt, out, urlBase, sortFlags);
- } else if (style.equals("SSU")) {
- UDPTransport ut = (UDPTransport) t;
- render(ut, out, urlBase, sortFlags);
- } else {
- // pluggable (none yet)
- t.renderStatusHTML(out, urlBase, sortFlags);
+ if (_transport != null && !_transport.equals("upnp")) {
+ for (Map.Entry e : transports.entrySet()) {
+ String style = e.getKey();
+ Transport t = e.getValue();
+ if (style.equals("NTCP") && "ntcp".equals(_transport)) {
+ NTCPTransport nt = (NTCPTransport) t;
+ render(nt, out, urlBase, sortFlags);
+ } else if (style.equals("SSU") && "ssu".equals(_transport)) {
+ UDPTransport ut = (UDPTransport) t;
+ render(ut, out, urlBase, sortFlags);
+ } else {
+ // pluggable (none yet)
+ t.renderStatusHTML(out, urlBase, sortFlags);
+ }
}
- }
-
- if (!transports.isEmpty()) {
- out.write(getTransportsLegend());
- }
-
- StringBuilder buf = new StringBuilder(4*1024);
- buf.append("").append(_t("Router Transport Addresses")).append("
\n");
- for (Transport t : transports.values()) {
- if (t.hasCurrentAddress()) {
- for (RouterAddress ra : t.getCurrentAddresses()) {
- buf.append(ra.toString());
- buf.append("\n\n");
+ if (!transports.isEmpty()) {
+ out.write(getTransportsLegend());
+ }
+ } else if (_transport == null) {
+ StringBuilder buf = new StringBuilder(4*1024);
+ buf.append("").append(_t("Router Transport Addresses")).append("
\n");
+ if (!transports.isEmpty()) {
+ for (Transport t : transports.values()) {
+ if (t.hasCurrentAddress()) {
+ for (RouterAddress ra : t.getCurrentAddresses()) {
+ buf.append(ra.toString());
+ buf.append("\n\n");
+ }
+ } else {
+ buf.append(_t("{0} is used for outbound connections only", t.getStyle()));
+ buf.append("\n\n");
+ }
}
} else {
- buf.append(_t("{0} is used for outbound connections only", t.getStyle()));
- buf.append("\n\n");
+ buf.append(_t("none"));
}
+ buf.append("\n");
+ out.write(buf.toString());
+ } else if ("upnp".equals(_transport)) {
+ // UPnP Status
+ _context.commSystem().renderStatusHTML(_out, _urlBase, _sortFlags);
}
- buf.append("\n");
- out.write(buf.toString());
- // UPnP Status
- _context.commSystem().renderStatusHTML(_out, _urlBase, _sortFlags);
- out.write("
\n");
out.flush();
}
+ /**
+ * @since 0.9.38
+ */
+ private int getTab() {
+ if ("ntcp".equals(_transport))
+ return 1;
+ if ("ssu".equals(_transport))
+ return 2;
+ if ("upnp".equals(_transport))
+ return 3;
+ return 0;
+ }
+
+ /**
+ * @since 0.9.38
+ */
+ private void renderNavBar(Writer out) throws IOException {
+ StringBuilder buf = new StringBuilder(1024);
+ buf.append("");
+ boolean span = _graphical;
+ if (!span)
+ buf.append("
");
+ int tab = getTab();
+ for (int i = 0; i < titles.length; i++) {
+ if (i == tab) {
+ // we are there
+ if (span)
+ buf.append("");
+ buf.append(_t(titles[i]));
+ } else {
+ // we are not there, make a link
+ if (span)
+ buf.append("");
+ buf.append("").append(_t(titles[i])).append("");
+ }
+ if (span)
+ buf.append("\n");
+ else if (i != titles.length - 1)
+ buf.append(" \n");
+ }
+ if (!span)
+ buf.append("");
+ buf.append("
");
+ out.write(buf.toString());
+ }
+
/**
* @since 0.9.31 moved from TransportManager
*/
diff --git a/apps/routerconsole/jsp/peers.jsp b/apps/routerconsole/jsp/peers.jsp
index 2e3ba63e7..b346ec373 100644
--- a/apps/routerconsole/jsp/peers.jsp
+++ b/apps/routerconsole/jsp/peers.jsp
@@ -14,8 +14,13 @@
- <% peerHelper.storeWriter(out); %>
+<%
+ peerHelper.storeWriter(out);
+ if (allowIFrame)
+ peerHelper.allowGraphical();
+%>
" />
+ " />
-