2.2.2 Licensing PDU (TS_LICENSING_PDU)

The Licensing PDU packet encapsulates licensing messages that are exchanged between a client and a terminal server.


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

tpktHeader

x224Data

mcsPDU (variable)

...

securityHeader (variable)

...

preamble

LicensingMessage (variable)

...

tpktHeader (4 bytes): A TPKT header, as specified in [T123] section 8.

x224Data (3 bytes): An X.224 Class 0 Data TPDU, as specified in [X224] section 13.7.

mcsPDU (variable): If the PDU is being sent from the client to the server, this field MUST contain a variable-length PER-encoded MCS Send Data Request PDU, as specified in [T125] (the ASN.1 structure definition is specified in [T125] section 7 part 7). The userData field of the MCS Send Data Request PDU contains a security header, a licensing preamble, and the licensing message.

If the PDU is being sent from the server to the client, this field MUST contain a variable-length PER-encoded MCS Send Data Indication PDU, as specified in [T125] (the ASN.1 structure definition is specified in [T125] section 7 part 7). The userData field of the MCS Send Data Indication PDU contains a security header, a licensing preamble, and the licensing message.

securityHeader (variable): A security header. This field contains one of the following headers.

If the PDU is being sent from the client to the server:

  • The securityHeader field SHOULD contain at least a Basic security header (see [MS-RDPBCGR] section 2.2.8.1.1.2.1). If the embedded flags field contains the SEC_ENCRYPT(0x0008) flag, and the Encryption Level selected by the server (see sections 5.1.1 and 2.2.1.4.3) is ENCRYPTION_LEVEL_LOW (1), ENCRYPTION_LEVEL_CLIENT_COMPATIBLE (2), or ENCRYPTION_LEVEL_HIGH (3), the securityHeader SHOULD contain a non-FIPS security header.

    If the PDU is being sent from the server to the client, then the format of the security header depends on the Encryption Level and Encryption Method selected by the server (see [MS-RDPBCGR] section 5.3.2 and 2.2.1.4.3). This field MUST contain one of the following headers:

    • Basic Security Header (see [MS-RDPBCGR] section 2.2.8.1.1.2.1) if the Encryption Level selected by the server (see [MS-RDPBCGR] section 5.3.2 and 2.2.1.4.3) is ENCRYPTION_LEVEL_NONE (0) or ENCRYPTION_LEVEL_LOW (1) and the embedded flags field does not contain the SEC_ENCRYPT (0x0008) flag.

    • A non-FIPS Security Header (see [MS-RDPBCGR] section 2.2.8.1.1.2.2) if the Encryption Level selected by the server (see [MS-RDPBCGR] section 5.3.2 and 2.2.1.4.3) is ENCRYPTION_LEVEL_CLIENT_COMPATIBLE (2) or ENCRYPTION_LEVEL_HIGH (3) and the embedded flags field contains the SEC_ENCRYPT (0x0008) flag.

    • A FIPS Security Header (see [MS-RDPBCGR] section 2.2.8.1.1.2.3) if the Encryption Level selected by the server (see [MS-RDPBCGR] section 5.3.2 and 2.2.1.4.3) is ENCRYPTION_LEVEL_FIPS (4) and the embedded flags field contains the SEC_ENCRYPT (0x0008) flag.

If the Encryption Level is set to ENCRYPTION_LEVEL_CLIENT_COMPATIBLE (2), ENCRYPTION_LEVEL_HIGH (3), or ENCRYPTION_LEVEL_FIPS (4) and the flags field of the Security Header does not contain the SEC_ENCRYPT (0x0008) flag (the licensing PDU is not encrypted), then the field MUST contain a Basic Security Header (see [MS-RDPBCGR] section 2.2.8.1.1.2.1).

The SEC_LICENSE_ENCRYPT_CS (0x0200) and SEC_LICENSE_ENCRYPT_SC (0x0200) flags are used to communicate whether encryption is to be applied to the licensing PDUs (see [MS-RDPBCGR] section 2.2.8.1.1.2.1).

The flags field of the security header MUST contain the SEC_LICENSE_PKT (0x0080) flag (see [MS-RDPBCGR] section 2.2.8.1.1.2.1) for all the licensing messages.

preamble (4 bytes): A licensing preamble (see [MS-RDPBCGR] section 2.2.1.12.1.1) structure containing header information. The bMsgType field of the preamble structure specifies the type of the licensing message that follows the preamble.

The bVersion field of the preamble structure specifies the license protocol version and the client capability to handle extended error information in the Low nibble and High nibble respectively ([MS-RDPBCGR] section 2.2.1.12.1.1).

LicensingMessage (variable): A variable-length licensing message whose structure depends on the value of the bMsgType field in the preamble structure. The following table lists possible values for bMsgType and the associated licensing message (this table also appears in [MS-RDPBCGR] section 2.2.1.12.1.1).

Sent by the server.

Value

Meaning

LICENSE_REQUEST

0x01

The Licensing PDU is a License Request PDU, and the LicensingMessage contains a SERVER_LICENSE_REQUEST (section 2.2.2.1) structure.

PLATFORM_CHALLENGE

0x02

The Licensing PDU is a Platform Challenge PDU, and the LicensingMessage contains a SERVER_PLATFORM_CHALLENGE (section 2.2.2.4) structure.

NEW_LICENSE

0x03

The Licensing PDU is a New License PDU, and the LicensingMessage contains a SERVER_NEW_LICENSE (section 2.2.2.7) structure.

UPGRADE_LICENSE

0x04

The Licensing PDU is an Upgrade License PDU, and the LicensingMessage contains a SERVER_UPGRADE_LICENSE (section 2.2.2.6) structure.

Sent by the client.

Value

Meaning

LICENSE_INFO

0x12

The Licensing PDU is a License Info PDU, and the LicensingMessage contains a CLIENT_LICENSE_INFO (section 2.2.2.3) structure.

NEW_LICENSE_REQUEST

0x13

The Licensing PDU is a New License Request PDU, and the LicensingMessage contains a CLIENT_NEW_LICENSE_REQUEST (section 2.2.2.2) structure.

PLATFORM_CHALLENGE_RESPONSE

0x15

The Licensing PDU is a Platform Challenge Response PDU, and the LicensingMessage contains a CLIENT_PLATFORM_CHALLENGE_RESPONSE (section 2.2.2.5) structure.

Sent by either the client or the server.

Value

Meaning

ERROR_ALERT

0xFF

The Licensing PDU is a Licensing Error Message PDU, and the LicensingMessage contains a LICENSE_ERROR_MESSAGE (section 2.2.2.8) structure.