protected byte[] ReadToByte(byte b, ValidateByteDelegate validator)
{
byte[] dest = null;
if (this._dataCount == 0)
{
this.BufferMoreData();
}
int num = this._dataOffset + this._dataCount;
int srcOffset = this._dataOffset;
int index = srcOffset;
bool flag = false;
while (!flag)
{
bool flag2 = index == num;
flag = !flag2 && (this._dataBuffer[index] == b);
if (((validator != null) && !flag2) && (!flag && !validator(this._dataBuffer[index])))
{
throw new RemotingException(CoreChannel.GetResourceString("Remoting_Http_InvalidDataReceived"));
}
if (flag2 || flag)
{
int count = index - srcOffset;
if (dest == null)
{
dest = new byte[count];
StreamHelper.BufferCopy(this._dataBuffer, srcOffset, dest, 0, count);
}
else
{
int length = dest.Length;
byte[] buffer2 = new byte[length + count];
StreamHelper.BufferCopy(dest, 0, buffer2, 0, length);
StreamHelper.BufferCopy(this._dataBuffer, srcOffset, buffer2, length, count);
dest = buffer2;
}
this._dataOffset += count;
this._dataCount -= count;
if (flag2)
{
this.BufferMoreData();
num = this._dataOffset + this._dataCount;
srcOffset = this._dataOffset;
index = srcOffset;
}
else if (flag)
{
this._dataOffset++;
this._dataCount--;
}
}
else
{
index++;
}
}
return(dest);
}