From 1a52185ede38f11e1398e42da2b6a9f482e205d0 Mon Sep 17 00:00:00 2001 From: knaccc Date: Sat, 24 Aug 2019 04:20:50 +0100 Subject: [PATCH] prevent duplicate port assignment --- .../org/getmonero/i2p/zero/TunnelControl.java | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) 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 2428828..19b1157 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 @@ -179,7 +179,7 @@ public class TunnelControl implements Runnable { public boolean enabled = true; public abstract String getType(); public abstract String getHost(); - public abstract String getPort(); + public abstract int getPort(); public abstract String getI2P(); public abstract Tunnel start(); @@ -228,7 +228,7 @@ public class TunnelControl implements Runnable { @Override public String getType() { return "client"; } @Override public String getHost() { return "localhost"; } - @Override public String getPort() { return port+""; } + @Override public int getPort() { return port; } @Override public String getI2P() { return dest; } } @@ -250,7 +250,7 @@ public class TunnelControl implements Runnable { @Override public String getType() { return "http"; } @Override public String getHost() { return "localhost"; } - @Override public String getPort() { return port+""; } + @Override public int getPort() { return port; } @Override public String getI2P() { return "n/a"; } } public static class ServerTunnel extends Tunnel { @@ -296,7 +296,7 @@ public class TunnelControl implements Runnable { @Override public String getType() { return "server"; } @Override public String getHost() { return host; } - @Override public String getPort() { return port+""; } + @Override public int getPort() { return port; } @Override public String getI2P() { return dest; } } @@ -427,7 +427,7 @@ public class TunnelControl implements Runnable { @Override public String getType() { return "socks"; } @Override public String getHost() { return "localhost"; } - @Override public String getPort() { return port+""; } + @Override public int getPort() { return port; } @Override public String getI2P() { return "n/a"; } } @@ -485,6 +485,10 @@ public class TunnelControl implements Runnable { } } + + public boolean isPortAlreadyAssigned(int port) { + return tunnelList.tunnels.stream().anyMatch(t->!(t instanceof ServerTunnel) && t.getPort()!=port); + } @Override public void run() { @@ -552,10 +556,16 @@ public class TunnelControl implements Runnable { case "client.create": { String dest = args[1]; int port = Integer.parseInt(args[2]); - var clientTunnel = new ClientTunnel(dest, port, routerWrapper); - clientTunnel.start(); - tunnelList.addTunnel(clientTunnel); - out.println(clientTunnel.port); + + if(isPortAlreadyAssigned(port)) { + out.println("ERROR - PORT ALREADY ASSIGNED"); + } + else { + var clientTunnel = new ClientTunnel(dest, port, routerWrapper); + clientTunnel.start(); + tunnelList.addTunnel(clientTunnel); + out.println(clientTunnel.port); + } break; } @@ -579,8 +589,13 @@ public class TunnelControl implements Runnable { case "socks.create": { int port = Integer.parseInt(args[1]); - tunnelList.addTunnel(new SocksTunnel(port, routerWrapper).start()); - out.println("OK"); + if(isPortAlreadyAssigned(port)) { + out.println("ERROR - PORT ALREADY ASSIGNED"); + } + else { + tunnelList.addTunnel(new SocksTunnel(port, routerWrapper).start()); + out.println("OK"); + } break; } @@ -603,8 +618,15 @@ public class TunnelControl implements Runnable { case "http.create": { int port = Integer.parseInt(args[1]); - tunnelList.addTunnel(new HttpClientTunnel(port, routerWrapper).start()); - out.println("OK"); + + if(isPortAlreadyAssigned(port)) { + out.println("ERROR - PORT ALREADY ASSIGNED"); + } + else { + tunnelList.addTunnel(new HttpClientTunnel(port, routerWrapper).start()); + out.println("OK"); + } + break; }