Beispiel #1
0
        public static ResourceRecord FromByteArray(byte[] data, int payloadBase, int offset, out int size)
        {
            int origOffset = offset;

            ResourceRecord rr = new ResourceRecord();

            int nameDataSize;

            rr.name = DnsName.FromByteArray(data, payloadBase, offset, out nameDataSize);
            offset += nameDataSize;

            rr.meta = Serialization.Deserialize <Meta>(data, offset, Marshal.SizeOf <Meta>());
            offset += Marshal.SizeOf <Meta>();

            //the use of pointer complicates things
            int recordDataReadSize = 0;

            switch ((RecordType)rr.meta.rType)
            {
            case RecordType.A:
                rr.data            = ResourceData.Address.FromByteArray(data, offset);
                recordDataReadSize = rr.data.Size;
                break;

            case RecordType.NS:
            case RecordType.PTR:
            case RecordType.CNAME:
                rr.data = ResourceData.NameEntry.FromByteArray((RecordType)rr.meta.rType, data, payloadBase, offset, out recordDataReadSize);
                break;

            case RecordType.MX:
                rr.data = ResourceData.MailExchange.FromByteArray(data, payloadBase, offset, out recordDataReadSize);
                break;

            case RecordType.SOA:
                rr.data = ResourceData.SOA.FromByteArray(data, payloadBase, offset, out recordDataReadSize);
                break;

            case RecordType.TXT:
                rr.data            = ResourceData.Text.FromByteArray(data, offset, rr.meta.rdLength);
                recordDataReadSize = rr.data.Size;
                break;

            default:
                rr.data            = ResourceData.Unknown.FromByteArray((UInt16)rr.meta.rType, data, offset, rr.meta.rdLength);
                recordDataReadSize = rr.data.Size;
                break;
            }
            offset += recordDataReadSize;

            size = offset - origOffset;
            return(rr);
        }
Beispiel #2
0
        public static Question FromByteArray(byte[] arr, int payloadBase, int offset, out int size)
        {
            Question ret = new Question();

            int nameDataSize;

            ret.name = DnsName.FromByteArray(arr, payloadBase, offset, out nameDataSize);
            offset  += nameDataSize;

            ret.meta = Serialization.Deserialize <Meta>(arr, offset, 4);

            size = 4 + nameDataSize;
            return(ret);
        }