Expand description
DDS-XRCE Wire-Codec (OMG formal/2020-11-01).
Crate zerodds-xrce. Safety classification: SAFE.
See docs/architecture/02_architecture.md §3 and
docs/architecture/04_safety_by_architecture.md §2.
§Scope (C6.2.A — wire-lite + UDP mapping)
MessageHeader(§8.3.2): SessionId/StreamId/SequenceNr + optional ClientKey.SubmessageHeader(§8.3.4): SubmessageId, flags, length.- 16 submessages (§8.3.5): CREATE_CLIENT, CREATE, GET_INFO, DELETE, STATUS_AGENT, STATUS, INFO, WRITE_DATA, READ_DATA, DATA, ACKNACK, HEARTBEAT, RESET, FRAGMENT, TIMESTAMP, TIMESTAMP_REPLY.
SerialNumber16: RFC-1982 comparator (§8.3.2.3).XrceUdpSender/recv_message(§11.2): UDP transport mapping with the default port scheme7400 + 4 * domainId + offset.
§Scope (C6.2.B — object model + reliable stack)
ObjectId/ObjectKind/ObjectVariant(§7.2 + §7.7).ObjectStore(§7.5): per-clientBTreeMap<ObjectId, Instance>with CREATE reuse/replace semantics.ReliableStreamState(§8.4.10/§8.4.11): sender + receiver with HEARTBEAT tick and ACKNACK bitmap.FragmentAssembler(§8.4.13) with DoS caps + GC.ReadStream(§8.4.14): continuous read with a rate limiter.TransportLocator(§7.7.4): Small/Medium/Large/String.MulticastDiscovery(§11.2.4) on239.255.0.2:7400.
§Scope (C6.2.C — XML/file configuration)
XrceConfig(§7.7.3 + §9.3): object hierarchy loader for<dds><participant>...</participant></dds>with type/QoS-profile reuse viazerodds-xml(DDS-XML loader).to_create_messages: generates the CREATE submessage sequence in topological order (type → participant → topic → pub/sub → DataWriter/DataReader) with aRepresentationByXmlStringbody.
§Scope (C6.2.D — TCP/serial transports + TLS/DTLS)
transport_tcp(§11.3):XrceTcpClient/XrceTcpServerwith 2-byte length-prefix framing.transport_serial(Annex C): HDLC-like frame codec with byte stuffing + CRC-16-CCITT-FALSE; streaming reassembly viaSerialFramer. Real serial IO is out of scope (noserialportcrate dep).transport_tls: trait + skeleton for TLS-on-TCP (plug-in later).transport_dtls:DtlsLayertrait +DummyDtlspass-through; a real DTLS lib (e.g.webrtc-dtls) comes deployment-specific.TransportLocatorTcp+TransportLocatorSerialas additional locator variants (discriminator 0x04/0x05).
§Deliberately not implemented
- Real serial port IO (no
serialportcrate dep). - A real TLS/DTLS engine (plug-in later).
- ROS2 bridge.
- Live reload / hot swap of the XML config (stretch).
Re-exports§
pub use error::XrceError;pub use header::CLIENT_KEY_LEN;pub use header::ClientKey;pub use header::MessageHeader;pub use header::SESSION_ID_NONE_WITH_CLIENT_KEY;pub use header::SESSION_ID_NONE_WITHOUT_CLIENT_KEY;pub use header::SessionId;pub use header::StreamId;pub use serial_number::SerialNumber16;pub use submessages::DOSC_MAX_PAYLOAD_SIZE;pub use submessages::DOSC_MAX_SUBMESSAGES;pub use submessages::FLAG_E_LITTLE_ENDIAN;pub use submessages::Message;pub use submessages::Submessage;pub use submessages::SubmessageHeader;pub use submessages::SubmessageId;pub use transport_udp::XrceUdpSender;pub use transport_udp::agent_default_port;pub use transport_udp::client_default_port;pub use transport_udp::recv_message;pub use transport_udp::send_message;pub use continuous_read::DeliveryControl;pub use continuous_read::PendingSample;pub use continuous_read::ReadStream;pub use discovery::MulticastDiscovery;pub use discovery::XRCE_DISCOVERY_GROUP;pub use discovery::XRCE_DISCOVERY_PORT;pub use fragment::AssemblerKey;pub use fragment::FragmentAssembler;pub use fragment::MAX_FRAGMENTS_PER_STREAM;pub use fragment::MAX_PENDING_STREAMS;pub use fragment::MAX_TOTAL_PAYLOAD;pub use object_id::KIND_MASK_BIT;pub use object_id::OBJECTID_AGENT;pub use object_id::OBJECTID_CLIENT;pub use object_id::OBJECTID_INVALID;pub use object_id::ObjectId;pub use object_kind::OBJK_AGENT;pub use object_kind::OBJK_APPLICATION;pub use object_kind::OBJK_CLIENT;pub use object_kind::OBJK_DATAREADER;pub use object_kind::OBJK_DATAWRITER;pub use object_kind::OBJK_DOMAIN;pub use object_kind::OBJK_INVALID;pub use object_kind::OBJK_PARTICIPANT;pub use object_kind::OBJK_PUBLISHER;pub use object_kind::OBJK_QOSPROFILE;pub use object_kind::OBJK_SUBSCRIBER;pub use object_kind::OBJK_TOPIC;pub use object_kind::OBJK_TYPE;pub use object_kind::ObjectKind;pub use object_repr::ObjectVariant;pub use object_repr::REPR_MAX_INLINE_BYTES;pub use object_store::CreateOutcome;pub use object_store::CreationMode;pub use object_store::ObjectInstance;pub use object_store::ObjectStore;pub use reliable::DEFAULT_HEARTBEAT_PERIOD;pub use reliable::RECEIVER_BUFFER_CAP;pub use reliable::RELIABLE_MAX_PAYLOAD;pub use reliable::ReliableConfig;pub use reliable::ReliableStreamState;pub use reliable::SENDER_WINDOW_CAP;pub use transport_dtls::DtlsError;pub use transport_dtls::DtlsLayer;pub use transport_dtls::DummyDtls;pub use transport_locator::TRANSPORT_LOCATOR_SERIAL_DEVICE_MAX;pub use transport_locator::TRANSPORT_LOCATOR_STRING_MAX;pub use transport_locator::TransportLocator;pub use transport_locator::TransportLocatorLarge;pub use transport_locator::TransportLocatorMedium;pub use transport_locator::TransportLocatorSerial;pub use transport_locator::TransportLocatorSmall;pub use transport_locator::TransportLocatorTcp;pub use transport_serial::ESCAPE_BYTE;pub use transport_serial::FLAG_BYTE;pub use transport_serial::STUFF_XOR;pub use transport_serial::SerialError;pub use transport_serial::SerialFramer;pub use transport_serial::crc16_ccitt_false;pub use transport_serial::decode_frame as serial_decode_frame;pub use transport_serial::decode_frame_inner as serial_decode_frame_inner;pub use transport_serial::encode_message as serial_encode_message;pub use transport_serial::encode_payload as serial_encode_payload;pub use transport_tcp::TCP_LENGTH_PREFIX_SIZE;pub use transport_tcp::XrceTcpClient;pub use transport_tcp::XrceTcpServer;pub use transport_tls::XrceTlsClient;pub use transport_tls::XrceTlsServer;pub use transport_tls::XrceTlsStream;pub use xml_config::load_xrce_config_from_file;pub use xml_config::CreateMessage;pub use xml_config::DataReaderConfig;pub use xml_config::DataWriterConfig;pub use xml_config::InMemoryQosResolver;pub use xml_config::MAX_HIERARCHY_DEPTH;pub use xml_config::MAX_TYPES_PER_FILE;pub use xml_config::ParticipantConfig;pub use xml_config::PublisherConfig;pub use xml_config::QosProfileResolver;pub use xml_config::SubscriberConfig;pub use xml_config::TopicConfig;pub use xml_config::TypeConfig;pub use xml_config::XrceConfig;pub use xml_config::XrceXmlError;pub use xml_config::load_xrce_config;
Modules§
- continuous_
read - Continuous-Read-Mode (Spec §8.4.14).
- discovery
- XRCE Multicast-Discovery (Spec §11.2.4).
- encoding
- Endianness helpers for XRCE submessage bodies.
- error
- XRCE wire format errors.
- fragment
- XRCE FRAGMENT-Reassembler (Spec §8.4.13).
- header
- XRCE Message-Header (Spec §8.3.2).
- object_
id ObjectId(Spec §7.2.1).- object_
info - XRCE object-repr types from Spec §7.7.7 - §7.7.13.
- object_
kind - XRCE-Object-Kinds (Spec §7.2 Table 4).
- object_
repr ObjectVariant-Representations (Spec §7.7).- object_
store ObjectStore— per-client object lifecycle (Spec §7.5).- reliable
- XRCE Reliable-Stream-State-Machine (Spec §8.4.10/§8.4.11).
- serial_
number - RFC-1982 serial number arithmetic for XRCE sequence numbers (Spec §8.3.2.3).
- submessages
- XRCE-Submessage-Wire-Format (Spec §8.3.4 + §8.3.5).
- transport_
dtls - XRCE DTLS wrapper for UDP (Spec §11.5).
- transport_
locator TransportLocator-Wire-Encoding (Spec §7.7.4).- transport_
serial - XRCE Serial-Transport-Framer (Spec Annex C, RFC 1662 PPP/HDLC-Framing).
- transport_
tcp - XRCE TCP-Transport-Mapping (Spec §11.3).
- transport_
tls - XRCE TLS wrapper for TCP (Spec §11.3 + §11.4).
- transport_
udp - XRCE UDP-Transport-Mapping (Spec §11.2).
- xml_
config - XRCE XML file configuration (Spec §7.7.3 + §9.3).