public Response(MemBlock Data, int Start) {
int idx = 0;
NameBlob = DnsPacket.RetrieveBlob(Data, Start, out idx);
int type = (Data[idx++] << 8) + Data[idx++];
Type = (DnsPacket.Types) type;
CacheFlush = ((Data[idx] & 0x80) == 0x80) ? true : false;
int rclass = ((Data[idx++] << 8) & 0x7F) + Data[idx++];
Class = (DnsPacket.Classes) rclass;
Ttl = (Data[idx++] << 24);
Ttl |= (Data[idx++] << 16);
Ttl |= (Data[idx++] << 8);
Ttl |= (Data[idx++]);
RdLength = (short) ((Data[idx++] << 8) + Data[idx++]);
RDataBlob = Data.Slice(idx, RdLength);
if(Type == DnsPacket.Types.Ptr) {
try {
Name = DnsPacket.PtrMemBlockToString(NameBlob);
}
catch {
Name = DnsPacket.HostnameMemBlockToString(NameBlob);
}
int End = 0;
RDataBlob = DnsPacket.RetrieveBlob(Data, idx, out End);
RData = DnsPacket.HostnameMemBlockToString(RDataBlob);
}
else if(Type == DnsPacket.Types.A) {
Name = DnsPacket.HostnameMemBlockToString(NameBlob);
RData = DnsPacket.IPMemBlockToString(RDataBlob);
}
_icpacket = _packet = Data.Slice(Start, idx + RdLength - Start);
}
}