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)
{
// Synchronize PDU
case pduType2_Values.PDUTYPE2_SYNCHRONIZE:
pdu = DecodeSynchronizePDU(data, decryptedUserData, securityHeaderType);
break;
// Control PDU
case pduType2_Values.PDUTYPE2_CONTROL:
pdu = DecodeControlPDU(data, decryptedUserData, securityHeaderType);
break;
// Font Map PDU
case pduType2_Values.PDUTYPE2_FONTMAP:
pdu = DecodeFontMapPDU(data, decryptedUserData, securityHeaderType);
break;
// Shutdown-Denied PDU
case pduType2_Values.PDUTYPE2_SHUTDOWN_DENIED:
pdu = DecodeShutdownRequestDeniedPDU(data, decryptedUserData, securityHeaderType);
break;
// Set Error Info PDU
case pduType2_Values.PDUTYPE2_SET_ERROR_INFO_PDU:
pdu = DecodeSetErrorInfoPDU(data, decryptedUserData, securityHeaderType);
break;
// Save Session Info PDU
case pduType2_Values.PDUTYPE2_SAVE_SESSION_INFO:
pdu = DecodeSaveSessionInfoPDU(data, decryptedUserData, securityHeaderType);
break;
// Play Sound PDU
case pduType2_Values.PDUTYPE2_PLAY_SOUND:
pdu = DecodePlaySoundPDU(data, decryptedUserData, securityHeaderType);
break;
// Set Keyboard Indicators PDU
case pduType2_Values.PDUTYPE2_SET_KEYBOARD_INDICATORS:
pdu = DecodeSetKeyboardIndicatorsPDU(data, decryptedUserData, securityHeaderType);
break;
// Set Keyboard IME Status PDU
case pduType2_Values.PDUTYPE2_SET_KEYBOARD_IME_STATUS:
pdu = DecodeSetKeyboardImeStatusPDU(data, decryptedUserData, securityHeaderType);
break;
// Update PDU
case pduType2_Values.PDUTYPE2_UPDATE:
pdu = DecodeSlowPathUpdatePDU(data, decryptedUserData, securityHeaderType);
break;
// Pointer PDU
case pduType2_Values.PDUTYPE2_POINTER:
pdu = DecodeSlowPathUpdatePDU(data, decryptedUserData, securityHeaderType);
break;
// Status Info PDU
case pduType2_Values.PDUTYPE2_STATUS_INFO_PDU:
pdu = DecodeStatusInfoPDU(data, decryptedUserData, securityHeaderType);
break;
// Monitor Layout PDU
case pduType2_Values.PDUTYPE2_MONITOR_LAYOUT_PDU:
pdu = DecodeMonitorLayoutPDU(data, decryptedUserData, securityHeaderType);
break;
// Monitor Layout PDU
case pduType2_Values.PDUTYPE2_ARC_STATUS_PDU:
pdu = DecodeAutoReconnectStatusPDU(data, decryptedUserData, securityHeaderType);
break;
default:
throw new FormatException(ConstValue.ERROR_MESSAGE_ENUM_UNRECOGNIZED);
}
return pdu;
}