Beispiel #1
0
        internal static DomainName Get(BackReferenceBinaryReader reader)
        {
            byte stringLength = reader.ReadByte();

            if (stringLength >> 6 == 3)
            {
                //In case of pointer
                ushort ptr;
                BinaryHelper.FromBytes(new byte[] { (byte)(stringLength - (3 << 6)), reader.ReadByte() }, out ptr);

                return(reader.Get <DomainName>(ptr));
            }
            else
            {
                DomainName dn = new DomainName();

                reader.Register((int)reader.BaseStream.Position - 1, dn);

                //stringLength = reader.ReadByte();
                if (stringLength != 0)
                {
                    dn.Add(Encoding.UTF8.GetString(reader.ReadBytes(stringLength), 0, stringLength));
                    //dn.Add(Encoding.UTF8.GetString(bytes, index + 1, bytes[index]));

                    dn.AddRange(DomainName.Get(reader));
                }
                //else
                //    index++;
                return(dn);
            }
        }
Beispiel #2
0
        public static DomainName FromBytes(byte[] bytes, ref int index)
        {
            if (bytes[index] >> 6 == 3)
            {
                //In case of pointer
                ushort ptr;
                bytes[index] -= 3 << 6;
                BinaryHelper.FromBytes(bytes, index, out ptr);
                bytes[index] += 3 << 6;
                index        += 2;
                ptr           = (ushort)(ptr << 2 >> 2);
                int iPtr = ptr;
                return(FromBytes(bytes, ref iPtr));
            }
            else
            {
                DomainName dn = new DomainName();

                if (bytes[index] != 0)
                {
                    dn.Add(Encoding.UTF8.GetString(bytes, index + 1, bytes[index]));
                    index += bytes[index] + 1;
                    dn.AddRange(DomainName.FromBytes(bytes, ref index));
                }
                else
                {
                    index++;
                }
                return(dn);
            }
        }
Beispiel #3
0
        internal static HostAddress Get(BinaryReader reader)
        {
            ushort byteCount;

            BinaryHelper.FromBytes(reader.ReadBytes(2), out byteCount);
            HostAddress ha = new HostAddress();

            ha.Address = new IPAddress(reader.ReadBytes(byteCount));
            return(ha);
        }
Beispiel #4
0
        public static Question FromBytes(byte[] bytes, ref int index)
        {
            Question q = new Question();

            q.DomainName = DomainName.FromBytes(bytes, ref index);
            ushort s;

            BinaryHelper.FromBytes(bytes, index, out s);
            index += 2;
            q.Type = (QType)s;
            BinaryHelper.FromBytes(bytes, index, out s);
            q.Class = (QClass)s;
            index  += 2;

            return(q);
        }