// Token: 0x06000148 RID: 328 RVA: 0x0000E234 File Offset: 0x0000C434 public void AddStream(ZipStore.ZipStorer.Compression _method, string _filenameInZip, Stream _source, DateTime _modTime, string _comment) { if (this.Access == FileAccess.Read) { throw new InvalidOperationException("Writing is not alowed"); } if (this.Files.Count != 0) { ZipStore.ZipStorer.ZipFileEntry zipFileEntry = this.Files[this.Files.Count - 1]; } ZipStore.ZipStorer.ZipFileEntry item = new ZipStore.ZipStorer.ZipFileEntry { Method = _method, EncodeUTF8 = this.EncodeUTF8, FilenameInZip = this.NormalizedFilename(_filenameInZip), Comment = ((_comment == null) ? "" : _comment), Crc32 = 0U, HeaderOffset = (uint)this.ZipFileStream.Position, ModifyTime = _modTime }; this.WriteLocalHeader(ref item); item.FileOffset = (uint)this.ZipFileStream.Position; this.Store(ref item, _source); _source.Close(); this.UpdateCrcAndSizes(ref item); this.Files.Add(item); }
// Token: 0x0600015A RID: 346 RVA: 0x0000ED90 File Offset: 0x0000CF90 private void WriteCentralDirRecord(ZipStore.ZipStorer.ZipFileEntry _zfe) { Encoding encoding = _zfe.EncodeUTF8 ? Encoding.UTF8 : ZipStore.ZipStorer.DefaultEncoding; byte[] bytes = encoding.GetBytes(_zfe.FilenameInZip); byte[] bytes2 = encoding.GetBytes(_zfe.Comment); this.ZipFileStream.Write(new byte[] { 80, 75, 1, 2, 23, 11, 20, 0 }, 0, 8); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.EncodeUTF8 ? 2048 : 0), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes((ushort)_zfe.Method), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(this.DateTimeToDosTime(_zfe.ModifyTime)), 0, 4); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.Crc32), 0, 4); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.CompressedSize), 0, 4); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.FileSize), 0, 4); this.ZipFileStream.Write(BitConverter.GetBytes((ushort)bytes.Length), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(0), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes((ushort)bytes2.Length), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(0), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(0), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(0), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(33024), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.HeaderOffset), 0, 4); this.ZipFileStream.Write(bytes, 0, bytes.Length); this.ZipFileStream.Write(bytes2, 0, bytes2.Length); }
// Token: 0x06000150 RID: 336 RVA: 0x0000E5D0 File Offset: 0x0000C7D0 public bool ExtractFile(ZipStore.ZipStorer.ZipFileEntry _zfe, string _filename) { string directoryName = Path.GetDirectoryName(_filename); if (!Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } bool result; if (Directory.Exists(_filename)) { result = true; } else { Stream stream = new FileStream(_filename, FileMode.Create, FileAccess.Write); bool flag = this.ExtractFile(_zfe, stream); if (flag) { stream.Close(); } File.SetCreationTime(_filename, _zfe.ModifyTime); File.SetLastWriteTime(_filename, _zfe.ModifyTime); result = flag; } return(result); }
// Token: 0x06000159 RID: 345 RVA: 0x0000ECD4 File Offset: 0x0000CED4 private void UpdateCrcAndSizes(ref ZipStore.ZipStorer.ZipFileEntry _zfe) { long position = this.ZipFileStream.Position; this.ZipFileStream.Position = (long)((ulong)(_zfe.HeaderOffset + 8U)); this.ZipFileStream.Write(BitConverter.GetBytes((ushort)_zfe.Method), 0, 2); this.ZipFileStream.Position = (long)((ulong)(_zfe.HeaderOffset + 14U)); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.Crc32), 0, 4); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.CompressedSize), 0, 4); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.FileSize), 0, 4); this.ZipFileStream.Position = position; }
// Token: 0x06000158 RID: 344 RVA: 0x0000EB74 File Offset: 0x0000CD74 private void Store(ref ZipStore.ZipStorer.ZipFileEntry _zfe, Stream _source) { byte[] array = new byte[16384]; uint num = 0U; long position = this.ZipFileStream.Position; long position2 = _source.Position; Stream stream = (_zfe.Method != ZipStore.ZipStorer.Compression.Store) ? new DeflateStream(this.ZipFileStream, CompressionMode.Compress, true) : this.ZipFileStream; _zfe.Crc32 = uint.MaxValue; int num2; do { num2 = _source.Read(array, 0, array.Length); num += (uint)num2; if (num2 > 0) { stream.Write(array, 0, num2); uint num3 = 0U; while ((ulong)num3 < (ulong)((long)num2)) { _zfe.Crc32 = (ZipStore.ZipStorer.CrcTable[(int)((IntPtr)((long)((ulong)((_zfe.Crc32 ^ (uint)array[(int)((uint)((UIntPtr)num3))]) & 255U))))] ^ _zfe.Crc32 >> 8); num3 += 1U; } } }while (num2 == array.Length); stream.Flush(); if (_zfe.Method == ZipStore.ZipStorer.Compression.Deflate) { stream.Dispose(); } _zfe.Crc32 ^= uint.MaxValue; _zfe.FileSize = num; _zfe.CompressedSize = (uint)(this.ZipFileStream.Position - position); if (_zfe.Method != ZipStore.ZipStorer.Compression.Deflate || this.ForceDeflating || !_source.CanSeek || _zfe.CompressedSize <= _zfe.FileSize) { return; } _zfe.Method = ZipStore.ZipStorer.Compression.Store; this.ZipFileStream.Position = position; this.ZipFileStream.SetLength(position); _source.Position = position2; this.Store(ref _zfe, _source); }
// Token: 0x06000155 RID: 341 RVA: 0x0000E750 File Offset: 0x0000C950 public List <ZipStore.ZipStorer.ZipFileEntry> ReadCentralDir() { if (this.CentralDirImage == null) { throw new InvalidOperationException("Central directory currently does not exist"); } List <ZipStore.ZipStorer.ZipFileEntry> list = new List <ZipStore.ZipStorer.ZipFileEntry>(); int num = 0; while (num < this.CentralDirImage.Length && BitConverter.ToUInt32(this.CentralDirImage, num) == 33639248U) { bool flag = (BitConverter.ToUInt16(this.CentralDirImage, num + 8) & 2048) > 0; ushort method = BitConverter.ToUInt16(this.CentralDirImage, num + 10); uint dt = BitConverter.ToUInt32(this.CentralDirImage, num + 12); uint crc = BitConverter.ToUInt32(this.CentralDirImage, num + 16); uint compressedSize = BitConverter.ToUInt32(this.CentralDirImage, num + 20); uint fileSize = BitConverter.ToUInt32(this.CentralDirImage, num + 24); ushort num2 = BitConverter.ToUInt16(this.CentralDirImage, num + 28); ushort num3 = BitConverter.ToUInt16(this.CentralDirImage, num + 30); ushort num4 = BitConverter.ToUInt16(this.CentralDirImage, num + 32); uint headerOffset = BitConverter.ToUInt32(this.CentralDirImage, num + 42); uint headerSize = (uint)(46 + num2 + num3 + num4); Encoding encoding = flag ? Encoding.UTF8 : ZipStore.ZipStorer.DefaultEncoding; ZipStore.ZipStorer.ZipFileEntry item = new ZipStore.ZipStorer.ZipFileEntry { Method = (ZipStore.ZipStorer.Compression)method, FilenameInZip = encoding.GetString(this.CentralDirImage, num + 46, (int)num2), FileOffset = this.GetFileOffset(headerOffset), FileSize = fileSize, CompressedSize = compressedSize, HeaderOffset = headerOffset, HeaderSize = headerSize, Crc32 = crc, ModifyTime = this.DosTimeToDateTime(dt) }; if (num4 > 0) { item.Comment = encoding.GetString(this.CentralDirImage, num + 46 + (int)num2 + (int)num3, (int)num4); } list.Add(item); num += (int)(46 + num2 + num3 + num4); } return(list); }
// Token: 0x0600014F RID: 335 RVA: 0x0000E4DC File Offset: 0x0000C6DC public bool ExtractFile(ZipStore.ZipStorer.ZipFileEntry _zfe, Stream _stream) { if (!_stream.CanWrite) { throw new InvalidOperationException("Stream cannot be written"); } byte[] array = new byte[4]; this.ZipFileStream.Seek((long)((ulong)_zfe.HeaderOffset), SeekOrigin.Begin); this.ZipFileStream.Read(array, 0, 4); if (BitConverter.ToUInt32(array, 0) == 67324752U) { Stream stream; if (_zfe.Method == ZipStore.ZipStorer.Compression.Store) { stream = this.ZipFileStream; } else { if (_zfe.Method != ZipStore.ZipStorer.Compression.Deflate) { return(false); } stream = new DeflateStream(this.ZipFileStream, CompressionMode.Decompress, true); } byte[] array2 = new byte[16384]; this.ZipFileStream.Seek((long)((ulong)_zfe.FileOffset), SeekOrigin.Begin); int num2; for (uint num = _zfe.FileSize; num > 0U; num -= (uint)num2) { num2 = stream.Read(array2, 0, (int)Math.Min((long)((ulong)num), (long)array2.Length)); _stream.Write(array2, 0, num2); } _stream.Flush(); if (_zfe.Method == ZipStore.ZipStorer.Compression.Deflate) { stream.Dispose(); } return(true); } return(false); }
// Token: 0x0600015C RID: 348 RVA: 0x0000F058 File Offset: 0x0000D258 private void WriteLocalHeader(ref ZipStore.ZipStorer.ZipFileEntry _zfe) { long position = this.ZipFileStream.Position; byte[] bytes = (_zfe.EncodeUTF8 ? Encoding.UTF8 : ZipStore.ZipStorer.DefaultEncoding).GetBytes(_zfe.FilenameInZip); this.ZipFileStream.Write(new byte[] { 80, 75, 3, 4, 20, 0 }, 0, 6); this.ZipFileStream.Write(BitConverter.GetBytes(_zfe.EncodeUTF8 ? 2048 : 0), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes((ushort)_zfe.Method), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(this.DateTimeToDosTime(_zfe.ModifyTime)), 0, 4); this.ZipFileStream.Write(new byte[12], 0, 12); this.ZipFileStream.Write(BitConverter.GetBytes((ushort)bytes.Length), 0, 2); this.ZipFileStream.Write(BitConverter.GetBytes(0), 0, 2); this.ZipFileStream.Write(bytes, 0, bytes.Length); _zfe.HeaderSize = (uint)(this.ZipFileStream.Position - position); }