TestDnsProtocolUdpCodecFactory Class — netty Architecture
Architecture documentation for the TestDnsProtocolUdpCodecFactory class in TestDnsServer.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 46c35087_32cd_5c67_6e42_ca3ad96d5f51["TestDnsProtocolUdpCodecFactory"] 671a7057_027f_0237_34ae_461bd20152cd["TestDnsServer.java"] 46c35087_32cd_5c67_6e42_ca3ad96d5f51 -->|defined in| 671a7057_027f_0237_34ae_461bd20152cd 6b3f6b6d_f236_cc74_572f_03587eb4e906["TestDnsProtocolUdpCodecFactory()"] 46c35087_32cd_5c67_6e42_ca3ad96d5f51 -->|method| 6b3f6b6d_f236_cc74_572f_03587eb4e906 56f26f02_7b3e_ca8c_d994_426f7876088b["ProtocolEncoder()"] 46c35087_32cd_5c67_6e42_ca3ad96d5f51 -->|method| 56f26f02_7b3e_ca8c_d994_426f7876088b 3d7e226c_17fa_6c68_7d1d_52a3348a5132["encodeAAAA()"] 46c35087_32cd_5c67_6e42_ca3ad96d5f51 -->|method| 3d7e226c_17fa_6c68_7d1d_52a3348a5132 f69c4737_5b67_f746_e057_af2242bb0f3f["ProtocolDecoder()"] 46c35087_32cd_5c67_6e42_ca3ad96d5f51 -->|method| f69c4737_5b67_f746_e057_af2242bb0f3f
Relationship Graph
Source Code
resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java lines 156–236
private final class TestDnsProtocolUdpCodecFactory implements ProtocolCodecFactory {
private final DnsMessageEncoder encoder = new DnsMessageEncoder();
private final TestAAAARecordEncoder recordEncoder = new TestAAAARecordEncoder();
private final RecordType dropRecordType;
TestDnsProtocolUdpCodecFactory(RecordType dropRecordType) {
this.dropRecordType = dropRecordType;
}
@Override
public ProtocolEncoder getEncoder(IoSession session) {
return new DnsUdpEncoder() {
@Override
public void encode(IoSession session, Object message, ProtocolEncoderOutput out) {
IoBuffer buf = IoBuffer.allocate(4096);
DnsMessage dnsMessage = filterMessage((DnsMessage) message);
if (dnsMessage != null) {
encoder.encode(buf, dnsMessage);
encodeAAAA(dnsMessage.getAnswerRecords(), buf);
encodeAAAA(dnsMessage.getAuthorityRecords(), buf);
encodeAAAA(dnsMessage.getAdditionalRecords(), buf);
buf.flip();
out.write(buf);
}
}
};
}
private void encodeAAAA(List<ResourceRecord> records, IoBuffer out) {
for (ResourceRecord record : records) {
// This is a hack to allow to also test for AAAA resolution as DnsMessageEncoder
// does not support it and it is hard to extend, because the interesting methods
// are private...
// In case of RecordType.AAAA we need to encode the RecordType by ourselves.
if (record.getRecordType() == RecordType.AAAA) {
try {
recordEncoder.put(out, record);
} catch (IOException e) {
// Should never happen
throw new IllegalStateException(e);
}
}
}
}
@Override
public ProtocolDecoder getDecoder(IoSession session) {
return new ProtocolDecoderAdapter() {
private final DnsMessageDecoder decoder = new DnsMessageDecoder();
@Override
public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws IOException {
DnsMessage message = decoder.decode(in);
if (dropRecordType != null) {
for (QuestionRecord record: message.getQuestionRecords()) {
if (record.getRecordType() == dropRecordType) {
return;
}
}
}
out.write(message);
}
};
}
private final class TestAAAARecordEncoder extends ResourceRecordEncoder {
@Override
protected void putResourceRecordData(IoBuffer ioBuffer, ResourceRecord resourceRecord) {
byte[] bytes = BYTES.get(resourceRecord.get(DnsAttribute.IP_ADDRESS));
if (bytes == null) {
throw new IllegalStateException(resourceRecord.get(DnsAttribute.IP_ADDRESS));
}
// encode the ::1
ioBuffer.put(bytes);
}
}
}
Source
Frequently Asked Questions
What is the TestDnsProtocolUdpCodecFactory class?
TestDnsProtocolUdpCodecFactory is a class in the netty codebase, defined in resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java.
Where is TestDnsProtocolUdpCodecFactory defined?
TestDnsProtocolUdpCodecFactory is defined in resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java at line 156.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free