public DnsDomainNameCompressionData(DnsDomainNameCompressionMode domainNameCompressionMode) { this.DomainNameCompressionMode = domainNameCompressionMode; }
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); } } }
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); }
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); } }
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; }