/// <summary>Add some data to our buffer.</summary> /// <param name="data">A byte-array to read data from.</param> /// <param name="offset">How many bytes to skip at the beginning of the array.</param> /// <param name="len">How many bytes to read from the array.</param> public void AddData( byte[] data, int offset, int len) { if (readOnlyBuf) { throw new InvalidOperationException("Cannot add data to read-only buffer"); } if ((skipped + available + len) > databuf.Length) { int desiredSize = ByteQueue.NextTwoPow(available + len); if (desiredSize > databuf.Length) { byte[] tmp = new byte[desiredSize]; Array.Copy(databuf, skipped, tmp, 0, available); databuf = tmp; } else { Array.Copy(databuf, skipped, databuf, 0, available); } skipped = 0; } Array.Copy(data, offset, databuf, skipped + available, len); available += len; }
public void Shrink() { if (available == 0) { databuf = TlsUtilities.EmptyBytes; skipped = 0; } else { int desiredSize = ByteQueue.NextTwoPow(available); if (desiredSize < databuf.Length) { byte[] tmp = new byte[desiredSize]; Array.Copy(databuf, skipped, tmp, 0, available); databuf = tmp; skipped = 0; } } }
public ByteQueueStream() { this.buffer = new ByteQueue(); }