Expand description
ParticipantMessageData Wire-Encoding (DDSI-RTPS 2.5 §9.6.3.1).
Payload-Struktur des Writer-Liveliness-Protocols (WLP, §8.4.13).
Wird vom BUILTIN_PARTICIPANT_MESSAGE_WRITER als DATA-Submessage
im Topic DCPSParticipantMessage periodisch publiziert. Reader
nutzen den Empfang als implicit assert_liveliness() und treiben
damit das Lease-Tracking pro Peer-Participant.
§Wire-Layout (§9.6.3.1)
struct ParticipantMessageData {
GUID_t participantGuidPrefix; // 12 byte (GuidPrefix only!)
octet kind[4]; // 4 byte u32 (BE/LE per CDR)
sequence<octet> data; // 4 byte length + N byte
};Spec-Pitfall: trotz Feldname participantGuidPrefix wird in der
Praxis von Cyclone DDS und Fast-DDS ein voller 16-Byte-Guid
geschickt (Prefix + ENTITYID_PARTICIPANT). Wir schreiben deshalb
16 Byte und parsen tolerant: 16 Byte → Voll-Guid, 12 Byte →
Prefix-Only.
Die data-Sequenz ist semantisch eine vec<octet> mit voran-
gestellter 32-Bit-Laenge. Spec §9.6.3.1 definiert sie als opaque
Token; ZeroDDS nutzt sie fuer MANUAL_BY_TOPIC, um den Topic-Token
zu transportieren (Topic-Hash-Fingerprint).
§CDR-Encoding
Encoded als XCDR1 Plain (Encapsulation 0x0000 BE / 0x0001 LE) bzw. XCDR2 Plain (0x0006 BE / 0x0007 LE). Cyclone schickt das Topic per Default als XCDR1 Plain. Wir akzeptieren alle vier Encapsulation-Kinds und schreiben per Default LE.
§DoS-Caps
data.len() ist auf MAX_DATA_LEN = 4096 Byte gedeckelt.
Encoder kuerzt nicht — Caller muss vor Aufruf cappen — Decoder
lehnt ueberlange Daten mit WireError::ValueOutOfRange ab.
Structs§
- Participant
Message Data ParticipantMessageData(DDSI-RTPS 2.5 §9.6.3.1) — Payload desDCPSParticipantMessage-Topics.
Constants§
- ENCAPSULATION_
CDR2_ BE - CDR-Encapsulation-Header: XCDR2 Plain Big-Endian (
0x0006). - ENCAPSULATION_
CDR2_ LE - CDR-Encapsulation-Header: XCDR2 Plain Little-Endian (
0x0007). - ENCAPSULATION_
CDR_ BE - CDR-Encapsulation-Header: XCDR1 Plain Big-Endian (
0x0000). - ENCAPSULATION_
CDR_ LE - CDR-Encapsulation-Header: XCDR1 Plain Little-Endian (
0x0001). - MAX_
DATA_ LEN - DoS-Cap fuer
data-Sequenz (Topic-Token / vendor opaque). Bewusst klein gewaehlt — WLP-Heartbeats sollen leicht sein, ein Peer der mehr schickt ist entweder buggy oder bösartig. - PARTICIPANT_
MESSAGE_ DATA_ KIND_ AUTOMATIC_ LIVELINESS_ UPDATE - Spec-defined
kindCode: AUTOMATIC_LIVELINESS_UPDATE (§9.6.3.1). Wird vom Builtin-WLP-Writer geschickt, wenn LIVELINESS=AUTOMATIC. - PARTICIPANT_
MESSAGE_ DATA_ KIND_ MANUAL_ BY_ PARTICIPANT_ LIVELINESS_ UPDATE - Spec-defined
kindCode: MANUAL_BY_PARTICIPANT_LIVELINESS_UPDATE (§9.6.3.1). Getrigger durchassert_liveliness()aufDomainParticipant. - PARTICIPANT_
MESSAGE_ DATA_ KIND_ VENDOR_ BASE - Vendor-Specific-Kind-Range: oberstes Bit gesetzt
(
0x80000000..=0xFFFFFFFF). Spec §9.6.3.1 reserviert dies fuer Vendor-eigene Kinds (z.B. ZeroDDS-MANUAL_BY_TOPIC mit Topic-Token in derdata-Sequenz). - PARTICIPANT_
MESSAGE_ DATA_ KIND_ ZERODDS_ MANUAL_ BY_ TOPIC - ZeroDDS-Vendor-Kind: MANUAL_BY_TOPIC. Wird durch
DataWriter::assert_liveliness()getriggert; diedata-Sequenz traegt einen Topic-Token (typisch 4-Byte-Hash). Cyclone-Peers ignorieren das Vendor-Kind (Spec §9.6.3.1: “If kind has its MSB set, implementations not understanding the kind shall ignore the message”).