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.AddressedEnvelope;
20 import io.netty5.channel.ChannelHandlerContext;
21 import io.netty5.channel.socket.DatagramPacket;
22 import io.netty5.handler.codec.MessageToMessageEncoder;
23 import io.netty5.util.internal.UnstableApi;
24
25 import java.net.InetSocketAddress;
26 import java.util.List;
27
28
29
30
31
32 @UnstableApi
33 public class DatagramDnsQueryEncoder extends MessageToMessageEncoder<AddressedEnvelope<DnsQuery, InetSocketAddress>> {
34
35 private final DnsQueryEncoder encoder;
36
37
38
39
40 public DatagramDnsQueryEncoder() {
41 this(DnsRecordEncoder.DEFAULT);
42 }
43
44
45
46
47 public DatagramDnsQueryEncoder(DnsRecordEncoder recordEncoder) {
48 encoder = new DnsQueryEncoder(recordEncoder);
49 }
50
51 @Override
52 public boolean isSharable() {
53 return true;
54 }
55
56 @Override
57 protected void encode(
58 ChannelHandlerContext ctx,
59 AddressedEnvelope<DnsQuery, InetSocketAddress> in, List<Object> out) throws Exception {
60
61 final InetSocketAddress recipient = in.recipient();
62 final DnsQuery query = in.content();
63 try (Buffer buf = allocateBuffer(ctx, in)) {
64 encoder.encode(query, buf);
65 out.add(new DatagramPacket(buf.split(), recipient, null));
66 }
67 }
68
69
70
71
72
73 protected Buffer allocateBuffer(
74 ChannelHandlerContext ctx,
75 @SuppressWarnings("unused") AddressedEnvelope<DnsQuery, InetSocketAddress> msg) throws Exception {
76 return ctx.bufferAllocator().allocate(1024);
77 }
78 }