예제 #1
0
        /// <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;
        }
예제 #2
0
 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;
         }
     }
 }