2.2.2.4.1 RDP 6.1 Compressed Data (RDP61_COMPRESSED_DATA)

The RDP61_COMPRESSED_DATA structure stores chain-compressed data that has been processed by the RDP 6.1 Level-1 Compression Engine and possibly the RDP 5.0 Level-2 Compression Engine (see section 3.1.8.2.1 for a description of chained compression and [MS-RDPBCGR] section 3.1.8.4.2 for a description of RDP 5.0 bulk compression).


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

Level1ComprFlags

Level2ComprFlags

MatchCount (optional)

MatchDetails (variable)

...

Literals (variable)

Level1ComprFlags (1 byte): An 8-bit, unsigned integer. Level-1 compressor flags.

Value

Meaning

L1_PACKET_AT_FRONT

0x04

The level-1 history buffer MUST be reinitialized (by filling it with zeros).

L1_NO_COMPRESSION

0x02

No compression was performed. In this case, the MatchCount and MatchDetails fields MUST NOT be present. The Literals field MUST be present.

L1_COMPRESSED

0x01

Compression with the level-1 compressor was performed and the MatchCount and MatchDetails fields MUST be present and contain at least one match. The Literals field MUST also be present.

L1_INNER_COMPRESSION

0x10

Indicates that additional level-2 compression has been performed on the level-1 compressor output and that the Level2ComprFlags field contains valid data and MUST be processed.

See sections 3.1.8.2.2.2 and 3.1.8.2.3 for more details regarding these flags.

Level2ComprFlags (1 byte): An 8-bit, unsigned integer. Level-2 compressor flags.

Value

Meaning

PACKET_COMPR_TYPE_64K

0x01

Indicates that RDP 5.0 bulk compression (see [MS-RDPBCGR] section 3.1.8.4.2) was used.

PACKET_COMPRESSED

0x20

The data in the MatchCount, MatchDetails, and Literals fields has been compressed with the level-2 compressor.

PACKET_AT_FRONT

0x40

The decompressed data MUST be placed at the beginning of the level-2 history buffer.

PACKET_FLUSHED

0x80

The level-2 history buffer MUST be reinitialized (by filling it with zeros).

See [MS-RDPBCGR] sections 3.1.8.2.1 and 3.1.8.3 for more details regarding these flags.

The Level2ComprFlags field MUST be ignored if the L1_INNER_COMPRESSION flag (0x10) is not set.

MatchCount (2 bytes): A 16-bit, unsigned integer. Contains the number of RDP 6.1 Match Details structures (see section 2.2.2.4.1.1) present in the MatchDetails field. This field MUST be present if the L1_COMPRESSED flag (0x01) is set in the Level1ComprFlags field.

MatchDetails (variable): A variable-length field. Contains an array of RDP 6.1 Match Details structures (see section 2.2.2.4.1.1). This field MUST NOT be present if the MatchCount field is not present. If the MatchCount field is present and contains a value greater than zero, the MatchDetails field MUST be present, and the number of RDP 6.1 Match Details structures that it contains is given by the MatchCount field.

Literals (variable): A variable-length field. Contains raw noncompressed literals. The size of the Literals field is given by the equation, CompressedDataSize - (2 + MatchCountSize + MatchDetailsSize).