Exemplo n.º 1
0
        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];
        }
Exemplo n.º 2
0
 public BbtEntry(Bref bref, ushort length, ushort refCount)
 {
     Bref     = bref;
     Length   = length;
     RefCount = refCount;
 }
Exemplo n.º 3
0
 public BbtEntry(Segment <byte> data)
 {
     Bref     = new Bref(data.ToUInt64(0), data.ToUInt64(8));
     Length   = data.ToUInt16(16);
     RefCount = data.ToUInt16(18);
 }