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.java18
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanPortException.java2
-rw-r--r--src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java1
3 files changed, 18 insertions, 3 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 82707d6..9e84c80 100644
--- a/src/main/java/com/it_jaros/jns/scan/Scanner.java
+++ b/src/main/java/com/it_jaros/jns/scan/Scanner.java
@@ -71,16 +71,32 @@ public class Scanner implements AutoCloseable {
}
if (error instanceof ScanHostException e) {
- if (e.getCause() instanceof RejectedExecutionException) {
+ if (isCauseChainInstanceOf(e, RejectedExecutionException.class, InterruptedException.class)) {
// see comment above
return Optional.empty();
}
+
return Optional.of(ScanResult.from(e));
}
return Optional.of(ScanResult.from(error));
}
+ private boolean isCauseChainInstanceOf(Throwable e, Class<?> ...classesToCheckFor) {
+ Throwable causeToCheckFor = e.getCause();
+ if (causeToCheckFor == null) {
+ return false;
+ }
+
+ for (Class<?> clazz : classesToCheckFor) {
+ if (clazz.isInstance(causeToCheckFor)) {
+ return true;
+ }
+ }
+
+ return isCauseChainInstanceOf(causeToCheckFor, classesToCheckFor);
+ }
+
public boolean awaitTermination(Duration duration) throws InterruptedException {
return executor.awaitTermination(duration.toMillis(), TimeUnit.MILLISECONDS);
}
diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortException.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortException.java
index 5c5389f..446bce7 100644
--- a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortException.java
+++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortException.java
@@ -1,6 +1,6 @@
package com.it_jaros.jns.scan.engine;
-public class ScanPortException extends RuntimeException {
+public class ScanPortException extends Exception {
public ScanPortException(int port, Exception e) {
super(String.valueOf(port), e);
}
diff --git a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java
index 64d3298..926bffc 100644
--- a/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java
+++ b/src/main/java/com/it_jaros/jns/scan/engine/ScanPortTask.java
@@ -57,7 +57,6 @@ public class ScanPortTask implements Callable<PortResult> {
socketLimit.release();
}
} catch (Exception e) {
- // think about how to handle that
throw new ScanPortException(port, e);
}
}