package io.netty.handler.codec.dns;

import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.CorruptedFrameException;
import io.netty.util.CharsetUtil;

/* JADX INFO: loaded from: classes.dex */
public class DefaultDnsRecordDecoder implements DnsRecordDecoder {
    public static final String ROOT = ".";

    public static String decodeName(ByteBuf byteBuf) {
        int iWriterIndex = byteBuf.writerIndex();
        int i2 = byteBuf.readableBytes();
        if (i2 == 0) {
            return ROOT;
        }
        StringBuilder sb = new StringBuilder(i2 << 1);
        int i3 = 0;
        int i4 = -1;
        while (byteBuf.isReadable()) {
            short unsignedByte = byteBuf.readUnsignedByte();
            if (!((unsignedByte & 192) == 192)) {
                if (unsignedByte == 0) {
                    break;
                }
                if (!byteBuf.isReadable(unsignedByte)) {
                    throw new CorruptedFrameException("truncated label in a name");
                }
                sb.append(byteBuf.toString(byteBuf.readerIndex(), unsignedByte, CharsetUtil.UTF_8));
                sb.append('.');
                byteBuf.skipBytes(unsignedByte);
            } else {
                if (i4 == -1) {
                    i4 = byteBuf.readerIndex() + 1;
                }
                if (!byteBuf.isReadable()) {
                    throw new CorruptedFrameException("truncated pointer in a name");
                }
                int unsignedByte2 = ((unsignedByte & 63) << 8) | byteBuf.readUnsignedByte();
                if (unsignedByte2 >= iWriterIndex) {
                    throw new CorruptedFrameException("name has an out-of-range pointer");
                }
                byteBuf.readerIndex(unsignedByte2);
                i3 += 2;
                if (i3 >= iWriterIndex) {
                    throw new CorruptedFrameException("name contains a loop.");
                }
            }
        }
        if (i4 != -1) {
            byteBuf.readerIndex(i4);
        }
        if (sb.length() == 0) {
            return ROOT;
        }
        if (sb.charAt(sb.length() - 1) != '.') {
            sb.append('.');
        }
        return sb.toString();
    }

    public String decodeName0(ByteBuf byteBuf) {
        return decodeName(byteBuf);
    }

    @Override // io.netty.handler.codec.dns.DnsRecordDecoder
    public final DnsQuestion decodeQuestion(ByteBuf byteBuf) {
        return new DefaultDnsQuestion(decodeName(byteBuf), DnsRecordType.valueOf(byteBuf.readUnsignedShort()), byteBuf.readUnsignedShort());
    }

    @Override // io.netty.handler.codec.dns.DnsRecordDecoder
    public final <T extends DnsRecord> T decodeRecord(ByteBuf byteBuf) {
        int i2 = byteBuf.readerIndex();
        String strDecodeName = decodeName(byteBuf);
        int iWriterIndex = byteBuf.writerIndex();
        if (iWriterIndex - i2 < 10) {
            byteBuf.readerIndex(i2);
            return null;
        }
        DnsRecordType dnsRecordTypeValueOf = DnsRecordType.valueOf(byteBuf.readUnsignedShort());
        int unsignedShort = byteBuf.readUnsignedShort();
        long unsignedInt = byteBuf.readUnsignedInt();
        int unsignedShort2 = byteBuf.readUnsignedShort();
        int i3 = byteBuf.readerIndex();
        if (iWriterIndex - i3 < unsignedShort2) {
            byteBuf.readerIndex(i2);
            return null;
        }
        T t2 = (T) decodeRecord(strDecodeName, dnsRecordTypeValueOf, unsignedShort, unsignedInt, byteBuf, i3, unsignedShort2);
        byteBuf.readerIndex(i3 + unsignedShort2);
        return t2;
    }

    public DnsRecord decodeRecord(String str, DnsRecordType dnsRecordType, int i2, long j2, ByteBuf byteBuf, int i3, int i4) {
        return dnsRecordType == DnsRecordType.PTR ? new DefaultDnsPtrRecord(str, i2, j2, decodeName0(byteBuf.duplicate().setIndex(i3, i3 + i4))) : new DefaultDnsRawRecord(str, dnsRecordType, i2, j2, byteBuf.retainedDuplicate().setIndex(i3, i3 + i4));
    }
}
