Home / Function/ onResponse() — netty Function Reference

onResponse() — netty Function Reference

Architecture documentation for the onResponse() function in DnsResolveContext.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  6b22df1c_91b5_21bf_29f9_518f692074d4["onResponse()"]
  3bc002ec_f54e_a55f_0b37_77eac88c60db["DnsResolveContext"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|defined in| 3bc002ec_f54e_a55f_0b37_77eac88c60db
  07f53a31_718c_c4a3_04b0_19d21f5a6af4["query()"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|calls| 6b22df1c_91b5_21bf_29f9_518f692074d4
  65c57ffd_71d8_8f62_ab38_e8ff772695a7["handleRedirect()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| 65c57ffd_71d8_8f62_ab38_e8ff772695a7
  83b5f3ee_8078_cb8b_b707_9c1f58a2c6cb["onResponseCNAME()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| 83b5f3ee_8078_cb8b_b707_9c1f58a2c6cb
  e8e0f39e_4c0b_4101_2c4b_e74b1af9a114["buildAliasMap()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| e8e0f39e_4c0b_4101_2c4b_e74b1af9a114
  1ff8f220_55f4_0cc5_b454_65682e36be5e["onExpectedResponse()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| 1ff8f220_55f4_0cc5_b454_65682e36be5e
  07f53a31_718c_c4a3_04b0_19d21f5a6af4["query()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  b3885856_e061_0f3a_54d9_f9abe9613324["tryToFinishResolve()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| b3885856_e061_0f3a_54d9_f9abe9613324
  style 6b22df1c_91b5_21bf_29f9_518f692074d4 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java lines 610–678

    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, cause(code));
            } else {
                queryLifecycleObserver.queryFailed(NXDOMAIN_QUERY_FAILED_EXCEPTION);

                // Try with the next server if is not authoritative for the domain.
                //
                // From https://tools.ietf.org/html/rfc1035 :
                //
                //   RCODE        Response code - this 4 bit field is set as part of
                //                responses.  The values have the following
                //                interpretation:
                //
                //                ....
                //                ....
                //
                //                3               Name Error - Meaningful only for
                //                                responses from an authoritative name
                //                                server, this code signifies that the
                //                                domain name referenced in the query does
                //                                not exist.
                //                ....
                //                ....
                if (!res.isAuthoritativeAnswer()) {
                    query(nameServerAddrStream, nameServerAddrStreamIndex + 1, question,
                            newDnsQueryLifecycleObserver(question), true, promise, cause(code));
                } else {
                    // Failed with NX cause - distinction between NXDOMAIN vs a timeout
                    tryToFinishResolve(nameServerAddrStream, nameServerAddrStreamIndex, question,
                            queryLifecycleObserver, promise, NXDOMAIN_CAUSE_QUERY_FAILED_EXCEPTION);
                }
            }
        } finally {
            ReferenceCountUtil.safeRelease(envelope);
        }
    }

Subdomains

Called By

Frequently Asked Questions

What does onResponse() do?
onResponse() is a function in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java.
Where is onResponse() defined?
onResponse() is defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java at line 610.
What does onResponse() call?
onResponse() calls 6 function(s): buildAliasMap, handleRedirect, onExpectedResponse, onResponseCNAME, query, tryToFinishResolve.
What calls onResponse()?
onResponse() is called by 1 function(s): query.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free