System.Net.Security.SslState.GetRemainingFrameSize C# (CSharp) Метод

GetRemainingFrameSize() приватный Метод

private GetRemainingFrameSize ( byte buffer, int dataSize ) : int
buffer byte
dataSize int
Результат int
        internal int GetRemainingFrameSize(byte[] buffer, int dataSize)
        {
            if (NetEventSource.IsEnabled) NetEventSource.Enter(this, buffer, dataSize);

            int payloadSize = -1;
            switch (_Framing)
            {
                case Framing.Unified:
                case Framing.BeforeSSL3:
                    if (dataSize < 2)
                    {
                        throw new System.IO.IOException(SR.net_ssl_io_frame);
                    }
                    // Note: Cannot detect version mismatch for <= SSL2

                    if ((buffer[0] & 0x80) != 0)
                    {
                        // Two bytes
                        payloadSize = (((buffer[0] & 0x7f) << 8) | buffer[1]) + 2;
                        payloadSize -= dataSize;
                    }
                    else
                    {
                        // Three bytes
                        payloadSize = (((buffer[0] & 0x3f) << 8) | buffer[1]) + 3;
                        payloadSize -= dataSize;
                    }

                    break;
                case Framing.SinceSSL3:
                    if (dataSize < 5)
                    {
                        throw new System.IO.IOException(SR.net_ssl_io_frame);
                    }

                    payloadSize = ((buffer[3] << 8) | buffer[4]) + 5;
                    payloadSize -= dataSize;
                    break;
                default:
                    break;
            }

            if (NetEventSource.IsEnabled) NetEventSource.Exit(this, payloadSize);
            return payloadSize;
        }

Usage Example

Пример #1
0
        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));
        }
All Usage Examples Of System.Net.Security.SslState::GetRemainingFrameSize