using System; using System.IO; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip.Compression; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace ICSharpCode.SharpZipLib.GZip { // Token: 0x0200002C RID: 44 public class GZipOutputStream : DeflaterOutputStream { // Token: 0x0600014E RID: 334 RVA: 0x00008F57 File Offset: 0x00007F57 public GZipOutputStream(Stream baseOutputStream) : this(baseOutputStream, 4096) { } // Token: 0x0600014F RID: 335 RVA: 0x00008F65 File Offset: 0x00007F65 public GZipOutputStream(Stream baseOutputStream, int size) : base(baseOutputStream, new Deflater(-1, true), size) { } // Token: 0x06000150 RID: 336 RVA: 0x00008F81 File Offset: 0x00007F81 public void SetLevel(int level) { if (level < 1) { throw new ArgumentOutOfRangeException("level"); } this.deflater_.SetLevel(level); } // Token: 0x06000151 RID: 337 RVA: 0x00008F9E File Offset: 0x00007F9E public int GetLevel() { return this.deflater_.GetLevel(); } // Token: 0x06000152 RID: 338 RVA: 0x00008FAB File Offset: 0x00007FAB public override void Write(byte[] buffer, int offset, int count) { if (this.state_ == GZipOutputStream.OutputState.Header) { this.WriteHeader(); } if (this.state_ != GZipOutputStream.OutputState.Footer) { throw new InvalidOperationException("Write not permitted in current state"); } this.crc.Update(buffer, offset, count); base.Write(buffer, offset, count); } // Token: 0x06000153 RID: 339 RVA: 0x00008FE8 File Offset: 0x00007FE8 public override void Close() { try { this.Finish(); } finally { if (this.state_ != GZipOutputStream.OutputState.Closed) { this.state_ = GZipOutputStream.OutputState.Closed; if (base.IsStreamOwner) { this.baseOutputStream_.Close(); } } } } // Token: 0x06000154 RID: 340 RVA: 0x00009034 File Offset: 0x00008034 public override void Finish() { if (this.state_ == GZipOutputStream.OutputState.Header) { this.WriteHeader(); } if (this.state_ == GZipOutputStream.OutputState.Footer) { this.state_ = GZipOutputStream.OutputState.Finished; base.Finish(); uint num = (uint)(this.deflater_.TotalIn & (long)((ulong)(-1))); uint num2 = (uint)(this.crc.Value & (long)((ulong)(-1))); byte[] array = new byte[] { (byte)num2, (byte)(num2 >> 8), (byte)(num2 >> 16), (byte)(num2 >> 24), (byte)num, (byte)(num >> 8), (byte)(num >> 16), (byte)(num >> 24) }; this.baseOutputStream_.Write(array, 0, array.Length); } } // Token: 0x06000155 RID: 341 RVA: 0x000090E4 File Offset: 0x000080E4 private void WriteHeader() { if (this.state_ == GZipOutputStream.OutputState.Header) { this.state_ = GZipOutputStream.OutputState.Footer; int num = (int)((DateTime.Now.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000L); byte[] array = new byte[] { 31, 139, 8, 0, 0, 0, 0, 0, 0, byte.MaxValue }; array[4] = (byte)num; array[5] = (byte)(num >> 8); array[6] = (byte)(num >> 16); array[7] = (byte)(num >> 24); byte[] array2 = array; this.baseOutputStream_.Write(array2, 0, array2.Length); } } // Token: 0x040000B6 RID: 182 protected Crc32 crc = new Crc32(); // Token: 0x040000B7 RID: 183 private GZipOutputStream.OutputState state_; // Token: 0x0200002D RID: 45 private enum OutputState { // Token: 0x040000B9 RID: 185 Header, // Token: 0x040000BA RID: 186 Footer, // Token: 0x040000BB RID: 187 Finished, // Token: 0x040000BC RID: 188 Closed } } }