1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty5.handler.codec.dns;
17
18 import io.netty5.buffer.api.Buffer;
19 import io.netty5.channel.ChannelHandlerContext;
20 import io.netty5.handler.codec.MessageToMessageEncoder;
21 import io.netty5.util.internal.UnstableApi;
22
23 import java.util.List;
24
25 import static java.util.Objects.requireNonNull;
26
27 @UnstableApi
28 public final class TcpDnsResponseEncoder extends MessageToMessageEncoder<DnsResponse> {
29 private final DnsRecordEncoder encoder;
30
31
32
33
34 public TcpDnsResponseEncoder() {
35 this(DnsRecordEncoder.DEFAULT);
36 }
37
38
39
40
41 public TcpDnsResponseEncoder(DnsRecordEncoder encoder) {
42 this.encoder = requireNonNull(encoder, "encoder");
43 }
44
45 @Override
46 public boolean isSharable() {
47 return true;
48 }
49
50 @Override
51 protected void encode(ChannelHandlerContext ctx, DnsResponse response, List<Object> out) throws Exception {
52 Buffer buf = ctx.bufferAllocator().allocate(1024);
53
54 buf.skipWritableBytes(2);
55 DnsMessageUtil.encodeDnsResponse(encoder, response, buf);
56 buf.setShort(0, (short) (buf.readableBytes() - 2));
57
58 out.add(buf);
59 }
60 }