diff options
Diffstat (limited to 'src')
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); } } |
