コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }