in resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java [74:118]
private void handleCont(SPFSession session, FutureSPFResult result, DNSLookupContinuation cont, SPFChecker checker) {
if (cont != null) {
// if the checker returns a continuation we return it
dnsProbe.getRecordsAsync(cont.getRequest())
.thenAccept(results -> {
try {
DNSLookupContinuation dnsLookupContinuation = cont.getListener().onDNSResponse(new DNSResponse(results), session);
handleCont(session, result, dnsLookupContinuation, checker);
} catch (PermErrorException | NoneException | TempErrorException | NeutralException e) {
handleError(session, e);
result.setSPFResult(session);
}
})
.exceptionally(e -> {
if (e instanceof CompletionException && e.getCause() != null) {
e = e.getCause();
}
if (e instanceof IOException && e.getMessage() != null && e.getMessage().startsWith("Timed out ")) {
e = new TimeoutException(e.getMessage());
}
if (e instanceof LookupFailedException) {
try {
DNSLookupContinuation dnsLookupContinuation = cont.getListener().onDNSResponse(new DNSResponse(new ArrayList<>()), session);
handleCont(session, result, dnsLookupContinuation, checker);
result.setSPFResult(session);
return null;
} catch (PermErrorException | NoneException | TempErrorException | NeutralException ex2) {
handleError(session, ex2);
result.setSPFResult(session);
return null;
}
}
if (e instanceof TimeoutException) {
handleTimeout(cont, new DNSResponse((TimeoutException) e), session, result, checker);
result.setSPFResult(session);
return null;
}
handleError(session, e);
result.setSPFResult(session);
return null;
});
} else {
execute(session, result);
}
}