internal override void MarshalToChain(DnsRecordChain chain) { int pointerOffset = Marshal.SizeOf(typeof(int)); int pointerSize = Marshal.SizeOf(typeof(IntPtr)); int recordLength = pointerOffset + pointerSize * _lines.Count; if (recordLength > ushort.MaxValue) throw new InvalidOperationException(); IntPtr record = MarshalBase(chain, DnsApi.DNS_TYPE_TEXT, (ushort)recordLength); IntPtr recordData = DnsRecordChain.GetDataPointer(record); Marshal.WriteInt32(recordData, 0, _lines.Count); for (int i = 0; i < _lines.Count; i++) { Marshal.WriteIntPtr(recordData, pointerOffset + pointerSize * i, chain.AllocatePoolUnicodeString(_lines[i])); } }
internal IntPtr MarshalBase(DnsRecordChain chain, ushort type, byte[] data) { return chain.PrependRecord(_name, type, _flags, _ttl, data); }
internal abstract void MarshalToChain(DnsRecordChain chain);
internal IntPtr MarshalBase(DnsRecordChain chain, ushort type, ushort dataLength) { return chain.PrependRecord(_name, type, dataLength, _flags, _ttl); }