/// <summary> /// Parse TS_SUPPRESS_OUTPUT_PDU /// (parser index is updated according to parsed length) /// </summary> /// <param name="data">data to be parsed</param> /// <param name="currentIndex">current parser index</param> /// <returns>TS_SUPPRESS_OUTPUT_PDU</returns> private TS_SUPPRESS_OUTPUT_PDU ParseTsSuppressOutputPdu(byte[] data, ref int currentIndex) { TS_SUPPRESS_OUTPUT_PDU pdu = new TS_SUPPRESS_OUTPUT_PDU(); pdu.shareDataHeader = ParseTsShareDataHeader(data, ref currentIndex); pdu.allowDisplayUpdates = (AllowDisplayUpdates_SUPPRESS_OUTPUT)ParseByte(data, ref currentIndex); pdu.pad3Octects = GetBytes(data, ref currentIndex, 3); if (pdu.allowDisplayUpdates == AllowDisplayUpdates_SUPPRESS_OUTPUT.ALLOW_DISPLAY_UPDATES) { pdu.desktopRect = ParseInclusiveRect(data, ref currentIndex); } return pdu; }
/// <summary> /// Encode refreshRectPduData field. /// </summary> /// <param name="suppressOutputPduData">The data to be encoded.</param> /// <returns>The encoded data.</returns> private static byte[] EncodeSuppressData(TS_SUPPRESS_OUTPUT_PDU suppressOutputPduData) { List<byte> suppressBuffer = new List<byte>(); RdpbcgrEncoder.EncodeStructure(suppressBuffer, suppressOutputPduData.shareDataHeader); RdpbcgrEncoder.EncodeStructure(suppressBuffer, (byte)suppressOutputPduData.allowDisplayUpdates); RdpbcgrEncoder.EncodeBytes(suppressBuffer, suppressOutputPduData.pad3Octects); if (suppressOutputPduData.allowDisplayUpdates == AllowDisplayUpdates_SUPPRESS_OUTPUT.ALLOW_DISPLAY_UPDATES) { RdpbcgrEncoder.EncodeStructure(suppressBuffer, suppressOutputPduData.desktopRect); } return suppressBuffer.ToArray(); }