private StackPacket SwitchDecodeMcsDataPDU(
byte[] data,
byte[] decryptedUserData,
SecurityHeaderType securityHeaderType)
{
// Parser index
int currentIndex = 0;
// Share data header
TS_SHAREDATAHEADER dataHeader = ParseTsShareDataHeader(decryptedUserData, ref currentIndex);
// Switch decoder by pduType2
StackPacket pdu = null;
switch (dataHeader.pduType2)
{
// Control PDU
case pduType2_Values.PDUTYPE2_CONTROL:
pdu = DecodeControlPDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_INPUT:
pdu = DecodeSlowPathInputEventPDU(data, decryptedUserData, securityHeaderType);
break;
// Synchronize PDU
case pduType2_Values.PDUTYPE2_SYNCHRONIZE:
pdu = DecodeSynchronizePDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_REFRESH_RECT:
pdu = DecodeRefreshRectPDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_SUPPRESS_OUTPUT:
pdu = DecodeSuppressOutputPDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_SHUTDOWN_REQUEST:
pdu = DecodeShutdownRequestPDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_FONTLIST:
pdu = DecodeFontListPDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_BITMAPCACHE_PERSISTENT_LIST:
pdu = DecodePersistentKeyListPDU(data, decryptedUserData, securityHeaderType);
break;
case pduType2_Values.PDUTYPE2_FRAME_ACKNOWLEDGE:
pdu = DecodeFrameAcknowledgePDU(data, decryptedUserData, securityHeaderType);
break;
default:
throw new FormatException(ConstValue.ERROR_MESSAGE_ENUM_UNRECOGNIZED);
}
return pdu;
}