Ejemplo n.º 1
0
 // 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);
 }
Ejemplo n.º 2
0
            // 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);
            }
Ejemplo n.º 3
0
            // 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);
            }
Ejemplo n.º 4
0
            // 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;
            }
Ejemplo n.º 5
0
            // 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);
            }
Ejemplo n.º 6
0
            // 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);
            }
Ejemplo n.º 7
0
 // 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);
 }
Ejemplo n.º 8
0
            // 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);
            }