public static IMessage Deserialize(ref byte[] Raw) { var Stream = new DnStream(ref Raw); var Message = new Message { ID = Stream.GetUShort(), MessageType = Stream.GetBit().AsEnum <MessageType>(), OperationCode = Stream.GetBits(4).AsEnum <OperationCode>(), AuthoritativeAnswer = Stream.GetBit().AsEnum <AuthoritativeAnswer>(), Truncated = Stream.GetBit().AsBool(), RecursionDesired = Stream.GetBit().AsBool(), RecursionAvailable = Stream.GetBit().AsBool(), Zero = Stream.GetBit(), AuthenticatedData = Stream.GetBit().AsBool(), CheckingDisabled = Stream.GetBit().AsBool(), ResponseCode = Stream.GetBits(4).AsEnum <ResponseCode>(), QuestionsCount = Stream.GetUShort(), AnswersCount = Stream.GetUShort(), AuthorityCount = Stream.GetUShort(), AdditionalCount = Stream.GetUShort() }; Message.Questions = GetQuestions(ref Stream, Message.QuestionsCount); Message.Answers = GetAnswers(ref Stream, Message.AnswersCount); return(Message); }
private static IQuestion GetQuestion(ref DnStream Stream) { var Question = new Question() { Domain = GetDomain(ref Stream), Type = Stream.GetUShort().AsEnum <RecordType>(), Class = Stream.GetUShort().AsEnum <RecordClass>() }; return(Question); }
private static IAnswer GetAnswer(ref DnStream Stream) { var Answer = new Answer() { Domain = GetDomain(ref Stream), Type = Stream.GetUShort().AsEnum <RecordType>(), Class = Stream.GetUShort().AsEnum <RecordClass>(), TimeToLive = Stream.GetTimeSpan(), Length = Stream.GetUShort(), }; Answer.Record = GetRecord(ref Stream, Answer.Type); return(Answer); }