diff --git a/README.md b/README.md index a97e119..428bf1f 100755 --- a/README.md +++ b/README.md @@ -100,6 +100,12 @@ specified host and port. Note that the base 32 I2P destination address determini `tunnel-control.sh server.create <(optional) directory>` +#### Check the state of a tunnel. Returns "opening" or "open" + +`tunnel-control.sh server.state ` +`tunnel-control.sh client.state ` +`tunnel-control.sh socks.state ` + #### Close the tunnel listening for connections on the specified I2P destination address. Returns "OK". diff --git a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java index 45d699d..0d9e26d 100644 --- a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java +++ b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java @@ -349,6 +349,14 @@ public class TunnelControl implements Runnable { break; } + case "server.state": { + String dest = args[1]; + tunnelList.getTunnelsCopyStream().filter(t -> t.getType().equals("server") && ((ServerTunnel) t).dest.equals(dest)).forEach(t -> { + out.println(((ServerTunnel) t).tunnel==null ? "opening" : "open"); + }); + break; + } + case "client.create": { String destPubKey = args[1]; int port = Integer.parseInt(args[2]); @@ -368,6 +376,14 @@ public class TunnelControl implements Runnable { break; } + case "client.state": { + int port = Integer.parseInt(args[1]); + tunnelList.getTunnelsCopyStream().filter(t->t.getType().equals("client") && ((ClientTunnel) t).port == port).forEach(t->{ + out.println(((ClientTunnel) t).tunnel==null ? "opening" : "open"); + }); + break; + } + case "socks.create": { int port = Integer.parseInt(args[1]); tunnelList.addTunnel(new SocksTunnel(port)); @@ -384,6 +400,13 @@ public class TunnelControl implements Runnable { out.println("OK"); break; } + case "socks.state": { + int port = Integer.parseInt(args[1]); + tunnelList.getTunnelsCopyStream().filter(t -> t.getType().equals("socks") && ((SocksTunnel) t).port == port).forEach(t -> { + out.println(((SocksTunnel) t).tunnel==null ? "opening" : "open"); + }); + break; + } case "all.destroy": { tunnelList.getTunnelsCopyStream().forEach(t -> {