private void VerifyHeader() { var buffer = new byte[UnicodeHeaderLength]; ReadBytes(buffer, 0, 28); Validate.Match(buffer.Segment(0, 4), MagicBytes, "Magic value invalid."); Validate.Match(buffer.Segment(8, 2), MagicClientBytes, "Magic client value invalid."); _fileVersion = BitConverter.ToUInt16(buffer, 10); Validate.Any(_fileVersion, SupportedVersions, "Found unsupported version."); ReadBytes(buffer, 28, (IsAnsi ? AnsiHeaderLength : UnicodeHeaderLength) - 28); var crcPartial = BitConverter.ToUInt32(buffer, 4); Validate.Match(crcPartial, Crc32.Calculate(buffer.Segment(8, 471)), "Partial CRC invalid."); var nbt = new Bref( BitConverter.ToUInt64(buffer, RootOffset + 36), BitConverter.ToUInt64(buffer, RootOffset + 44)); var bbt = new Bref( BitConverter.ToUInt64(buffer, RootOffset + 52), BitConverter.ToUInt64(buffer, RootOffset + 60)); _nbtReader = new BTreeReader <NbtEntry>(Stream, (long)nbt.Ib, seg => new NbtEntry(seg)); _bbtReader = new BTreeReader <BbtEntry>(Stream, (long)bbt.Ib, seg => new BbtEntry(seg)); _cryptMethod = (CryptMethod)buffer[CryptMethodOffset]; }
public BbtEntry(Bref bref, ushort length, ushort refCount) { Bref = bref; Length = length; RefCount = refCount; }
public BbtEntry(Segment <byte> data) { Bref = new Bref(data.ToUInt64(0), data.ToUInt64(8)); Length = data.ToUInt16(16); RefCount = data.ToUInt16(18); }