diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index 8e76273098154ca34df4fd706588654cc23c5847..486bcdead5cb7098ac9725c607f5b9fd70e16b81 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -75,7 +75,7 @@ public class I2PTunnel implements Logging, EventDispatcher { private static long __tunnelId = 0; private long _tunnelId; private Properties _clientOptions; - private final List _sessions; + private final List<I2PSession> _sessions; public static final int PACKET_DELAY = 100; @@ -179,7 +179,7 @@ public class I2PTunnel implements Logging, EventDispatcher { } } - List getSessions() { + List<I2PSession> getSessions() { synchronized (_sessions) { return new ArrayList(_sessions); } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index 419e5a899d9e262353177e6c6bd57d5020dc16c0..1f67783e9b6578db5d1d803639be99d04834f652 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -434,6 +434,16 @@ public class TunnelController implements Logging { public boolean getIsRunning() { return _running; } public boolean getIsStarting() { return _starting; } + /** if running but no open sessions, we are in standby */ + public boolean getIsStandby() { + if (!_running) + return false; + for (I2PSession sess : _tunnel.getSessions()) { + if (!sess.isClosed()) + return false; + } + return true; + } public void getSummary(StringBuffer buf) { String type = getType(); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java index 0c0d86b3e99733b2e41086aabf27c17d56eb6fc1..4c23ced34741bf662e0a9294f9f8ebf2ee30f0af 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java @@ -77,6 +77,7 @@ public class IndexBean { public static final int RUNNING = 1; public static final int STARTING = 2; public static final int NOT_RUNNING = 3; + public static final int STANDBY = 4; public static final String PROP_TUNNEL_PASSPHRASE = "i2ptunnel.passphrase"; static final String PROP_NONCE = IndexBean.class.getName() + ".nonce"; @@ -412,8 +413,12 @@ public class IndexBean { public int getTunnelStatus(int tunnel) { TunnelController tun = getController(tunnel); if (tun == null) return NOT_RUNNING; - if (tun.getIsRunning()) return RUNNING; - else if (tun.getIsStarting()) return STARTING; + if (tun.getIsRunning()) { + if (isClient(tunnel) && tun.getIsStandby()) + return STANDBY; + else + return RUNNING; + } else if (tun.getIsStarting()) return STARTING; else return NOT_RUNNING; } diff --git a/apps/i2ptunnel/jsp/index.jsp b/apps/i2ptunnel/jsp/index.jsp index 4d9f6c57d9eac57838f96fe76ccd61503c87f672..6c89d5ff426f1a073720db13c37f6d78216e30b4 100644 --- a/apps/i2ptunnel/jsp/index.jsp +++ b/apps/i2ptunnel/jsp/index.jsp @@ -97,6 +97,11 @@ case IndexBean.STARTING: %><div class="statusStarting text">Starting...</div> <a class="control" title="Stop this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curClient%>">Stop</a> + <% + break; + case IndexBean.STANDBY: + %><div class="statusStarting text">Standby</div> + <a class="control" title="Stop this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curClient%>">Stop</a> <% break; case IndexBean.RUNNING: