private static IDnsQuery NewQuery(DatagramPacket packet, IByteBuffer buffer) { int id = buffer.ReadUnsignedShort(); int flags = buffer.ReadUnsignedShort(); if (flags >> 15 == 1) { throw new CorruptedFrameException("not a query"); } IDnsQuery query = new DatagramDnsQuery( packet.Sender, packet.Recipient, id, DnsOpCode.From((byte)(flags >> 11 & 0xf))); query.IsRecursionDesired = (flags >> 8 & 1) == 1; query.Z = flags >> 4 & 0x7; return(query); }
private static IDnsResponse NewResponse(DatagramPacket packet, IByteBuffer buffer) { int id = buffer.ReadUnsignedShort(); int flags = buffer.ReadUnsignedShort(); if (flags >> 15 == 0) { throw new CorruptedFrameException("not a response"); } IDnsResponse response = new DatagramDnsResponse( packet.Sender, packet.Recipient, id, DnsOpCode.From((byte)(flags >> 1 & 0xf)), DnsResponseCode.From((byte)(flags & 0xf))); return(response); }
protected virtual IDnsResponse NewResponse(T sender, T recipient, int id, DnsOpCode opCode, DnsResponseCode responseCode) => new DefaultDnsResponse(id, opCode, responseCode);