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); } }
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); } }
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); }
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); }