in resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java [52:86]
public void execute(SPFSession session, FutureSPFResult result) {
SPFChecker checker;
while ((checker = session.popChecker()) != null) {
// only execute checkers we added (better recursivity)
LOGGER.debug("Executing checker: {}", checker);
SPFChecker finalChecker = checker;
try {
DNSLookupContinuation cont = checker.checkSPF(session);
if (cont == null) {
continue;
}
// if the checker returns a continuation we return it
dnsProbe.getRecordsAsync(cont.getRequest())
.thenAccept(results -> {
try {
cont.getListener().onDNSResponse(new DNSResponse(results), session);
} catch (PermErrorException | NoneException | TempErrorException | NeutralException e) {
handleError(session, finalChecker, e);
}
})
.exceptionally(e -> {
if (e instanceof TimeoutException) {
handleTimeout(session, finalChecker, cont, (TimeoutException) e);
}
if (e.getCause() instanceof TimeoutException) {
handleTimeout(session, finalChecker, cont, (TimeoutException) e.getCause());
}
return null;
});
} catch (Exception e) {
handleError(session, checker, e);
}
}
result.setSPFResult(session);
}