com.subgraph.orchid.data.exitpolicy.ExitPorts Maven / Gradle / Ivy
package com.subgraph.orchid.data.exitpolicy;
import java.util.ArrayList;
import java.util.List;
/**
* Used by router status entries in consensus documents
*/
public class ExitPorts {
public static ExitPorts createAcceptExitPorts(String ports) {
final ExitPorts exitPorts = new ExitPorts(true);
exitPorts.parsePortRanges(ports);
return exitPorts;
}
public static ExitPorts createRejectExitPorts(String ports) {
final ExitPorts exitPorts = new ExitPorts(false);
exitPorts.parsePortRanges(ports);
return exitPorts;
}
private final List ranges = new ArrayList();
private final boolean areAcceptPorts;
private ExitPorts(boolean acceptPorts) {
this.areAcceptPorts = acceptPorts;
}
public boolean areAcceptPorts() {
return areAcceptPorts;
}
public boolean acceptsPort(int port) {
if(areAcceptPorts)
return contains(port);
else
return !contains(port);
}
public boolean contains(int port) {
for(PortRange r: ranges)
if(r.rangeContains(port))
return true;
return false;
}
private void parsePortRanges(String portRanges) {
final String[] args = portRanges.split(",");
for(String arg: args)
ranges.add(PortRange.createFromString(arg));
}
}