summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/it_jaros/jscanner/PortRange.java36
-rw-r--r--src/main/java/com/it_jaros/jscanner/PortRangeIterator.java38
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scanner.java2
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 {