2.2.3 DXDiag DirectPlay Packets

DirectPlay DXDiag Usage Protocol packets beginning with a zero byte are used to locate game sessions and to test network paths for peer connection attempts. Packets that have a nonzero first byte are part of an actively managed connection and are further divided into command, user data, and ACK packet types.

A packet's purpose is determined by a combination of its command values, extended operation code values, or flag values within the packet header. For user data transport packets, the first byte that follows the 4-byte header declares the type of information included in the packet.

The DirectPlay DXDiag Usage Protocol uses the following packets.

Packet

Description

EnumQuery

Enumerates hosting servers.

EnumResponse

Responds to an enumeration request.

SESS_PATH_TEST

Circumvents issues with network address translation (NAT) devices.

TRANS_USERDATA_HEADER

Transport packet header that contains command, control, and acknowledgment information.

TRANS_USERDATA_PLAYER_CONNECT_INFO

Sends client connection information to the host.

TRANS_USERDATA_SEND_SESSION_INFO

Relays game session information from the server to the client.

TRANS_USERDATA_ACK_SESSION_INFO

Sent from the client to the server to acknowledge the receipt of connection information.

TRANS_USERDATA_INSTRUCT_CONNECT

Instructs a client to connect to a designated client.

TRANS_USERDATA_NAMETABLE_VERSION

Specifies the version number of the name table.

TRANS_USERDATA_REQ_NAMETABLE_OP

Instructs a client to send name table information to the host.

TRANS_USERDATA_ACK_NAMETABLE_OP

Transmits name table information from a client to the host.

TRANS_USERDATA_RESYNC_VERSION

Requests that the name table version number be resynchronized to the current version number.

TRANS_USERDATA_SEND_PLAYER_DNID

Sends a user identification number to another client.

TRANS_USERDATA_KEEPALIVE

Used by DXDiag to calculate an RTT.

TRANS_USERDATA_CONNECT_ATTEMPT_FAILED

Indicates that a peer in the game session is unable to connect to a new peer.

TRANS_USERDATA_CONNECT_FAILED

Indicates that a connection attempt failed.

TRANS_USERDATA_TERMINATE_SESSION

Instructs a client to disconnect from the game session.

TRANS_USERDATA_INSTRUCTED_CONNECT_FAILED

Indicates that a client was unable to carry out a server's instruction to connect to a new client.

TRANS_USERDATA_HOST_MIGRATE

Indicates that host migration is enabled and that the host server is terminating.

TRANS_USERDATA_HOST_MIGRATE_COMPLETE

Informs clients that the game session-hosting responsibilities have successfully migrated from the departing host.

TRANS_USERDATA_ADD_PLAYER

Instructs clients to add the specified client to the game session.

TRANS_USERDATA_DESTROY_PLAYER

Instructs clients to remove the specified user from the name table.

TRANS_USERDATA_END_OF_STREAM

Signals the disconnection of a user.

TRANS_USERDATA_REQ_INTEGRITY_CHECK

Requests that a host determine if a target client is still in the game session.

TRANS_USERDATA_INTEGRITY_CHECK

Requests that a client validate that it is still in the game session.

TRANS_USERDATA_INTEGRITY_CHECK_RESPONSE

Response from a client validating that it is still in the game session.

TRANS_USERDATA_SEND_MESSAGE

Transmits a chat message to all other users in the game session.

TRANS_COMMAND_CONNECT

Requests a connection.

TRANS_COMMAND_CONNECT_ACCEPT

Accepts a connection request.

TRANS_COMMAND_SACK

Acknowledges outstanding packets.

To reduce network traffic, several DirectPlay TRANS_USERDATA packets can be fused into a single packet using a special coalesced payload, as defined in section 2.2.17.1. TRANS_USERDATA packets that have the PACKET_COMMAND_USER1 or PACKET_COMMAND_USER2 flag set in the bCommand field of the TRANS_USERDATA_HEADER packet header can be coalesced.