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. Siehe docs/architecture/02_architecture.md §3 und docs/architecture/04_safety_by_architecture.md §2.

§Scope (C6.2.A — Wire-Lite + UDP-Mapping)

  • MessageHeader (§8.3.2): SessionId/StreamId/SequenceNr + optionalem 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 mit Default-Port-Schema 7400 + 4 * domainId + offset.

§Scope (C6.2.B — Object-Model + Reliable-Stack)

  • ObjectId / ObjectKind / ObjectVariant (§7.2 + §7.7).
  • ObjectStore (§7.5): pro-Client BTreeMap<ObjectId, Instance> mit CREATE-Reuse/Replace-Semantik.
  • ReliableStreamState (§8.4.10/§8.4.11): Sender + Receiver mit HEARTBEAT-Tick und ACKNACK-Bitmap.
  • FragmentAssembler (§8.4.13) mit DoS-Caps + GC.
  • ReadStream (§8.4.14): Continuous-Read mit Rate-Limiter.
  • TransportLocator (§7.7.4): Small/Medium/Large/String.
  • MulticastDiscovery (§11.2.4) auf 239.255.0.2:7400.

§Scope (C6.2.C — XML/File-Configuration)

  • XrceConfig (§7.7.3 + §9.3): Object-Hierarchy-Loader fuer <dds><participant>...</participant></dds> mit Type/QoS-Profile- Reuse via zerodds-xml (DDS-XML-Loader).
  • to_create_messages: generiert die CREATE-Submessage-Sequence in topologischer Reihenfolge (Type → Participant → Topic → Pub/Sub → DataWriter/DataReader) mit RepresentationByXmlString-Body.

§Scope (C6.2.D — TCP/Serial-Transports + TLS/DTLS)

  • transport_tcp (§11.3): XrceTcpClient/XrceTcpServer mit 2-Byte-Length-Prefix-Framing.
  • transport_serial (Annex C): HDLC-aehnlicher Frame-Codec mit Byte-Stuffing + CRC-16-CCITT-FALSE; Streaming-Reassembly via SerialFramer. Echte Serial-IO ist nicht im Scope (kein serialport-Crate-Dep).
  • transport_tls: Trait + Skeleton fuer TLS-on-TCP (Plug-In spaeter).
  • transport_dtls: DtlsLayer-Trait + DummyDtls-Pass-Through; echte DTLS-Lib (z.B. webrtc-dtls) kommt deployment-spezifisch.
  • TransportLocatorTcp + TransportLocatorSerial als zusaetzliche Locator-Varianten (Discriminator 0x04/0x05).

§Bewusst nicht implementiert

  • Echte Serialport-IO (kein serialport-Crate-Dep).
  • Echte TLS-/DTLS-Engine (Plug-In spaeter).
  • ROS2-Bridge.
  • Live-Reload / Hot-Swap der 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 fuer XRCE-Submessage-Bodies.
error
XRCE-Wire-Format-Fehler.
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-Typen aus 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 — pro-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 fuer 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 fuer 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 fuer 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).