예제 #1
0
        protected ZiPatchChunk(ChecksumBinaryReader reader, int offset, int size)
        {
            this.Reader = reader;

            Offset = offset;
            Size   = size;
        }
예제 #2
0
        public static ZiPatchChunk GetCommand(ChecksumBinaryReader reader, int offset, int size)
        {
            try
            {
                // Have not seen this differ from size
                var innerSize = reader.ReadInt32BE();
                if (size != innerSize)
                {
                    throw new ZiPatchException();
                }

                var command = reader.ReadFixedLengthString(1u);
                if (!CommandTypes.TryGetValue(command, out var constructor))
                {
                    throw new ZiPatchException();
                }

                var chunk = constructor(reader, offset, innerSize - 5);

                return(chunk);
            }
            catch (EndOfStreamException e)
            {
                throw new ZiPatchException("Could not get command", e);
            }
        }
예제 #3
0
        public static ZiPatchChunk GetChunk(Stream stream)
        {
            localMemoryStream.Value = localMemoryStream.Value ?? new MemoryStream();

            var memoryStream = localMemoryStream.Value;

            try
            {
                var reader     = new BinaryReader(stream);
                var size       = reader.ReadInt32BE();
                var baseOffset = (int)stream.Position;

                // size of chunk + header + checksum
                var readSize = size + 4 + 4;

                // Enlarge MemoryStream if necessary, or set length at capacity
                var maxLen = Math.Max(readSize, memoryStream.Capacity);
                if (memoryStream.Length < maxLen)
                {
                    memoryStream.SetLength(maxLen);
                }

                // Read into MemoryStream's inner buffer
                reader.BaseStream.Read(memoryStream.GetBuffer(), 0, readSize);

                var binaryReader = new ChecksumBinaryReader(memoryStream);
                binaryReader.InitCrc32();

                var type = binaryReader.ReadFixedLengthString(4u);
                if (!ChunkTypes.TryGetValue(type, out var constructor))
                {
                    throw new ZiPatchException();
                }


                var chunk = constructor(binaryReader, baseOffset, size);

                chunk.ReadChunk();
                chunk.ReadChecksum();
                return(chunk);
            }
            catch (EndOfStreamException e)
            {
                throw new ZiPatchException("Could not get chunk", e);
            }
            finally
            {
                memoryStream.Position = 0;
            }
        }
 public FileHeaderChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size)
 {
 }
예제 #5
0
 public SqpkAddData(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }
 public SqpkPatchInfo(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }
예제 #7
0
 public XXXXChunk(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }
예제 #8
0
 public ApplyOptionChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size)
 {
 }
 public SqpkDeleteData(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size)
 {
 }
예제 #10
0
 public ApplyFreeSpaceChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size)
 {
 }
예제 #11
0
 public DeleteDirectoryChunk(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }
 public EndOfFileChunk(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }
 public AddDirectoryChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) {}
예제 #14
0
        protected ZiPatchChunk(ChecksumBinaryReader reader, int size)
        {
            this.reader = reader;

            Size = size;
        }
예제 #15
0
 public SqpkFile(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size)
 {
 }
예제 #16
0
 protected SqpkChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size)
 {
 }
 public SqpkTargetInfo(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }
예제 #18
0
 public SqpkIndex(ChecksumBinaryReader reader, int size) : base(reader, size)
 {
 }