stream-level SENDME recv window accounting is incorrect with packing and fragmentation (prop340)
stream-level SENDME recv windows are currently updated in StreamReader::recv_raw
, decrementing once per message. They should instead be decremented per cell, which won't be the same thing once packing and fragmentation are enabled (prop340).
In particular:
- If an incoming cell contains two DATA messages for the same stream, the window should only be decremented once (pending clarification in torspec!265 (merged)). The current code will decrement it twice.
- If we implement a message that both counts towards windows and can be fragmented (such as DATAGRAM), the window should be decremented once per cell, not just once for the whole message.
cc @dgoulet
See also #1067