3.1.5.14 Receiving a $C (Stream Change Notification) Packet
The client MUST verify that the $C packet adheres to the syntax specified in section 2.2.3.2.
If the value of the Reason field in the $C packet specifies an error HRESULT code, the client MUST report this event to the higher layer.
If the value of the Reason field in the $C packet is equal to 0x400D14BE, the client MUST set the value of the Client-State variable to IDLE and report this event to the higher layer.
If the value of the Reason field in the $C packet is not equal to 0x400D14BE, and does not specify an error HRESULT code, and if the Server-Features variable specifies that the server will use the com.microsoft.wm.predstrm feature defined in section 2.2.1.7.2, the value of the Client-State variable MUST be set to STREAMING. In any other case, the value of the State variable MUST be IDLE.
If the value of the Client-State variable is IDLE and the Keepalive timer is running, it MUST be restarted. If the value of the State variable is IDLE and the Keepalive timer is not running, it MUST be started.
If the value of the Reason field in the $C packet is equal to 0x400D14BE, the client MUST wait for a higher-layer event. No packets are expected at this point.
Otherwise, if the server's product name is "Cougar" and the version number is greater than or equal to 9.0 according to the Server-Version variable, the client MUST set the value of the Expected-Packets variable to $M and process the rules in section 3.1.5.2.
Otherwise, if the server's version number is greater than or equal to 9.0, the client MUST set the value of the Expected-Packets variable to $H, $M and then process the rules specified in section 3.1.5.2.
Otherwise, the client MUST set the value of the Expected-Packets variable to $H and process the rules in section 3.1.5.2.