Search in sources :

Example 1 with DnsResponseCode

use of io.netty.handler.codec.dns.DnsResponseCode in project netty by netty.

the class DnsNameResolverContext method onResponse.

void onResponse(final DnsServerAddressStream nameServerAddrStream, final DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, Promise<T> promise) {
    try {
        final DnsResponse res = envelope.content();
        final DnsResponseCode code = res.code();
        if (code == DnsResponseCode.NOERROR) {
            if (handleRedirect(question, envelope, promise)) {
                // Was a redirect so return here as everything else is handled in handleRedirect(...)
                return;
            }
            final DnsRecordType type = question.type();
            if (type == DnsRecordType.A || type == DnsRecordType.AAAA) {
                onResponseAorAAAA(type, question, envelope, promise);
            } else if (type == DnsRecordType.CNAME) {
                onResponseCNAME(question, envelope, promise);
            }
            return;
        }
        if (traceEnabled) {
            addTrace(envelope.sender(), "response code: " + code + " with " + res.count(DnsSection.ANSWER) + " answer(s) and " + res.count(DnsSection.AUTHORITY) + " authority resource(s)");
        }
        // Retry with the next server if the server did not tell us that the domain does not exist.
        if (code != DnsResponseCode.NXDOMAIN) {
            query(nameServerAddrStream, question, promise);
        }
    } finally {
        ReferenceCountUtil.safeRelease(envelope);
    }
}
Also used : DnsResponse(io.netty.handler.codec.dns.DnsResponse) DnsResponseCode(io.netty.handler.codec.dns.DnsResponseCode) DnsRecordType(io.netty.handler.codec.dns.DnsRecordType)

Example 2 with DnsResponseCode

use of io.netty.handler.codec.dns.DnsResponseCode in project netty by netty.

the class DnsResolveContext method onResponse.

private void onResponse(final DnsServerAddressStream nameServerAddrStream, final int nameServerAddrStreamIndex, final DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, final DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) {
    try {
        final DnsResponse res = envelope.content();
        final DnsResponseCode code = res.code();
        if (code == DnsResponseCode.NOERROR) {
            if (handleRedirect(question, envelope, queryLifecycleObserver, promise)) {
                // Was a redirect so return here as everything else is handled in handleRedirect(...)
                return;
            }
            final DnsRecordType type = question.type();
            if (type == DnsRecordType.CNAME) {
                onResponseCNAME(question, buildAliasMap(envelope.content(), cnameCache(), parent.executor()), queryLifecycleObserver, promise);
                return;
            }
            for (DnsRecordType expectedType : expectedTypes) {
                if (type == expectedType) {
                    onExpectedResponse(question, envelope, queryLifecycleObserver, promise);
                    return;
                }
            }
            queryLifecycleObserver.queryFailed(UNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION);
            return;
        }
        // Retry with the next server if the server did not tell us that the domain does not exist.
        if (code != DnsResponseCode.NXDOMAIN) {
            query(nameServerAddrStream, nameServerAddrStreamIndex + 1, question, queryLifecycleObserver.queryNoAnswer(code), true, promise, null);
        } else {
            queryLifecycleObserver.queryFailed(NXDOMAIN_QUERY_FAILED_EXCEPTION);
            // ....
            if (!res.isAuthoritativeAnswer()) {
                query(nameServerAddrStream, nameServerAddrStreamIndex + 1, question, newDnsQueryLifecycleObserver(question), true, promise, null);
            }
        }
    } finally {
        ReferenceCountUtil.safeRelease(envelope);
    }
}
Also used : DnsResponse(io.netty.handler.codec.dns.DnsResponse) DnsResponseCode(io.netty.handler.codec.dns.DnsResponseCode) DnsRecordType(io.netty.handler.codec.dns.DnsRecordType)

Aggregations

DnsRecordType (io.netty.handler.codec.dns.DnsRecordType)2 DnsResponse (io.netty.handler.codec.dns.DnsResponse)2 DnsResponseCode (io.netty.handler.codec.dns.DnsResponseCode)2