2.2.8.1.2 Client Fast-Path Input Event PDU (TS_FP_INPUT_PDU)

The Fast-Path Input Event PDU is used to transmit input events from client to server.<34> Fast-path revises client input packets from the first byte with the goal of improving bandwidth. The TPKT Header ([T123] section 8), X.224 Class 0 Data TPDU ([X224] section 13.7), and MCS Send Data Request ([T125] section 11.32) are replaced; the Security Header (section 2.2.8.1.1.2) is collapsed into the fast-path input header, and the Share Data Header (section 2.2.8.1.1.1.2) is replaced by a new fast-path format. The contents of the input notification events (section 2.2.8.1.1.3.1.1) are also changed to reduce their size, particularly by removing or reducing headers. Support for fast-path input is advertised in the Input Capability Set (section 2.2.7.1.6).


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

fpInputHeader

length1

length2 (optional)

fipsInformation (optional)

...

dataSignature (optional)

...

...

numEvents (optional)

fpInputEvents (variable)

...

fpInputHeader (1 byte): An 8-bit, unsigned integer. One-byte, bit-packed header. This byte coincides with the first byte of the TPKT Header ([T123] section 8). Three pieces of information are collapsed into this byte:

  • Security flags

  • Number of events in the fast-path input PDU

  • Action code

The format of the fpInputHeader byte is described by the following bitmask diagram.


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

action

numEvents

flags

action (2 bits): A 2-bit, unsigned integer that indicates whether the PDU is in fast-path or slow-path format.

Value (2 bits)

Meaning

FASTPATH_INPUT_ACTION_FASTPATH

0x0

Indicates the PDU is a fast-path input PDU.

FASTPATH_INPUT_ACTION_X224

0x3

Indicates the presence of a TPKT Header initial version byte, which indicates that the PDU is a slow-path input PDU (in this case the full value of the initial byte MUST be 0x03).

numEvents (4 bits): A 4-bit, unsigned integer that collapses the number of fast-path input events packed together in the fpInputEvents field into 4 bits if the number of events is in the range 1 to 15. If the number of input events is greater than 15, then the numEvents bit field in the fast-path header byte MUST be set to zero, and the numEvents optional field inserted after the dataSignature field. This allows up to 255 input events in one PDU.

flags (2 bits): A 2-bit, unsigned integer that contains the flags describing the cryptographic parameters of the PDU.

Flag (2 bits)

Meaning

FASTPATH_INPUT_SECURE_CHECKSUM

0x1

Indicates that the MAC signature for the PDU was generated using the "salted MAC generation" technique (section 5.3.6.1.1). If this bit is not set, then the standard technique was used (sections 2.2.8.1.1.2.2 and 2.2.8.1.1.2.3).

FASTPATH_INPUT_ENCRYPTED

0x2

Indicates that the PDU contains an 8-byte MAC signature after the optional length2 field (that is, the dataSignature field is present) and the contents of the PDU are encrypted using the negotiated encryption package (sections 5.3.2 and 5.3.6).

length1 (1 byte): An 8-bit, unsigned integer. If the most significant bit of the length1 field is not set, then the size of the PDU is in the range 1 to 127 bytes and the length1 field contains the overall PDU length (the length2 field is not present in this case). However, if the most significant bit of the length1 field is set, then the overall PDU length is given by the low 7 bits of the length1 field concatenated with the 8 bits of the length2 field, in big-endian order (the length2 field contains the low-order bits). The overall PDU length SHOULD be less than or equal to 16,383 bytes.

length2 (1 byte): An 8-bit, unsigned integer. If the most significant bit of the length1 field is not set, then the length2 field is not present. If the most significant bit of the length1 field is set, then the overall PDU length is given by the low 7 bits of the length1 field concatenated with the 8 bits of the length2 field, in big-endian order (the length2 field contains the low-order bits). The overall PDU length SHOULD be less than or equal to 16,383 bytes.

fipsInformation (4 bytes): An optional Fast-Path FIPS Information (section 2.2.8.1.2.1) structure, present when the Encryption Method selected by the server (sections 5.3.2 and 2.2.1.4.3) is ENCRYPTION_METHOD_FIPS (0x00000010).

dataSignature (8 bytes): MAC generated over the packet using one of the techniques described in section 5.3.6 (the FASTPATH_INPUT_SECURE_CHECKSUM flag, which is set in the fpInputHeader field, describes the method used to generate the signature). This field MUST be present if the FASTPATH_INPUT_ENCRYPTED flag is set in the fpInputHeader field.

numEvents (1 byte): An 8-bit, unsigned integer. The number of fast-path input events packed together in the fpInputEvents field (up to 255). This field is present if the numEvents bit field in the fast-path header byte is zero.

fpInputEvents (variable): An array of Fast-Path Input Event (section 2.2.8.1.2.2) structures to be processed by the server. The number of events present in this array is given by the numEvents bit field in the fast-path header byte, or by the numEvents field in the Fast-Path Input Event PDU (if it is present).