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
Source
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