public void execute()

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);
    }