3.1.5.1.1 Identifying Packet Type

A packet is identified by inspecting the BaseHeader ([MS-MQMQ] section 2.2.19.1) and possibly subsequent packet headers. The following list describes how to identify each packet type.

EstablishConnection Packet (section 2.2.3): The BaseHeader.Flags.IN field MUST be set, and the InternalHeader.Flags.PT field MUST be set to 0x2.

ConnectionParameters Packet (section 2.2.2): The BaseHeader.Flags.IN field MUST be set, and the InternalHeader.Flags.PT field MUST be set to 0x3.

SessionAck Packet (section 2.2.6): The BaseHeader.Flags.IN and BaseHeader.Flags.SH fields MUST be set, and the InternalHeader.Flags.PT field MUST be set to 0x1.

OrderAck Packet (section 2.2.4): All bits in the BaseHeader.Flags field MUST be set to 0. The UserMessage.UserHeader.DestinationQueue field MUST address the message to the local private queue named "order_queue$". The UserMessage.MessagePropertiesHeader.Label field MUST be set to "QM Ordering Ack". The UserMessage.MessagePropertiesHeader.MessageSize field MUST be set to 0x00000024. The UserMessage.MessagePropertiesHeader.MessageClass field MUST be set to MQMSG_CLASS_ORDER_ACK.

FinalAck Packet (section 2.2.5): All bits in the BaseHeader.Flags field MUST be set to 0. The UserMessage.UserHeader.DestinationQueue field MUST address the local private queue named "order_queue$". The UserMessage.MessagePropertiesHeader.Label field MUST be set to "QM Ordering Ack". The UserMessage.MessagePropertiesHeader.MessageClass field MUST be set to one of the values that is not less than 0x4000, as specified in [MS-MQMQ] section 2.2.18.1.6.

UserMessage Packet ([MS-MQMQ] section2.2.20): The BaseHeader.Flags.IN bit field MUST be set to 0, and the UserMessage.MessagePropertiesHeader.MessageClass field MUST be set to MQMSG_CLASS_NORMAL.

Ping Messages (section 2.1.2) are generated and handled separately from other packets and are sent to different ports from other packets, as described in section 2.1.2. Only Ping Packets (section 2.2.7) can be received on these ports.