Home / Class/ DefaultDnsRecordEncoder Class — netty Architecture

DefaultDnsRecordEncoder Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  7acd50be_5ea0_6375_ac42_d023d53b4027["DefaultDnsRecordEncoder"]
  c60094d4_0731_610d_04ee_65468ca26a82["DefaultDnsRecordEncoder.java"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|defined in| c60094d4_0731_610d_04ee_65468ca26a82
  181d6964_7d19_f4c0_a143_5b2cac8c0c98["DefaultDnsRecordEncoder()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| 181d6964_7d19_f4c0_a143_5b2cac8c0c98
  c5b82983_b88f_76fd_3b19_1ea33e1f755a["encodeQuestion()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| c5b82983_b88f_76fd_3b19_1ea33e1f755a
  e69a3483_88a7_31ba_0c72_3a97b751f42a["encodeRecord()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| e69a3483_88a7_31ba_0c72_3a97b751f42a
  4433c7f7_f393_24fc_324a_800a9d0c2833["encodeRecord0()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| 4433c7f7_f393_24fc_324a_800a9d0c2833
  9d5c6029_6eac_332e_8312_4c4bdd661888["encodePtrRecord()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| 9d5c6029_6eac_332e_8312_4c4bdd661888
  e8fd3705_8e40_65a2_1e0e_463e4bced9d7["encodeOptPseudoRecord()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| e8fd3705_8e40_65a2_1e0e_463e4bced9d7
  e1aa726e_3571_f1cd_26ca_fe4a65acaf15["encodeOptEcsRecord()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| e1aa726e_3571_f1cd_26ca_fe4a65acaf15
  73402557_bece_7091_6c4d_50be4b96831a["calculateEcsAddressLength()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| 73402557_bece_7091_6c4d_50be4b96831a
  8509cb4d_2cce_673c_6c00_b36144a8367f["encodeRawRecord()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| 8509cb4d_2cce_673c_6c00_b36144a8367f
  a3084606_4c16_def9_683f_171e0f25d2e6["encodeName()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| a3084606_4c16_def9_683f_171e0f25d2e6
  5999e8f6_ef45_7750_d4c1_7a23377b4abf["padWithZeros()"]
  7acd50be_5ea0_6375_ac42_d023d53b4027 -->|method| 5999e8f6_ef45_7750_d4c1_7a23377b4abf

Relationship Graph

Source Code

codec-dns/src/main/java/io/netty/handler/codec/dns/DefaultDnsRecordEncoder.java lines 26–173

public class DefaultDnsRecordEncoder implements DnsRecordEncoder {
    private static final int PREFIX_MASK = Byte.SIZE - 1;

    /**
     * Creates a new instance.
     */
    protected DefaultDnsRecordEncoder() { }

    @Override
    public final void encodeQuestion(DnsQuestion question, ByteBuf out) throws Exception {
        encodeName(question.name(), out);
        out.writeShort(question.type().intValue());
        out.writeShort(question.dnsClass());
    }

    private static final Class<?>[] SUPPORTED_MESSAGES = new Class<?>[] {
            DnsQuestion.class, DnsPtrRecord.class,
            DnsOptEcsRecord.class, DnsOptPseudoRecord.class, DnsRawRecord.class };

    @Override
    public void encodeRecord(DnsRecord record, ByteBuf out) throws Exception {
        if (record instanceof DnsQuestion) {
            encodeQuestion((DnsQuestion) record, out);
        } else if (record instanceof DnsPtrRecord) {
            encodePtrRecord((DnsPtrRecord) record, out);
        } else if (record instanceof DnsOptEcsRecord) {
            encodeOptEcsRecord((DnsOptEcsRecord) record, out);
        } else if (record instanceof DnsOptPseudoRecord) {
            encodeOptPseudoRecord((DnsOptPseudoRecord) record, out);
        } else if (record instanceof DnsRawRecord) {
            encodeRawRecord((DnsRawRecord) record, out);
        } else {
            throw new UnsupportedMessageTypeException(record, SUPPORTED_MESSAGES);
        }
    }

    private void encodeRecord0(DnsRecord record, ByteBuf out) throws Exception {
        encodeName(record.name(), out);
        out.writeShort(record.type().intValue());
        out.writeShort(record.dnsClass());
        out.writeInt((int) record.timeToLive());
    }

    private void encodePtrRecord(DnsPtrRecord record, ByteBuf out) throws Exception {
        encodeRecord0(record, out);
        int writerIndex = out.writerIndex();
        // Skip 2 bytes as these will be used to encode the rdataLen after we know how many bytes were written.
        // See https://www.rfc-editor.org/rfc/rfc1035.html#section-3.2.1
        out.writerIndex(writerIndex + 2);
        encodeName(record.hostname(), out);
        int rdLength = out.writerIndex() - (writerIndex + 2);
        out.setShort(writerIndex, rdLength);
    }

    private void encodeOptPseudoRecord(DnsOptPseudoRecord record, ByteBuf out) throws Exception {
        encodeRecord0(record, out);
        out.writeShort(0);
    }

    private void encodeOptEcsRecord(DnsOptEcsRecord record, ByteBuf out) throws Exception {
        encodeRecord0(record, out);

        int sourcePrefixLength = record.sourcePrefixLength();
        int scopePrefixLength = record.scopePrefixLength();
        int lowOrderBitsToPreserve = sourcePrefixLength & PREFIX_MASK;

        byte[] bytes = record.address();
        int addressBits = bytes.length << 3;
        if (addressBits < sourcePrefixLength || sourcePrefixLength < 0) {
            throw new IllegalArgumentException(sourcePrefixLength + ": " +
                    sourcePrefixLength + " (expected: 0 >= " + addressBits + ')');
        }

        // See https://www.iana.org/assignments/address-family-numbers/address-family-numbers.xhtml
        final short addressNumber = (short) (bytes.length == 4 ? 1 : 2);
        int payloadLength = calculateEcsAddressLength(sourcePrefixLength, lowOrderBitsToPreserve);

        int fullPayloadLength = 2 + // OPTION-CODE
                2 + // OPTION-LENGTH
                2 + // FAMILY
                1 + // SOURCE PREFIX-LENGTH

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free