/// <summary> /// Filters the request. /// </summary> /// <param name="readBuffer">The read buffer.</param> /// <param name="offset">The offset.</param> /// <param name="length">The length.</param> /// <param name="toBeCopied">if set to <c>true</c> [to be copied].</param> /// <param name="left">The left, the size of the data which has not been processed</param> /// <returns></returns> TRequestInfo FilterRequest(byte[] readBuffer, int offset, int length, bool toBeCopied, out int left) { if (!AppServer.OnRawDataReceived(this, readBuffer, offset, length)) { left = 0; return(null); } var requestInfo = m_RequestFilter.Filter(this, readBuffer, offset, length, toBeCopied, out left); if (requestInfo == null) { int leftBufferCount = m_RequestFilter.LeftBufferSize; if (leftBufferCount >= AppServer.Config.MaxRequestLength) { if (Logger.IsErrorEnabled) { Logger.ErrorFormat("Max command length: {0}, current processed length: {1}", AppServer.Config.MaxRequestLength, leftBufferCount); } Close(CloseReason.ServerClosing); return(null); } } //If next request filter wasn't set, still use current request filter in next round received data processing if (m_RequestFilter.NextRequestFilter != null) { m_RequestFilter = m_RequestFilter.NextRequestFilter; } return(requestInfo); }
/// <summary> /// Filters the request. /// </summary> /// <param name="readBuffer">The read buffer.</param> /// <param name="offset">The offset.</param> /// <param name="length">The length.</param> /// <param name="toBeCopied">if set to <c>true</c> [to be copied].</param> /// <param name="rest">The rest, the size of the data which has not been processed</param> /// <param name="offsetDelta">return offset delta of next receiving buffer.</param> /// <returns></returns> TRequestInfo FilterRequest(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest, out int offsetDelta) { if (!AppServer.OnRawDataReceived(this, readBuffer, offset, length)) { rest = 0; offsetDelta = 0; return(null); } var currentRequestLength = m_ReceiveFilter.LeftBufferSize; var requestInfo = m_ReceiveFilter.Filter(readBuffer, offset, length, toBeCopied, out rest); if (m_ReceiveFilter.State == FilterState.Error) { rest = 0; offsetDelta = 0; Close(CloseReason.ProtocolError); requestInfo?.Dispose(); return(null); } var offsetAdapter = m_ReceiveFilter as IOffsetAdapter; offsetDelta = offsetAdapter != null ? offsetAdapter.OffsetDelta : 0; if (requestInfo == null) { //current buffered length currentRequestLength = m_ReceiveFilter.LeftBufferSize; } else { //current request length currentRequestLength = currentRequestLength + length - rest; } var maxRequestLength = GetMaxRequestLength(); if (currentRequestLength >= maxRequestLength) { if (Logger.IsErrorEnabled) { Logger.Error(this, string.Format("Max request length: {0}, current processed length: {1}", maxRequestLength, currentRequestLength)); } Close(CloseReason.ProtocolError); requestInfo?.Dispose(); return(null); } //If next Receive filter wasn't set, still use current Receive filter in next round received data processing if (m_ReceiveFilter.NextReceiveFilter != null) { m_ReceiveFilter = m_ReceiveFilter.NextReceiveFilter; } return(requestInfo); }