57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
namespace DnsClient
|
|
{
|
|
public class DnsResponseHeader
|
|
{
|
|
private readonly ushort _flags = 0;
|
|
|
|
public int AdditionalCount { get; }
|
|
|
|
public int AnswerCount { get; }
|
|
|
|
public bool FutureUse => HasFlag(DnsHeaderFlag.FutureUse);
|
|
|
|
public bool HasAuthorityAnswer => HasFlag(DnsHeaderFlag.HasAuthorityAnswer);
|
|
|
|
public DnsHeaderFlag HeaderFlags => (DnsHeaderFlag)_flags;
|
|
|
|
public int Id { get; }
|
|
|
|
public bool IsAuthenticData => HasFlag(DnsHeaderFlag.IsAuthenticData);
|
|
|
|
public bool IsCheckingDisabled => HasFlag(DnsHeaderFlag.IsCheckingDisabled);
|
|
|
|
public bool HasQuery => HasFlag(DnsHeaderFlag.HasQuery);
|
|
|
|
public int NameServerCount { get; }
|
|
|
|
public DnsOpCode OPCode => (DnsOpCode)((DnsHeader.OPCODE_MASK & _flags) >> DnsHeader.OPCODE_SHIFT);
|
|
|
|
public int QuestionCount { get; }
|
|
|
|
public bool RecursionAvailable => HasFlag(DnsHeaderFlag.RecursionAvailable);
|
|
|
|
public DnsResponseCode ResponseCode => (DnsResponseCode)(_flags & DnsHeader.RCODE_MASK);
|
|
|
|
////ResponseCode {set
|
|
////{
|
|
//// _flags &= (ushort)~(DnsHeader.RCODE_MASK);
|
|
//// _flags |= (ushort)((ushort)value & DnsHeader.RCODE_MASK);
|
|
////}}
|
|
|
|
public bool ResultTruncated => HasFlag(DnsHeaderFlag.ResultTruncated);
|
|
|
|
public bool RecursionDesired => HasFlag(DnsHeaderFlag.RecursionDesired);
|
|
|
|
public DnsResponseHeader(int id, ushort flags, int questionCount, int answerCount, int additionalCount, int serverCount)
|
|
{
|
|
Id = id;
|
|
_flags = flags;
|
|
QuestionCount = questionCount;
|
|
AnswerCount = answerCount;
|
|
AdditionalCount = additionalCount;
|
|
NameServerCount = serverCount;
|
|
}
|
|
|
|
private bool HasFlag(DnsHeaderFlag flag) => (HeaderFlags & flag) != 0;
|
|
}
|
|
} |