3.1.5.1 Processing the TS_RFX_CLNT_CAPS_CONTAINER Message

The structure and fields of the TS_RFX_CLNT_CAPS_CONTAINER, and its constituent members, are specified in section 2.2.1.1.

TS_RFX_CLNT_CAPS_CONTAINER has a TS_RFX_CAPS field. The TS_RFX_CAPS field contains a TS_RFX_CAPSET sub-field, which is composed of a variable number of TS_RFX_ICAP structures.

The encoder parses the TS_RFX_CLNT_CAPS_CONTAINER message to get to the array of TS_RFX_ICAP structures. It processes each element of this array to check whether it can support all the properties listed in that TS_RFX_ICAP element. From this set of supported elements, it will arbitrarily pick one element and use only the properties listed in that specific TS_RFX_ICAP to encode the data stream.

For example, if the decoder supports both RLGR1 and RLGR3, the client can specify support for both of them. This support is specified using two TS_RFX_ICAP elements in the TS_RFX_CAPSET message that the client sends to the server. If the encoder also supports both RLGR1 and RLGR3, it then arbitrarily picks one of the TS_RFX_CAPSET elements to use for encoding.

Once a TS_RFX_ICAP element has been picked, the OperationalMode and EntropyAlgorithm ADM elements are set as follows.

  • If the TS_RFX_ICAP element's flags field is set to include the 0x02 flag, the OperationalMode is set to image mode; otherwise, the OperationalMode is set to video mode.

  • When the TS_RFX_ICAP element's entropyBits field is set to 0x01, the EntropyAlgorithm is set to RLGR1; when entropyBits is set to 0x04, EntropyAlgorithm is set to RLGR3.

Error conditions: If the server cannot support any of the TS_RFX_ICAP elements, it MUST stop sending messages and consider the RDP connection terminated.