Home / Class/ DnsQueryEncoder Class — netty Architecture

DnsQueryEncoder Class — netty Architecture

Architecture documentation for the DnsQueryEncoder class in DnsQueryEncoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  b9e6a586_6476_174d_8cdd_54cd21da84c5["DnsQueryEncoder"]
  ed44b390_46b9_c7cf_428e_e4df819f35b8["DnsQueryEncoder.java"]
  b9e6a586_6476_174d_8cdd_54cd21da84c5 -->|defined in| ed44b390_46b9_c7cf_428e_e4df819f35b8
  e7cefaa8_a7b0_2ec2_74cb_af3e65ee4d8d["DnsQueryEncoder()"]
  b9e6a586_6476_174d_8cdd_54cd21da84c5 -->|method| e7cefaa8_a7b0_2ec2_74cb_af3e65ee4d8d
  2d010e28_617e_c98f_22cf_5e8918601cac["encode()"]
  b9e6a586_6476_174d_8cdd_54cd21da84c5 -->|method| 2d010e28_617e_c98f_22cf_5e8918601cac
  f65660b9_02fb_3e0d_ed22_e883b60c8ee1["encodeHeader()"]
  b9e6a586_6476_174d_8cdd_54cd21da84c5 -->|method| f65660b9_02fb_3e0d_ed22_e883b60c8ee1
  cc20eb8a_52af_2fbc_9587_fcec6c08add8["encodeQuestions()"]
  b9e6a586_6476_174d_8cdd_54cd21da84c5 -->|method| cc20eb8a_52af_2fbc_9587_fcec6c08add8
  2a2410f5_53ac_6288_0398_ebbad7f3ba60["encodeRecords()"]
  b9e6a586_6476_174d_8cdd_54cd21da84c5 -->|method| 2a2410f5_53ac_6288_0398_ebbad7f3ba60

Relationship Graph

Source Code

codec-dns/src/main/java/io/netty/handler/codec/dns/DnsQueryEncoder.java lines 22–75

final class DnsQueryEncoder {

    private final DnsRecordEncoder recordEncoder;

    /**
     * Creates a new encoder with the specified {@code recordEncoder}.
     */
    DnsQueryEncoder(DnsRecordEncoder recordEncoder) {
        this.recordEncoder = checkNotNull(recordEncoder, "recordEncoder");
    }

    /**
     * Encodes the given {@link DnsQuery} into a {@link ByteBuf}.
     */
    void encode(DnsQuery query, ByteBuf out) throws Exception {
        encodeHeader(query, out);
        encodeQuestions(query, out);
        encodeRecords(query, DnsSection.ADDITIONAL, out);
    }

    /**
     * Encodes the header that is always 12 bytes long.
     *
     * @param query the query header being encoded
     * @param buf   the buffer the encoded data should be written to
     */
    private static void encodeHeader(DnsQuery query, ByteBuf buf) {
        buf.writeShort(query.id());
        int flags = 0;
        flags |= (query.opCode().byteValue() & 0xFF) << 14;
        if (query.isRecursionDesired()) {
            flags |= 1 << 8;
        }
        buf.writeShort(flags);
        buf.writeShort(query.count(DnsSection.QUESTION));
        buf.writeShort(0); // answerCount
        buf.writeShort(0); // authorityResourceCount
        buf.writeShort(query.count(DnsSection.ADDITIONAL));
    }

    private void encodeQuestions(DnsQuery query, ByteBuf buf) throws Exception {
        final int count = query.count(DnsSection.QUESTION);
        for (int i = 0; i < count; i++) {
            recordEncoder.encodeQuestion((DnsQuestion) query.recordAt(DnsSection.QUESTION, i), buf);
        }
    }

    private void encodeRecords(DnsQuery query, DnsSection section, ByteBuf buf) throws Exception {
        final int count = query.count(section);
        for (int i = 0; i < count; i++) {
            recordEncoder.encodeRecord(query.recordAt(section, i), buf);
        }
    }
}

Frequently Asked Questions

What is the DnsQueryEncoder class?
DnsQueryEncoder is a class in the netty codebase, defined in codec-dns/src/main/java/io/netty/handler/codec/dns/DnsQueryEncoder.java.
Where is DnsQueryEncoder defined?
DnsQueryEncoder is defined in codec-dns/src/main/java/io/netty/handler/codec/dns/DnsQueryEncoder.java at line 22.

Analyze Your Own Codebase

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

Try Supermodel Free