1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.handler.codec.dns;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.channel.ChannelHandlerContext;
20 import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
21 import io.netty.util.internal.ObjectUtil;
22
23 public final class TcpDnsQueryDecoder extends LengthFieldBasedFrameDecoder {
24 private final DnsRecordDecoder decoder;
25
26
27
28
29 public TcpDnsQueryDecoder() {
30 this(DnsRecordDecoder.DEFAULT, 65535);
31 }
32
33
34
35
36 public TcpDnsQueryDecoder(DnsRecordDecoder decoder, int maxFrameLength) {
37 super(maxFrameLength, 0, 2, 0, 2);
38 this.decoder = ObjectUtil.checkNotNull(decoder, "decoder");
39 }
40
41 @Override
42 protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
43 ByteBuf frame = (ByteBuf) super.decode(ctx, in);
44 if (frame == null) {
45 return null;
46 }
47
48 return DnsMessageUtil.decodeDnsQuery(decoder, frame.slice(), new DnsMessageUtil.DnsQueryFactory() {
49 @Override
50 public DnsQuery newQuery(int id, DnsOpCode dnsOpCode) {
51 return new DefaultDnsQuery(id, dnsOpCode);
52 }
53 });
54 }
55 }