示例#1
0
        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]));
            }
        }
示例#2
0
 internal IntPtr MarshalBase(DnsRecordChain chain, ushort type, byte[] data)
 {
     return chain.PrependRecord(_name, type, _flags, _ttl, data);
 }
示例#3
0
 internal abstract void MarshalToChain(DnsRecordChain chain);
示例#4
0
 internal IntPtr MarshalBase(DnsRecordChain chain, ushort type, ushort dataLength)
 {
     return chain.PrependRecord(_name, type, dataLength, _flags, _ttl);
 }