private int StartFrameBody(int readBytes, byte[] buffer, int offset, int count, AsyncProtocolRequest asyncRequest)
{
if (readBytes == 0)
{
// EOF
asyncRequest?.CompleteUser(0);
return(0);
}
Debug.Assert(readBytes == SecureChannel.ReadHeaderSize);
int payloadBytes = _sslState.GetRemainingFrameSize(_internalBuffer, _internalOffset, readBytes);
if (payloadBytes < 0)
{
throw new IOException(SR.net_frame_read_size);
}
readBytes = EnsureBufferedBytes(SecureChannel.ReadHeaderSize + payloadBytes, asyncRequest, s_readFrameCallback);
if (readBytes == -1)
{
Debug.Assert(asyncRequest != null);
return(0);
}
Debug.Assert(readBytes == 0 || readBytes == SecureChannel.ReadHeaderSize + payloadBytes);
return(ProcessFrameBody(readBytes, buffer, offset, count, asyncRequest));
}