Esempio n. 1
0
 public int Write(byte[] !buffer, ref int offset)
 {
     offset += LabelEncoding.PutBytes(Name, buffer, offset);
     offset += NetworkBitConverter.PutBytes((ushort)Type,
                                            buffer, offset);
     offset += NetworkBitConverter.PutBytes((ushort)Class,
                                            buffer, offset);
     return(offset);
 }
Esempio n. 2
0
        public static ResourceRecord Parse(byte [] !buffer, ref int offset)
        {
            string name;

            if ((buffer[offset] & 0xc0) == 0xc0)
            {
                // Detected compression.  Name is at offset in
                // lower 14 bits of next 2 bytes.
                int start = NetworkBitConverter.ToInt16(buffer, offset);
                if (LabelEncoding.GetString(buffer, start & 0x3fff,
                                            out name) == 0)
                {
                    throw new InvalidDnsFormatException("name");
                }
                offset += 2;
            }
            else
            {
                int used = LabelEncoding.GetString(buffer, offset, out name);
                if (used == 0)
                {
                    throw new InvalidDnsFormatException("name");
                }
                offset += used;
            }

            ushort rType = NetworkBitConverter.ToUInt16(buffer, offset);

            offset += 2;

            ushort rClass = NetworkBitConverter.ToUInt16(buffer, offset);

            offset += 2;

            uint ttlSeconds = NetworkBitConverter.ToUInt32(buffer, offset);

            offset += 4;

            ushort rdataLength = NetworkBitConverter.ToUInt16(buffer, offset);

            offset += 2;

            byte [] rdata = new byte[rdataLength];
            Array.Copy(buffer, offset, rdata, 0, rdataLength);
            offset += rdataLength;

            return(new ResourceRecord(name, (Type)rType, (Class)rClass,
                                      ttlSeconds, rdata));
        }
Esempio n. 3
0
        public static Query !Parse(byte [] !buffer, ref int offset)
        {
            string name;

            int used = LabelEncoding.GetString(buffer, offset, out name);

            if (used == 0)
            {
                throw new InvalidDnsFormatException("name");
            }
            offset += used;

            ushort qType = NetworkBitConverter.ToUInt16(buffer, offset);

            offset += 2;

            ushort qClass = NetworkBitConverter.ToUInt16(buffer, offset);

            offset += 2;

            return(new Query(name, (Type)qType, (Class)qClass));
        }
Esempio n. 4
0
        public int Write(byte [] !buffer, ref int offset)
        {
            offset += LabelEncoding.PutBytes(Name, buffer, offset);
            offset += NetworkBitConverter.PutBytes((ushort)Type,
                                                   buffer, offset);
            offset += NetworkBitConverter.PutBytes((ushort)Class,
                                                   buffer, offset);
            offset += NetworkBitConverter.PutBytes(TtlSeconds, buffer, offset);

            if (RData == null)
            {
                offset += NetworkBitConverter.PutBytes((ushort)0,
                                                       buffer, offset);
            }
            else
            {
                offset += NetworkBitConverter.PutBytes((ushort)RData.Length,
                                                       buffer, offset);
                RData.CopyTo(buffer, offset);
                offset += RData.Length;
            }
            return(offset);
        }