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

ParseTsFpUpdates() private method

Parse TS_FP_UPDATE array (parser index is updated according to parsed length)
private ParseTsFpUpdates ( byte data, int &currentIndex ) : TS_FP_UPDATE[]
data byte data to be parsed
currentIndex int current parser index
return TS_FP_UPDATE[]
        private TS_FP_UPDATE[] ParseTsFpUpdates(byte[] data, ref int currentIndex)
        {
            List<TS_FP_UPDATE> listUpdate = new List<TS_FP_UPDATE>();

            // One by one parse TS_FP_UPDATE
            while (currentIndex < data.Length)
            {
                TS_FP_UPDATE update = null;

                // Update header
                byte updateHeader = ParseByte(data, ref currentIndex);

                // Get infomation from updateHeader
                updateCode_Values updateCode;
                fragmentation_Value fragmentation;
                compression_Values compression;
                GetFpUpdateHeaderInfo(updateHeader, out updateCode, out fragmentation, out compression);

                // Get compressionFlags (optional)
                compressedType_Values compressionFlags = 0;
                if (compression_Values.FASTPATH_OUTPUT_COMPRESSION_USED == compression)
                {
                    compressionFlags = (compressedType_Values)ParseByte(data, ref currentIndex);
                }

                // Get size and update data
                UInt16 updateDataSize = ParseUInt16(data, ref currentIndex, false);
                byte[] updateData = GetBytes(data, ref currentIndex, updateDataSize);

                // Decompress update data (according to compressionFlags)
                byte[] decompressedUpdateData = clientContext.Decompress(updateData, compressionFlags);

                // Parse fast-path updates by updateCode
                switch (updateCode)
                {
                    // Fast-Path Orders Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_ORDERS:
                        update = ParseTsFpUpdateOrders(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path Bitmap Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_BITMAP:
                        update = ParseTsFpUpdateBitmap(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path Palette Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_PALETTE:
                        update = ParseTsFpUpdatePalette(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path Synchronize Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_SYNCHRONIZE:
                        update = ParseTsFpUpdateSynchronize(
                            updateHeader, compressionFlags, updateDataSize);
                        break;

                    // Fast-Path Surface commands Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_SURFCMDS:
                        update = ParseTsFpSurfCmds(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path System Pointer Hidden Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_PTR_NULL:
                        update = ParseTsFpSystemPointerHiddenAttribute(
                            updateHeader, compressionFlags, updateDataSize);
                        break;

                    // Fast-Path System Pointer Default Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_PTR_DEFAULT:
                        update = ParseTsFpSystemPointerDefaultAttribute(
                            updateHeader, compressionFlags, updateDataSize);
                        break;

                    // Fast-Path Pointer Position Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_PTR_POSITION:
                        update = ParseTsFpPointerPosAttribute(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path Color Pointer Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_COLOR:
                        update = ParseTsFpColorPointerAttribute(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path Cached Pointer Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_CACHED:
                        update = ParseTsFpCachedPointerAttribute(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    // Fast-Path New Pointer Update
                    case updateCode_Values.FASTPATH_UPDATETYPE_POINTER:
                        update = ParseTsFpPointerAttribute(updateHeader, compressionFlags,
                            updateDataSize, decompressedUpdateData);
                        break;

                    default:
                        throw new FormatException(ConstValue.ERROR_MESSAGE_ENUM_UNRECOGNIZED);
                }
                listUpdate.Add(update);
            }

            // Copy list to array
            TS_FP_UPDATE[] updates = new TS_FP_UPDATE[listUpdate.Count];
            for (int i = 0; i < updates.Length; i++)
            {
                updates[i] = listUpdate[i];
            }
            return updates;
        }
RdpbcgrDecoder