Microsoft.Protocols.TestTools.StackSdk.RemoteDesktop.Rdpbcgr.TS_FP_UPDATE_PDU.EncodeFpOutputData C# (CSharp) Method

EncodeFpOutputData() private method

private EncodeFpOutputData ( ) : byte[]
return byte[]
        private byte[] EncodeFpOutputData()
        {
            List<byte> fastpathOutputData = new List<byte>();
            if (fpOutputUpdates != null)
            {
                for (int i = 0; i < fpOutputUpdates.Length; ++i)
                {
                    if (fpOutputUpdates[i].GetType() == typeof(TS_FP_UPDATE_PALETTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData,
                            EncodePalette((TS_FP_UPDATE_PALETTE)fpOutputUpdates[i]));
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_UPDATE_BITMAP))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData,
                            EncodeBitmap((TS_FP_UPDATE_BITMAP)fpOutputUpdates[i]));
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_UPDATE_SYNCHRONIZE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_POINTERPOSATTRIBUTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData,
                            EncodePtrPos((TS_FP_POINTERPOSATTRIBUTE)fpOutputUpdates[i]));
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_SYSTEMPOINTERHIDDENATTRIBUTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_SYSTEMPOINTERDEFAULTATTRIBUTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_COLORPOINTERATTRIBUTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData,
                            EncodeColorPtr((TS_FP_COLORPOINTERATTRIBUTE)fpOutputUpdates[i]));
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_POINTERATTRIBUTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData,
                            EncodeNewPtr((TS_FP_POINTERATTRIBUTE)fpOutputUpdates[i]));
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_CACHEDPOINTERATTRIBUTE))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData,
                            EncodeCachedPtr((TS_FP_CACHEDPOINTERATTRIBUTE)fpOutputUpdates[i]));
                    }

                    else if (fpOutputUpdates[i].GetType() == typeof(TS_FP_SURFCMDS))
                    {
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].updateHeader);

                        // The two bit compression flag in updateHeader indicates if the compressionFlags field is present
                        if ((int)fpOutputUpdates[i].updateHeader >> 6 == 2)
                        {
                            RdpbcgrEncoder.EncodeStructure(fastpathOutputData, (byte)fpOutputUpdates[i].compressionFlags);
                        }
                        byte[] surfUpdateData = EncodeSurfCmds((TS_FP_SURFCMDS)fpOutputUpdates[i]);
                        fpOutputUpdates[i].size = (ushort)surfUpdateData.Length;
                        RdpbcgrEncoder.EncodeStructure(fastpathOutputData, fpOutputUpdates[i].size);
                        RdpbcgrEncoder.EncodeBytes(fastpathOutputData, surfUpdateData);
                    }
                }
            }

            return fastpathOutputData.ToArray();
        }