public DnsPacket(MemBlock Packet) {
ID = (short) ((Packet[0] << 8) + Packet[1]);
Query = (bool) (((Packet[2] & 0x80) >> 7) == 0);
Opcode = (byte) ((Packet[2] & 0x78) >> 3);
if((Packet[2] & 0x4) == 0x4) {
AA = true;
}
else {
AA = false;
}
if((Packet[2] & 0x1) == 0x1) {
RD = true;
}
else {
RD = false;
}
if((Packet[3] & 0x80) == 0x80) {
RA = true;
}
else {
RA = false;
}
int qdcount = (Packet[4] << 8) + Packet[5];
int ancount = (Packet[6] << 8) + Packet[7];
int nscount = (Packet[8] << 8) + Packet[9];
int arcount = (Packet[10] << 8) + Packet[11];
int idx = 12;
Questions = new Question[qdcount];
for(int i = 0; i < qdcount; i++) {
Questions[i] = new Question(Packet, idx);
idx += Questions[i].Packet.Length;
}
Answers = new Response[ancount];
for(int i = 0; i < ancount; i++) {
Answers[i] = new Response(Packet, idx);
idx += Answers[i].Packet.Length;
}
Authority = new Response[nscount];
for(int i = 0; i < nscount; i++) {
Authority[i] = new Response(Packet, idx);
idx += Authority[i].Packet.Length;
}
Additional = new Response[arcount];
for(int i = 0; i < arcount; i++) {
Additional[i] = new Response(Packet, idx);
idx += Additional[i].Packet.Length;
}
_icpacket = _packet = Packet;
}