Skip to main content

Crate zerodds_xrce

Crate zerodds_xrce 

Source
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 scheme 7400 + 4 * domainId + offset.

§Scope (C6.2.B — object model + reliable stack)

  • ObjectId / ObjectKind / ObjectVariant (§7.2 + §7.7).
  • ObjectStore (§7.5): per-client BTreeMap<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) on 239.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 via zerodds-xml (DDS-XML loader).
  • to_create_messages: generates the CREATE submessage sequence in topological order (type → participant → topic → pub/sub → DataWriter/DataReader) with a RepresentationByXmlString body.

§Scope (C6.2.D — TCP/serial transports + TLS/DTLS)

  • transport_tcp (§11.3): XrceTcpClient/XrceTcpServer with 2-byte length-prefix framing.
  • transport_serial (Annex C): HDLC-like frame codec with byte stuffing + CRC-16-CCITT-FALSE; streaming reassembly via SerialFramer. Real serial IO is out of scope (no serialport crate dep).
  • transport_tls: trait + skeleton for TLS-on-TCP (plug-in later).
  • transport_dtls: DtlsLayer trait + DummyDtls pass-through; a real DTLS lib (e.g. webrtc-dtls) comes deployment-specific.
  • TransportLocatorTcp + TransportLocatorSerial as additional locator variants (discriminator 0x04/0x05).

§Deliberately not implemented

  • Real serial port IO (no serialport crate 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).