Microsoft.Protocols.TestTools.StackSdk.RemoteDesktop.Rdpbcgr.RdpbcgrDecoder.DecodePdu C# (CSharp) Method

DecodePdu() public method

Decode PDU (entrance method for decoders)
public DecodePdu ( byte data ) : StackPacket
data byte data to be parsed
return StackPacket
        public StackPacket DecodePdu(byte[] data)
        {
            // Check data length
            if (null == data)
            {
                throw new FormatException(ConstValue.ERROR_MESSAGE_DATA_NULL_REF);
            }
            if (0 == data.Length)
            {
                throw new FormatException(ConstValue.ERROR_MESSAGE_DATA_INDEX_OUT_OF_RANGE);
            }

            // Check slow-path/fast-path type
            StackPacket pdu = null;
            if (ConstValue.SLOW_PATH_PDU_INDICATOR_VALUE == data[ConstValue.SLOW_PATH_PDU_INDICATOR_INDEX])
            {
                // Slow-Path Situation
                if (data.Length <= ConstValue.X224_TPDU_TYPE_INDICATOR_INDEX)
                {
                    throw new FormatException(ConstValue.ERROR_MESSAGE_DATA_INDEX_OUT_OF_RANGE);
                }

                X224_TPDU_TYPE x224Type = (X224_TPDU_TYPE)data[ConstValue.X224_TPDU_TYPE_INDICATOR_INDEX];
                switch (x224Type)
                {
                    // X224 Connection Confirm PDU
                    case X224_TPDU_TYPE.ConnectionConfirm:
                        pdu = DecodeX224ConnectionConfirmPDU(data);
                        break;

                    // MCS PDU
                    case X224_TPDU_TYPE.Data:
                        pdu = SwitchDecodeMcsPDU(data);
                        break;

                    default:
                        throw new FormatException(ConstValue.ERROR_MESSAGE_ENUM_UNRECOGNIZED);
                }
            }
            else
            {
                // Fast-Path Situation
                pdu = DecodeTsFpUpdatePDU(data);
            }

            return pdu;
        }
RdpbcgrDecoder