Source: eProsima ( Jaime Martin-Losa)
According to the specification, the `MessageHeader` interpretation depends on whether the following submessage is an `ACKNACK` or a `HEARTBEAT` submessage.
In this case, the `sequenceNr` shall be interpreted as an epoch that may be used to discard the duplicate message.
This dichotomy allows us to save bandwidth but it has some drawbacks.
On the one hand, it prevents to send multiple `ACKNACK` and `HEARTBEAT` submessages, which refer to different streams, in a single message.
On the other hand, it obfuscates the message handling because it is not enough to read the `MessageHeader` in order to discard, process, or buffer the message into the stream, but it is necessary to read the first `SubmessageHeader`.
In order to avoid the aforementioned drawbacks, the following modifications are purposed:
1. Add a `stream_id` member to `ACKNACK` and `HEARTBEAT` submessages.
2. Use the stream 0 (`STREAMID_NONE`) since `ACKNACK` and `HEARTBEAT` submessage do not belong to any stream, but they inform about the state of the streams.
This modification allows sending multiple `ACKNACK` and `HEARTBEAT` submessages in a single message and it simplifies the message handling.
Reported: DDS-XRCE 1.0b1 — Tue, 18 Dec 2018 11:16 GMT
Disposition: Resolved — DDS-XRCE 1.0
Add StreamId to ACKNACK and HEARTBEAT
Do as proposed in the issue description
Updated: Tue, 8 Oct 2019 17:54 GMT