void StreamCompressedContent(IO.EndianStream s) { if (s.IsReading) { using (var cs = new CompressedStream(true)) { Stream(s, EnumFlags.Test(Flags, FileFlags.EncryptContent), cs, userKey: Header.DataCryptKey, streamLeftovers: StreamLeftovers); cs.Decompress(); Content = cs.UncompressedData; } } else if (s.IsWriting) { using (var cs = new CompressedStream(true)) using (var ms = new System.IO.MemoryStream(kMaxContentSize)) using (var sout = new IO.EndianWriter(ms, s.ByteOrder)) { sout.Write(Content); sout.Seek(0); cs.InitializeFromStream(ms); cs.Compress(); Stream(s, EnumFlags.Test(Flags, FileFlags.EncryptContent), cs, userKey: Header.DataCryptKey, streamLeftovers: StreamLeftovers); } } }
public void Write(IO.EndianWriter s) { //Flags = EnumFlags.Remove(Flags, FileFlags.EncryptHeader | FileFlags.EncryptContent); s.Write(Flags, FileFlagsStreamer.Instance); s.Write((ushort)kVersion); Write(s, EnumFlags.Test(Flags, FileFlags.EncryptHeader), Header, MediaHeader.kSizeOf); GenerateHash(); if (EnumFlags.Test(Flags, FileFlags.CompressContent)) { using (var cs = new CompressedStream(true)) using (var ms = new System.IO.MemoryStream(kMaxContentSize)) using (var sout = new IO.EndianWriter(ms, Shell.EndianFormat.Big)) { sout.Write(Content); sout.Seek(0); cs.InitializeFromStream(ms); cs.Compress(); Write(s, EnumFlags.Test(Flags, FileFlags.EncryptContent), cs, userKey: Header.DataCryptKey, writeLeftovers: WriteLeftovers); } } else { s.Write(Content); } }
public static void CompressFromStream(IO.EndianWriter blockStream, System.IO.Stream source, out uint streamAdler, out int streamSize) { Contract.Requires <ArgumentNullException>(blockStream != null); Contract.Requires <ArgumentNullException>(source != null); using (var ms = new System.IO.MemoryStream((int)source.Length + Header.kSizeOf)) using (var s = new IO.EndianStream(ms, Shell.EndianFormat.Big, permissions: FA.Write)) using (var cs = new CompressedStream()) { s.StreamMode = FA.Write; cs.InitializeFromStream(source); cs.Compress(); cs.Serialize(s); ms.Position = 0; streamSize = (int)ms.Length; streamAdler = Adler32.Compute(ms, streamSize); ms.WriteTo(blockStream.BaseStream); } }