rtps-parser 0.1.0

RTPS protocol parser library in pure Rust
Documentation

RTPS protocol parser for Rust

This library implements message parsing for the RTPS protocol written in Rust.

DDS is a middleware protocol and API standard for data-centric connectivity. The main goal of DDS is to share the right data at the right place at the right time, even between time-decoupled publishers and consumers.

This library uses the code of (https://github.com/s2e-systems/dust-dds)[Dust DDS], an awesome DDS library written in Rust. The motivation for this code extraction is to make the RTPS packet parsing capabilities available for other programs. For example a DDS middleware can inspect the RTPS messages, modify them on the fly or drop them based on some firewal logic.

Example

Say you have a byte slice and you want to read its content:

let data = Arc::new([
    b'R', b'T', b'P', b'S', // Protocol
    2, 3, 9, 8, // ProtocolVersion | VendorId
    3, 3, 3, 3, // GuidPrefix
    3, 3, 3, 3, // GuidPrefix
    3, 3, 3, 3, // GuidPrefix
    0x15, 0b_0000_0011, 40, 0, // Submessage header
    0, 0, 16, 0, // extraFlags, octetsToInlineQos
    1, 2, 3, 4, // readerId: value[4]
    6, 7, 8, 9, // writerId: value[4]
    0, 0, 0, 0, // writerSN: high
    5, 0, 0, 0, // writerSN: low
    6, 0, 4, 0, // inlineQos: parameterId_1, length_1
    10, 11, 12, 13, // inlineQos: value_1[length_1]
    7, 0, 4, 0, // inlineQos: parameterId_2, length_2
    20, 21, 22, 23, // inlineQos: value_2[length_2]
    1, 0, 1, 0, // inlineQos: Sentinel
    0x07, 0b_0000_0101, 28, 0, // Submessage header
    1, 2, 3, 4, // readerId: value[4]
    6, 7, 8, 9, // writerId: value[4]
    0, 0, 0, 0, // firstSN: SequenceNumber: high
    5, 0, 0, 0, // firstSN: SequenceNumber: low
    0, 0, 0, 0, // lastSN: SequenceNumberSet: high
    7, 0, 0, 0, // lastSN: SequenceNumberSet: low
    2, 0, 0, 0, // count: Count: value (long)
]);
let msg = RtpsMessageRead::new(data);
println!("Received {} submessages", msg.submessages().len());

License

This project keeps the license of the original work and is licensed under the Apache License Version 2.0.