summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/it_jaros/jns/scan/Scanner.java32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/main/java/com/it_jaros/jns/scan/Scanner.java b/src/main/java/com/it_jaros/jns/scan/Scanner.java
index 00cd937..9a62d52 100644
--- a/src/main/java/com/it_jaros/jns/scan/Scanner.java
+++ b/src/main/java/com/it_jaros/jns/scan/Scanner.java
@@ -4,6 +4,7 @@ import com.it_jaros.jns.scan.domain.ScanResult;
import com.it_jaros.jns.scan.engine.*;
import java.time.Duration;
+import java.util.Optional;
import java.util.concurrent.*;
import java.util.function.Consumer;
@@ -56,15 +57,7 @@ public class Scanner implements AutoCloseable {
if (poll instanceof PollState.Success<ScanResult>(ScanResult value)) {
consumer.accept(value);
} else if (poll instanceof PollState.Failure<ScanResult>(Throwable error)) {
- if (error instanceof RejectedExecutionException) {
- // happens when strg-c is pressed
- continue;
- }
- if (error instanceof ScanHostException e) {
- consumer.accept(ScanResult.from(e));
- } else {
- consumer.accept(ScanResult.from(error));
- }
+ mapToScanResult(error).ifPresent(consumer);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
@@ -73,6 +66,27 @@ public class Scanner implements AutoCloseable {
scan.stop();
}
+ private Optional<ScanResult> mapToScanResult(Throwable error) {
+ if (error instanceof RejectedExecutionException) {
+ // happens when Ctrl-C is pressed
+ // we don't want to tell the user that
+ // the host had an error because it did
+ // not get executed. Actually it is not
+ // even an error
+ return Optional.empty();
+ }
+
+ if (error instanceof ScanHostException e) {
+ if (e.getCause() instanceof RejectedExecutionException) {
+ // see comment above
+ return Optional.empty();
+ }
+ return Optional.of(ScanResult.from(e));
+ }
+
+ return Optional.of(ScanResult.from(error));
+ }
+
private PollState<ScanResult> getHostResult(ProducerState<ScanResult> state) throws InterruptedException {
Future<ScanResult> finishedHost = state.completionService().poll(ProducerThread.pollInterval.toMillis(), TimeUnit.MILLISECONDS);
if (finishedHost == null) {