using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IllusionInjector.Utilities { class BlockingStream : Stream { public BlockingStream(Stream bstr) { BaseStream = bstr; } public Stream BaseStream { get; set; } public override bool CanRead => BaseStream.CanRead; public override bool CanSeek => BaseStream.CanSeek; public override bool CanWrite => BaseStream.CanWrite; public override long Length => BaseStream.Length; public override long Position { get => BaseStream.Position; set => BaseStream.Position = value; } public override void Flush() { BaseStream.Flush(); } public override int Read(byte[] buffer, int offset, int count) { var read = 0; do { read += BaseStream.Read(buffer, read, count-read); } while (read < count); return count; } public override long Seek(long offset, SeekOrigin origin) { return BaseStream.Seek(offset, origin); } public override void SetLength(long value) { BaseStream.SetLength(value); } public override void Write(byte[] buffer, int offset, int count) { BaseStream.Write(buffer, offset, count); } } }