Esempio n. 1
0
 public DnsDomainNameCompressionData(DnsDomainNameCompressionMode domainNameCompressionMode)
 {
     this.DomainNameCompressionMode = domainNameCompressionMode;
 }
Esempio n. 2
0
        internal static void Write(byte[] buffer, int offset,
                                   ushort id, bool isResponse, DnsOpCode opCode, bool isAuthoritiveAnswer, bool isTruncated,
                                   bool isRecursionDesired, bool isRecursionAvailable, bool futureUse, bool isAuthenticData, bool isCheckingDisabled,
                                   DnsResponseCode responseCode, IList <DnsQueryResourceRecord> queries, IList <DnsDataResourceRecord> answers,
                                   IList <DnsDataResourceRecord> authorities, IList <DnsDataResourceRecord> additionals,
                                   DnsDomainNameCompressionMode domainNameCompressionMode)
        {
            buffer.Write(offset + Offset.Id, id, Endianity.Big);
            byte flags0 = 0;

            if (isResponse)
            {
                flags0 |= Mask.IsResponse;
            }
            flags0 |= (byte)((((byte)opCode) << Shift.OpCode) & Mask.OpCode);
            if (isAuthoritiveAnswer)
            {
                flags0 |= Mask.IsAuthoritiveAnswer;
            }
            if (isTruncated)
            {
                flags0 |= Mask.IsTruncated;
            }
            if (isRecursionDesired)
            {
                flags0 |= Mask.IsRecusionDesired;
            }
            buffer.Write(offset + Offset.IsResponse, flags0);
            byte flags1 = 0;

            if (isRecursionAvailable)
            {
                flags1 |= Mask.IsRecursionAvailable;
            }
            if (futureUse)
            {
                flags1 |= Mask.FutureUse;
            }
            if (isAuthenticData)
            {
                flags1 |= Mask.IsAuthenticData;
            }
            if (isCheckingDisabled)
            {
                flags1 |= Mask.IsCheckingDisabled;
            }
            flags1 |= (byte)((ushort)responseCode & Mask.ResponseCode);
            buffer.Write(offset + Offset.IsRecusionAvailable, flags1);
            DnsDomainNameCompressionData compressionData = new DnsDomainNameCompressionData(domainNameCompressionMode);
            int recordOffset = HeaderLength;

            if (queries != null)
            {
                buffer.Write(offset + Offset.QueryCount, (ushort)queries.Count, Endianity.Big);
                foreach (DnsQueryResourceRecord record in queries)
                {
                    recordOffset += record.Write(buffer, offset, compressionData, recordOffset);
                }
            }
            if (answers != null)
            {
                buffer.Write(offset + Offset.AnswerCount, (ushort)answers.Count, Endianity.Big);
                foreach (DnsDataResourceRecord record in answers)
                {
                    recordOffset += record.Write(buffer, offset, compressionData, recordOffset);
                }
            }
            if (authorities != null)
            {
                buffer.Write(offset + Offset.AuthorityCount, (ushort)authorities.Count, Endianity.Big);
                foreach (DnsDataResourceRecord record in authorities)
                {
                    recordOffset += record.Write(buffer, offset, compressionData, recordOffset);
                }
            }
            if (additionals != null)
            {
                buffer.Write(offset + Offset.AdditionalCount, (ushort)additionals.Count, Endianity.Big);
                foreach (DnsDataResourceRecord record in additionals)
                {
                    recordOffset += record.Write(buffer, offset, compressionData, recordOffset);
                }
            }
        }
Esempio n. 3
0
        internal static int GetLength(IEnumerable <DnsResourceRecord> resourceRecords, DnsDomainNameCompressionMode domainNameCompressionMode)
        {
            int length = HeaderLength;
            DnsDomainNameCompressionData compressionData = new DnsDomainNameCompressionData(domainNameCompressionMode);

            if (resourceRecords != null)
            {
                foreach (DnsResourceRecord record in resourceRecords)
                {
                    length += record.GetLength(compressionData, length);
                }
            }

            return(length);
        }
