1.7 Versioning and Capability Negotiation

This specification covers versioning issues in the following areas:

  • Supported Transports: This protocol is implemented on top of UDP but can be implemented on top of any connectionless, datagram-oriented protocol, as discussed in section 2.1.

  • Protocol Versions: The DirectPlay 8 Protocol has the following version levels for features:

    • Any version level between 0x00010000 and 0x00010004 implements the base features.

    • A version level of 0x00010005 implements the base features and adds support for coalescence.

    • A version level of 0x00010006 implements the base features, supports coalescence, and adds support for signing.

      The version level value is specified in the dwCurrentProtocolVersion field of the CONNECT, CONNECTED, or CONNECTED_SIGNED message. These features are defined in section 2.2.

  • Security and Authentication Methods: The DirectPlay 8 Protocol does not natively provide robust authentication or encryption. It provides optional signing mechanisms that can be used to mitigate denial-of-service attacks, as discussed in sections 3.1.4.4 and 3.1.5.2.7.

  • Capability Negotiation: This protocol detects some features by inspecting the dwCurrentProtocolVersion field in the CONNECT, CONNECTED, or CONNECTED_SIGNED messages, as described later in this section.

The fast, or full, signing packet authentication mechanisms are used to mitigate denial-of-service attacks. Both partners have to implement support for signing when sending messages and require the same support by received messages; otherwise, neither partner can make use of the signing functionality. For example, if a CONNECT packet with a version level of less than 0x00010006 (the version level that indicates support for signing) is received but the listener is using a signing mode, the receiver has to ignore the packet. Similarly, if the connector receives a CONNECTED packet instead of a CONNECTED_SIGNED packet but the connector is expecting to use signing mode, the connector has to ignore the response.

In order to use the coalescence mechanism to combine multiple, small messages into a single packet, the sender has to confirm whether the receiver will recognize the packet format. The receiver signals support for coalescence by specifying a version level value of 0x00010005 or higher in the dwCurrentProtocolVersion field of the CONNECT, CONNECTED, or CONNECTED_SIGNED message.