diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java
index 2bce1cb59..ca4a1e708 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java
@@ -38,7 +38,9 @@ public class ConfigTunnelsHelper extends HelperBase {
TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(dest.calculateHash());
TunnelPoolSettings out = _context.tunnelManager().getOutboundSettings(dest.calculateHash());
- if ( (in == null) || (out == null) ) continue;
+ if (in == null || in.getAliasOf() != null ||
+ out == null || out.getAliasOf() != null)
+ continue;
String name = in.getDestinationNickname();
if (name == null)
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java
index 25ea1e475..814d7c074 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java
@@ -8,6 +8,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import net.i2p.data.DataHelper;
import net.i2p.data.Hash;
@@ -50,6 +51,11 @@ class TunnelRenderer {
continue;
TunnelPool in = clientInboundPools.get(client);
TunnelPool outPool = clientOutboundPools.get(client);
+ if ((in != null && in.getSettings().getAliasOf() != null) ||
+ (outPool != null && outPool.getSettings().getAliasOf() != null)) {
+ // skip aliases, we will print a header under the main tunnel pool below
+ continue;
+ }
// TODO the following code is duplicated in SummaryHelper
String name = (in != null) ? in.getSettings().getDestinationNickname() : null;
if ( (name == null) && (outPool != null) )
@@ -62,6 +68,26 @@ class TunnelRenderer {
out.write(" [" + _t("configure") + "]\n");
else
out.write(" (" + _t("dead") + ")\n");
+ if (in != null) {
+ // list aliases
+ Set aliases = in.getSettings().getAliases();
+ if (aliases != null) {
+ for (Hash a : aliases) {
+ TunnelPool ain = clientInboundPools.get(a);
+ if (ain != null) {
+ String aname = ain.getSettings().getDestinationNickname();
+ if (aname == null)
+ aname = a.toBase64().substring(0,4);
+ out.write("" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(aname)));
+ if (isLocal)
+ out.write(" [" + _t("configure") + "]
\n");
+ else
+ out.write(" (" + _t("dead") + ")\n");
+ }
+ }
+ }
+ }
renderPool(out, in, outPool);
}