private StackPacket SwitchDecodeMcsDomainPDU(RdpbcgrServerSessionContext serverSessionContext, byte[] data)
{
// Skip TpktHeader and X224Data
int tempIndex = ConstValue.TPKT_HEADER_AND_X224_DATA_LENGTH;
// Decode Domain MCS PDU
DomainMCSPDU domainPdu = ParseMcsDomainPdu(data, ref tempIndex);
// Switch decoders by pdu element name
StackPacket pdu = null;
switch (domainPdu.ElemName)
{
// Erect Domain Request PDU
case ConstValue.MCS_DOMAIN_PDU_NAME_ERECT_DOMAIN_REQUEST:
pdu = DecodeMcsErectDomainRequestPDU(data);
break;
// Attach User Request PDU
case ConstValue.MCS_DOMAIN_PDU_NAME_ATTACH_USER_REQUEST:
pdu = DecodeMcsAttachUserRequestPDU(data);
break;
// Channel Join Request PDU
case ConstValue.MCS_DOMAIN_PDU_NAME_CHANNEL_JOIN_REQUEST:
pdu = DecodeMcsChannelJoinRequestPDU(data);
break;
// Send Data Request PDU
case ConstValue.MCS_DOMAIN_PDU_NAME_SEND_DATA_REQUEST:
pdu = DecodeMcsSendDataRequestPDU(serverSessionContext, data, domainPdu);
break;
// Disconnect Provider Ultimatum PDU
case ConstValue.MCS_DOMAIN_PDU_NAME_DISCONNECT_PROVIDER_ULTIMATUM:
pdu = DecodeDisconnectProviderUltimatumPDU(data);
break;
default:
throw new FormatException(ConstValue.ERROR_MESSAGE_ENUM_UNRECOGNIZED);
}
return pdu;
}