private void handleCont()

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