Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }