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(); +%> " /> + " /> -
+