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();
}