diff options
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/PortRange.java | 36 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/PortRangeIterator.java | 38 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/Scanner.java | 2 |
3 files changed, 42 insertions, 34 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/PortRange.java b/src/main/java/com/it_jaros/jscanner/PortRange.java index 9e66371..3a735c5 100644 --- a/src/main/java/com/it_jaros/jscanner/PortRange.java +++ b/src/main/java/com/it_jaros/jscanner/PortRange.java @@ -2,17 +2,12 @@ package com.it_jaros.jscanner; import java.util.BitSet; import java.util.Iterator; -import java.util.NoSuchElementException; -public class PortRange implements Iterator<Integer> { +public class PortRange { public static final int MIN_PORT = 1; public static final int MAX_PORT = 65535; private final BitSet specifiedPorts = new BitSet(MAX_PORT); - private final BitSet availablePorts = new BitSet(MAX_PORT); - - private int currentPortCursor; - private int done = 0; public PortRange(String ports) { if (ports == null || "".equals(ports)) { @@ -22,9 +17,6 @@ public class PortRange implements Iterator<Integer> { } else { parsePortRange(ports); } - - availablePorts.or(specifiedPorts); - currentPortCursor = availablePorts.nextSetBit(MIN_PORT); } /** @@ -80,29 +72,7 @@ public class PortRange implements Iterator<Integer> { } } - @Override - public Integer next() { - int p = availablePorts.nextSetBit(currentPortCursor); - if (p > 0) { - availablePorts.clear(p); - currentPortCursor = p + 1; - done++; - return p; - } - - throw new NoSuchElementException("Reached end of port range"); - } - - @Override - public boolean hasNext() { - return availablePorts.nextSetBit(currentPortCursor) > 0; - } - - public int getTotal() { - return specifiedPorts.cardinality(); - } - - public int getDone() { - return done; + public Iterator<Integer> iterator() { + return new PortRangeIterator(specifiedPorts); } }
\ No newline at end of file diff --git a/src/main/java/com/it_jaros/jscanner/PortRangeIterator.java b/src/main/java/com/it_jaros/jscanner/PortRangeIterator.java new file mode 100644 index 0000000..6690957 --- /dev/null +++ b/src/main/java/com/it_jaros/jscanner/PortRangeIterator.java @@ -0,0 +1,38 @@ +package com.it_jaros.jscanner; + +import java.util.BitSet; +import java.util.Iterator; +import java.util.NoSuchElementException; + +import static com.it_jaros.jscanner.PortRange.MAX_PORT; +import static com.it_jaros.jscanner.PortRange.MIN_PORT; + +public class PortRangeIterator implements Iterator<Integer> { + + private int currentPortCursor; + private int done = 0; + private final BitSet availablePorts = new BitSet(MAX_PORT); + + PortRangeIterator(BitSet specifiedPorts) { + availablePorts.or(specifiedPorts); + currentPortCursor = availablePorts.nextSetBit(MIN_PORT); + } + + @Override + public Integer next() { + int p = availablePorts.nextSetBit(currentPortCursor); + if (p > 0) { + availablePorts.clear(p); + currentPortCursor = p + 1; + done++; + return p; + } + + throw new NoSuchElementException("Reached end of port range"); + } + + @Override + public boolean hasNext() { + return availablePorts.nextSetBit(currentPortCursor) > 0; + } +} diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java index 1da20fd..d22e254 100644 --- a/src/main/java/com/it_jaros/jscanner/Scanner.java +++ b/src/main/java/com/it_jaros/jscanner/Scanner.java @@ -143,7 +143,7 @@ public class Scanner implements AutoCloseable { final AtomicLong portSlotFactory = new AtomicLong(System.nanoTime()); // producer thread ProducerState<PortResult> state = startProducer( - portRange, + portRange.iterator(), maxWorkersPerHost, port -> () -> { try { |
