internal int Write(byte[] buffer, int dnsOffset, DnsDomainNameCompressionData compressionData, int offsetInDns) { int num1 = 0; for (int startIndex = 0; startIndex != this.LabelsCount; ++startIndex) { ListSegment <DataSegment> labels = new ListSegment <DataSegment>((IList <DataSegment>) this._labels, startIndex); int offsetInDns1; if (compressionData.TryGetOffset(labels, out offsetInDns1)) { ByteArrayExtensions.Write(buffer, dnsOffset + offsetInDns + num1, (ushort)(49152U | (uint)(ushort)offsetInDns1), Endianity.Big); return(num1 + 2); } DataSegment dataSegment = labels[0]; compressionData.AddCompressionData(labels, offsetInDns + num1); ByteArrayExtensions.Write(buffer, dnsOffset + offsetInDns + num1, (byte)dataSegment.Length); int num2 = num1 + 1; dataSegment.Write(buffer, dnsOffset + offsetInDns + num2); num1 = num2 + dataSegment.Length; } return(num1 + 1); }
internal int Write(byte[] buffer, int dnsOffset, DnsDomainNameCompressionData compressionData, int offsetInDns) { int length = 0; for (int i = 0; i != LabelsCount; ++i) { ListSegment <DataSegment> labels = new ListSegment <DataSegment>(_labels, i); int pointerOffset; if (compressionData.TryGetOffset(labels, out pointerOffset)) { buffer.Write(dnsOffset + offsetInDns + length, (ushort)(CompressionMarker | (ushort)pointerOffset), Endianity.Big); return(length + sizeof(ushort)); } DataSegment currentLabel = labels[0]; compressionData.AddCompressionData(labels, offsetInDns + length); buffer.Write(dnsOffset + offsetInDns + length, (byte)currentLabel.Length); length += sizeof(byte); currentLabel.Write(buffer, dnsOffset + offsetInDns + length); length += currentLabel.Length; } return(length + sizeof(byte)); }