summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-08-04 15:43:22 +0200
committerGravatar Matthias Jaros <jarlucmat@mailbox.org>2026-08-04 15:43:22 +0200
commit32f76cd94b023586a5cf89517b962733e91db66c (patch)
treef65232a20b5db260f76768d740416bc04f8e479e /src
parent9b23dc48c637881c11c24fc7082186490913cba2 (diff)
Added proper tracking methods instead of using raw counters everywhere
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scan.java38
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scanner.java30
2 files changed, 51 insertions, 17 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/Scan.java b/src/main/java/com/it_jaros/jscanner/Scan.java
index 3bd62bd..8321783 100644
--- a/src/main/java/com/it_jaros/jscanner/Scan.java
+++ b/src/main/java/com/it_jaros/jscanner/Scan.java
@@ -17,6 +17,7 @@ public class Scan {
private final Runnable onDone;
private final Counter hostCounter;
private final Counter hostTotalCounter;
+ private final Counter portTotalCounter;
private final Counter socketCounter;
private final Counter threadCounter;
private long start = 0;
@@ -32,6 +33,7 @@ public class Scan {
this.onDone = onDone;
this.hostCounter = new Counter();
this.hostTotalCounter = new Counter();
+ this.portTotalCounter = new Counter();
this.socketCounter = new Counter();
this.threadCounter = new Counter();
}
@@ -123,4 +125,40 @@ public class Scan {
}
return stop - start;
}
+
+ public void portStart() {
+ this.portTotalCounter.inc();
+ this.threadCounter.inc();
+ }
+
+ public void portFinish() {
+ this.threadCounter.dec();
+ }
+
+ public void hostStart() {
+ this.hostCounter.inc();
+ this.hostTotalCounter.inc();
+ this.threadCounter.inc();
+ }
+
+ public void hostFinish() {
+ this.threadCounter.dec();
+ this.hostCounter.dec();
+ }
+
+ public void socketStart() {
+ this.socketCounter.inc();
+ }
+
+ public void socketFinish() {
+ this.socketCounter.dec();
+ }
+
+ public void producerStart() {
+ this.threadCounter.inc();
+ }
+
+ public void producerStop() {
+ this.threadCounter.dec();
+ }
}
diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java
index f5f12a7..664723f 100644
--- a/src/main/java/com/it_jaros/jscanner/Scanner.java
+++ b/src/main/java/com/it_jaros/jscanner/Scanner.java
@@ -62,11 +62,11 @@ public class Scanner implements AutoCloseable {
scan.start();
// start producer thread
+ scan.producerStart();
final ProducerState<ScanResult> state = startProducer(
scan.getHosts().iterator(),
maxHostsLimit,
- host -> new ScanHostTask(scan, host),
- scan.getThreadCounter()
+ host -> new ScanHostTask(scan, host)
);
// the main thread is the consumer
@@ -87,6 +87,7 @@ public class Scanner implements AutoCloseable {
Thread.currentThread().interrupt();
}
}
+ scan.producerStop();
scan.stop();
}
@@ -123,8 +124,7 @@ public class Scanner implements AutoCloseable {
private <INPUT, OUTPUT> ProducerState<OUTPUT> startProducer(
Iterator<INPUT> queue,
int maxWorkers,
- Function<INPUT, Callable<OUTPUT>> taskFactory,
- Counter threadCounter
+ Function<INPUT, Callable<OUTPUT>> taskFactory
) {
final AtomicInteger inPipeline = new AtomicInteger(0);
final AtomicBoolean running = new AtomicBoolean(true);
@@ -132,7 +132,6 @@ public class Scanner implements AutoCloseable {
CompletionService<OUTPUT> completionService = new ExecutorCompletionService<>(executor);
executor.submit(() -> {
try {
- threadCounter.inc();
while (!cancelled && queue.hasNext()) {
// get semaphore and remember if task got submitted
// so in case we fail to submit we release the semaphore
@@ -166,7 +165,6 @@ public class Scanner implements AutoCloseable {
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
- threadCounter.dec();
running.set(false);
}
});
@@ -211,16 +209,13 @@ public class Scanner implements AutoCloseable {
@Override
public ScanResult call() {
try {
- scan.getThreadCounter().inc();
- scan.getHostCounter().inc();
- scan.getHostTotalCounter().inc();
+ scan.hostStart();
if (cancelled) {
return ScanResult.empty(host);
}
return scanHostPorts();
} finally {
- scan.getThreadCounter().dec();
- scan.getHostCounter().dec();
+ scan.hostFinish();
}
}
@@ -232,11 +227,11 @@ public class Scanner implements AutoCloseable {
final PortRange portRange = new PortRange(scan.getPorts());
// producer thread
+ scan.producerStart();
ProducerState<PortResult> state = startProducer(
portRange.iterator(),
maxWorkersPerHost,
- port -> new ScanPortTask(host, port, scan, rateLimiter),
- scan.getThreadCounter()
+ port -> new ScanPortTask(host, port, scan, rateLimiter)
);
// consumer is the main thread
@@ -255,6 +250,7 @@ public class Scanner implements AutoCloseable {
Thread.currentThread().interrupt();
}
}
+ scan.producerStop();
return accumulator.build();
}
@@ -333,14 +329,14 @@ public class Scanner implements AutoCloseable {
@Override
public PortResult call() throws Exception {
try {
- scan.getThreadCounter().inc();
+ scan.portStart();
portScanRateLimiter.apply();
if (cancelled) {
return PortResult.empty();
}
return checkPort();
} finally {
- scan.getThreadCounter().dec();
+ scan.portFinish();
}
}
@@ -350,7 +346,7 @@ public class Scanner implements AutoCloseable {
result.setState(PortState.UNKNOWN);
socketLimit.acquire();
- scan.getSocketCounter().inc();
+ scan.socketStart();
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(host, port), timeoutInMillis);
result.setState(PortState.OPEN);
@@ -367,7 +363,7 @@ public class Scanner implements AutoCloseable {
} catch (IOException e) {
result.setException(e);
} finally {
- scan.getSocketCounter().dec();
+ scan.socketFinish();
socketLimit.release();
}