Esempio n. 4
0
        internal static void Write(byte[] buffer, int offset, ushort id, bool isResponse,
                                   DnsOpCode opCode,
                                   bool isAuthoritiveAnswer, bool isTruncated, bool isRecursionDesired, bool isRecursionAvailable,
                                   bool futureUse, bool isAuthenticData, bool isCheckingDisabled,
                                   DnsResponseCode responseCode,
                                   IList <DnsQueryResourceRecord> queries, IList <DnsDataResourceRecord> answers,
                                   IList <DnsDataResourceRecord> authorities, IList <DnsDataResourceRecord> additionals,
                                   DnsDomainNameCompressionMode domainNameCompressionMode)
        {
            ByteArrayExtensions.Write(buffer, offset, id, Endianity.Big);
            byte num1 = (byte)0;

            if (isResponse)
            {
                num1 |= (byte)sbyte.MinValue;
            }
            byte num2 = (byte)((uint)num1 | (uint)(byte)((int)opCode << 3 & 120));

            if (isAuthoritiveAnswer)
            {
                num2 |= (byte)4;
            }
            if (isTruncated)
            {
                num2 |= (byte)2;
            }
            if (isRecursionDesired)
            {
                num2 |= (byte)1;
            }
            ByteArrayExtensions.Write(buffer, offset + 2, num2);
            byte num3 = (byte)0;

            if (isRecursionAvailable)
            {
                num3 |= (byte)sbyte.MinValue;
            }
            if (futureUse)
            {
                num3 |= (byte)64;
            }
            if (isAuthenticData)
            {
                num3 |= (byte)32;
            }
            if (isCheckingDisabled)
            {
                num3 |= (byte)16;
            }
            byte num4 = (byte)((uint)num3 | (uint)(byte)(responseCode & (DnsResponseCode)15));

            ByteArrayExtensions.Write(buffer, offset + 3, num4);
            DnsDomainNameCompressionData compressionData = new DnsDomainNameCompressionData(domainNameCompressionMode);
            int offsetInDns = 12;

            if (queries != null)
            {
                ByteArrayExtensions.Write(buffer, offset + 4, (ushort)queries.Count, Endianity.Big);
                foreach (DnsQueryResourceRecord queryResourceRecord in (IEnumerable <DnsQueryResourceRecord>)queries)
                {
                    offsetInDns += queryResourceRecord.Write(buffer, offset, compressionData, offsetInDns);
                }
            }
            if (answers != null)
            {
                ByteArrayExtensions.Write(buffer, offset + 6, (ushort)answers.Count, Endianity.Big);
                foreach (DnsDataResourceRecord dataResourceRecord in (IEnumerable <DnsDataResourceRecord>)answers)
                {
                    offsetInDns += dataResourceRecord.Write(buffer, offset, compressionData, offsetInDns);
                }
            }
            if (authorities != null)
            {
                ByteArrayExtensions.Write(buffer, offset + 8, (ushort)authorities.Count, Endianity.Big);
                foreach (DnsDataResourceRecord dataResourceRecord in (IEnumerable <DnsDataResourceRecord>)authorities)
                {
                    offsetInDns += dataResourceRecord.Write(buffer, offset, compressionData, offsetInDns);
                }
            }
            if (additionals == null)
            {
                return;
            }
            ByteArrayExtensions.Write(buffer, offset + 10, (ushort)additionals.Count, Endianity.Big);
            foreach (DnsDataResourceRecord dataResourceRecord in (IEnumerable <DnsDataResourceRecord>)additionals)
            {
                offsetInDns += dataResourceRecord.Write(buffer, offset, compressionData, offsetInDns);
            }
        }
Esempio n. 5
0
        internal static int GetLength(IEnumerable <DnsResourceRecord> resourceRecords, DnsDomainNameCompressionMode domainNameCompressionMode)
        {
            int offsetInDns = 12;
            DnsDomainNameCompressionData compressionData = new DnsDomainNameCompressionData(domainNameCompressionMode);

            if (resourceRecords != null)
            {
                foreach (DnsResourceRecord dnsResourceRecord in resourceRecords)
                {
                    offsetInDns += dnsResourceRecord.GetLength(compressionData, offsetInDns);
                }
            }
            return(offsetInDns);
        }
 public DnsDomainNameCompressionData(DnsDomainNameCompressionMode domainNameCompressionMode)
 {
     DomainNameCompressionMode = domainNameCompressionMode;
 }