public void HandleRequest(byte[] buffer, int length)
{
Touch();
int headerSize = (((buffer[9] >> 3) & 4) + ((buffer[9] >> 3) & 2) + 12);
Component componentID = (Component)(buffer[3] | (buffer[2] << 8));
int commandID = buffer[5] | (buffer[4] << 8);
int errorCode = buffer[7] | (buffer[6] << 8);
MessageType messageType = (MessageType)((buffer[8] >> 4) << 16);
int messageID = buffer[11] | ((buffer[10] | ((buffer[9] & 0xF) << 8)) << 8);
int payloadSize = buffer[1] | (buffer[0] << 8);
if (Convert.ToBoolean(buffer[9] & 0x10))
{
payloadSize |= (buffer[13] | (buffer[12] << 8) >> 16);
}
byte[] payload = buffer.Skip(headerSize).Take(payloadSize).ToArray();
var decoder = new TdfDecoder(payload);
var requestData = decoder.Decode();
var request = new Request(this);
request.ComponentID = componentID;
request.CommandID = (ushort)commandID;
request.ErrorCode = errorCode;
request.MessageID = messageID;
request.Data = requestData;
HandleRequest(request);
}