prevent duplicate port assignment

pull/35/head
knaccc 5 years ago
parent 921c51ee7c
commit 1a52185ede

@ -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<T extends 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;
}

Loading…
Cancel
Save