/// <summary> /// Parse TS_UPDATE_PALETTE /// </summary> /// <param name="updateData">update data (decompressed if were compressed)</param> /// <param name="shareDataHeader">share data header</param> /// <returns>TS_UPDATE_PALETTE</returns> private TS_UPDATE_PALETTE ParseTsUpdatePalettePduData( byte[] updateData, TS_SHAREDATAHEADER shareDataHeader) { // index of update data int index = 0; TS_UPDATE_PALETTE pduData = new TS_UPDATE_PALETTE(); // TS_UPDATE_PALETTE: shareDataHeader pduData.shareDataHeader = shareDataHeader; // TS_UPDATE_PALETTE: paletteData pduData.paletteData = ParseTsUpdatePaletteData(updateData, ref index); // [Commented out for TDI #41402] // Check if data length exceeded expectation // VerifyDataLength(updateData.Length, index, ConstValue.ERROR_MESSAGE_DATA_LENGTH_EXCEEDED); return pduData; }
private byte[] EncodePalette(TS_UPDATE_PALETTE paletteData) { List<byte> totalBuffer = new List<byte>(); RdpbcgrEncoder.EncodeStructure(totalBuffer, paletteData.shareDataHeader); List<byte> buffer = new List<byte>(); RdpbcgrEncoder.EncodeStructure(buffer, (ushort)paletteData.paletteData.updateType); RdpbcgrEncoder.EncodeStructure(buffer, paletteData.paletteData.pad2Octets); RdpbcgrEncoder.EncodeStructure(buffer, paletteData.paletteData.numberColors); if (paletteData.paletteData.paletteEntries != null) { for (int i = 0; i < paletteData.paletteData.paletteEntries.Length; ++i) { RdpbcgrEncoder.EncodeStructure(buffer, paletteData.paletteData.paletteEntries[i].red); RdpbcgrEncoder.EncodeStructure(buffer, paletteData.paletteData.paletteEntries[i].green); RdpbcgrEncoder.EncodeStructure(buffer, paletteData.paletteData.paletteEntries[i].blue); } } if (paletteData.shareDataHeader.compressedType != compressedType_Values.None) { RdpbcgrEncoder.EncodeBytes( totalBuffer, serverSessionContext.Compress(paletteData.shareDataHeader.compressedType, buffer.ToArray())); } else { RdpbcgrEncoder.EncodeBytes(totalBuffer, buffer.ToArray()); } return totalBuffer.ToArray(); }