3.1.5.9.6 Processing a NACK Packet

The server MUST set MCLossRate (section 3.1.1.3) to ( LossRate field / 10000000000000000 ) (section 2.2.18) of the NACK packet if the ClientId field (section 2.2.18) of the NACK packet matches the MasterClientId (section 3.1.1.3).

If the ClientId field (section 2.2.18) of the NACK packet does not match the MasterClientId (section 3.1.1.3), then the server MUST proceed as specified in section 3.1.5.9.6.1.

The server MUST update CurrentWindowSize (section 3.1.1.3) as follows.

CurrentWindowSize = MAX( CurrentWindowSize x 0.75, 2 )

The server MUST construct an NCF packet (section 2.2.19) and set the RangeList (section 2.2.19.1) specified by the NACK packet into the NCF packet. The server MUST send the NCF packet to multicast address (section 3.1.1.1).

The server MUST go through each ODATASeqNo range specified by RangeList field (section 2.2.19.1) of the NACK packet and process them as specified below:

  1.  If an ODATA packet for the ODATASeqNo of the range does not exist in the Data Packet List (section 3.1.1.3), then the server MUST skip the ODATASeqNo and move on to the next ODATASeqNo.

  2.  If the LastSendTime of the ODATA packet entry in Data Packet List (section 3.1.1.3) specifies that the packet has been transmitted within a time equal to four times the round-trip of the Master Client (4 x MCRTT (section 3.1.1.3)), then the server MUST skip the ODATASeqNo and move on to the next ODATASeqNo.

  3.  The server MUST construct an RDATA packet (section 3.1.5.9.8) and send it to multicast address (section 3.1.1.1).

  4.  The server MUST set the LastSendTime for the entry in Data Packet List (section 3.1.1.3) to the server's local time.