OASIS AMQP 1.0 — Spec-Coverage
Spec: docs/standards/cache/oasis/amqp-1.0-{overview,types, transport,messaging,security}.html (OASIS Standard).
Folgt dem Format aus docs/spec-coverage/PROCESS.md.
Kontext: AMQP 1.0 ist die OASIS-Enterprise-Messaging-Spec
(RabbitMQ/ActiveMQ/Solace). ZeroDDS implementiert den Type System
(Spec amqp-1.0-types) und das Frame-Format (Spec
amqp-1.0-transport §2.3) als pure-Rust no_std+alloc Library im Crate
crates/amqp-bridge/. Performatives, Message-Sektionen, SASL-
Handshake sind Caller-Layer.
Implementation: crates/amqp-bridge/ (7 Module: types, extended_types,
frame, performatives, sections, codec_profile, lib).
Test-Lauf: cargo test -p zerodds-amqp-bridge — 188 Tests grün, davon
82 lib-Inline-Tests (codec_profile 5, extended_types 29, frame 9,
performatives 11, sections 10, types 18), 90 Integration in
tests/boundary_decoders.rs (TS-1-Finding-7-Reaktion: Boundary-
Checks gegen Mutation-Testing), 8 in tests/fuzz_smoke.rs, 8 in
tests/proptest_roundtrip.rs. Hinweis: codec_profile.rs-Tests
gehören zum dds-amqp-Vendor-Profile (Spec-Coverage in
dds-amqp-1.0.md §2.3/§2.4), nicht zur OASIS-AMQP-1.0.
amqp-1.0-overview
§1 Foreword + §2 Conformance
Spec: Overview Document — beschreibt die Modell-Schichten (Network → Frame → Performative → Message).
Repo: Crate-Doc.
Tests: —
Status: n/a (informative)
amqp-1.0-types
§1.1 Type System (Primitive/Described/Composite/Restricted)
Spec: amqp-1.0-types §1.1 — vier Type-Kategorien.
Repo: Alle vier Kategorien spec-konform abgedeckt:
- Primitive (§1.6): vollstaendig in types.rs::FormatCode mit
allen 30+ Wire-Codes.
- Described (§1.3): per-Performative-Encoder in
performatives.rs (0x00-Descriptor-Marker + Descriptor-Value);
generic Described-Composite ist nicht eigenstaendig exponiert,
weil DDS-AMQP-Bridge nur fixed Performatives + Type-Liste nutzt.
- Composite (§1.4): per-Performative-List-Body in
performatives.rs + Composite-Type-Mapping in
crates/amqp-bridge/src/extended_types.rs::§7.2.
- Restricted (§1.5): Domain-Restricted-Types
(milliseconds, seconds, ietf-language-tag,
iso-8859-1, symbol) via extended_types.rs mit
Constraint-Validierung.
Tests: Cross-Ref §1.3-§1.6 + Inline-Tests in performatives.rs,
extended_types.rs, types.rs.
Status: done — alle vier Type-Kategorien spec-konform; generic Described-/Composite-Layer ist per-Performative-eingebaut, nicht generisch (legitime Architektur-Wahl fuer fixed-Profile-Bridge).
§1.2 Type Encodings (Fixed/Variable/Compound/Array)
Spec: amqp-1.0-types §1.2 — Format-Code-Subcategories
(§1.2.1 Fixed Width, §1.2.2 Variable Width, §1.2.3 Compound,
§1.2.4 Array).
Repo: crates/amqp-bridge/src/types.rs::FormatCode::from_byte
klassifiziert Bytes nach Subkategorie (Spec Table 1-1).
Tests: types::tests::format_code_categorizes_correctly.
Status: done
§1.3 Type Notation
Spec: amqp-1.0-types §1.3 — Notation für Spec-internes
Type-Documentation: §1.3.1 Primitive Type Notation,
§1.3.2 Composite Type Notation, §1.3.3 Descriptor Notation,
§1.3.4 Field Notation, §1.3.5 Restricted Type Notation.
Repo: —
Tests: —
Status: n/a (informative) — Notations-Konvention für die Spec-PDF; keine Code-Pflicht.
§1.4 Composite Type Representation
Spec: amqp-1.0-types §1.4 — wie composite-types als List-
of-fields encoded werden.
Repo: crates/amqp-bridge/src/performatives.rs und
crates/amqp-bridge/src/sections.rs nutzen das Pattern (described-
composite mit Descriptor + List-Body); siehe §2.7 / §3.
Tests: Cross-Ref §2.7 und §3.
Status: done — Composite-Type-Encoding-Pattern (Descriptor + List-Body) ist via Performatives + Message-Sections abgedeckt.
§1.5 Descriptor Values
Spec: amqp-1.0-types §1.5 — Descriptor-Form: ulong-Code oder
symbolic-Name. Descriptor-Code-Allocation für Spec-Domains.
Repo: crates/amqp-bridge/src/performatives.rs (Descriptor-Codes
0x10-0x18 für die 9 Performatives), crates/amqp-bridge/src/sections.rs
(Codes 0x70-0x78 für Message-Sections).
Tests: performatives::tests::open_descriptor_is_0x10,
begin_descriptor_is_0x11, all_nine_descriptors_have_unique_values,
sections::tests::all_seven_sections_have_unique_order_indexes.
Status: done
§1.6.1 null
Spec: null = 0x40 (fixed-0).
Repo: crates/amqp-bridge/src/types.rs::encode_null.
Tests: types::tests::null_encodes_to_single_byte_0x40,
round_trip_all_primitive_values.
Status: done
§1.6.2 boolean
Spec: boolean = 0x56 + 1 byte oder kompakt 0x41/0x42.
Repo: crates/amqp-bridge/src/types.rs::encode_boolean (kompakte
Form); Decoder akzeptiert beide.
Tests: types::tests::boolean_uses_compact_format_codes,
round_trip_all_primitive_values.
Status: done
§1.6.3 ubyte
Spec: §1.6.3 — ubyte (0x50) = “Integer in the range 0 to
2^8 - 1 inclusive.”
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_ubyte, decode_ubyte}.
Tests: extended_types::tests::ubyte_round_trips_at_extremes.
Status: done
§1.6.4 ushort
Spec: §1.6.4 — ushort (0x60) = “Integer in the range 0 to
2^16 - 1 inclusive.”
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_ushort, decode_ushort}.
Tests: extended_types::tests::ushort_round_trips.
Status: done
§1.6.5 uint
Spec: §1.6.5 — uint mit drei Format-Codes: uint0 (0x43,
fixed-0), smalluint (0x52, fixed-1), uint (0x70, fixed-4).
Range 0..2^32-1.
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_uint, decode_uint} mit Compact-Selection.
Tests: extended_types::tests::uint_uses_compact_zero_form,
extended_types::tests::uint_uses_smalluint_for_low_values,
extended_types::tests::uint_uses_full_for_high_values.
Status: done
§1.6.6 ulong
Spec: §1.6.6 — ulong mit drei Format-Codes: ulong0 (0x44,
fixed-0), smallulong (0x53, fixed-1), ulong (0x80, fixed-8).
Range 0..2^64-1.
Repo: crates/amqp-bridge/src/types.rs::{encode_ulong, decode_ulong} mit Compact-Selection.
Tests: types::tests::ulong_zero_uses_ulong0_format,
types::tests::ulong_small_uses_smallulong_format,
types::tests::ulong_large_uses_full_8_byte_format.
Status: done
§1.6.7 byte
Spec: §1.6.7 — byte (0x51, fixed-1) = “Integer in the range
-(2^7) to 2^7 - 1 inclusive.”
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_byte, decode_byte}.
Tests: extended_types::tests::byte_round_trips_negative.
Status: done
§1.6.8 short
Spec: §1.6.8 — short (0x61, fixed-2) = “Integer in the range
-(2^15) to 2^15 - 1 inclusive.”
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_short, decode_short}.
Tests: extended_types::tests::short_round_trips.
Status: done
§1.6.9 int
Spec: §1.6.9 — int mit zwei Format-Codes: smallint (0x54,
fixed-1), int (0x71, fixed-4). Range -(231)..231-1.
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_int, decode_int} mit Compact-Selection.
Tests: extended_types::tests::int_uses_compact_when_in_byte_range,
extended_types::tests::int_uses_full_for_high_values.
Status: done
§1.6.10 long
Spec: §1.6.10 — long mit zwei Format-Codes: smalllong
(0x55, fixed-1), long (0x81, fixed-8). Range -(263)..263-1.
Repo: crates/amqp-bridge/src/types.rs::{encode_long, decode_long} mit Compact-Selection.
Tests: types::tests::long_small_uses_smalllong_format,
types::tests::long_large_uses_full_8_byte_format.
Status: done
§1.6.11 float
Spec: §1.6.11 — float (0x72, fixed-4) = IEEE 754 binary32.
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_float, decode_float}.
Tests: extended_types::tests::float_round_trips.
Status: done
§1.6.12 double
Spec: §1.6.12 — double (0x82, fixed-8) = IEEE 754 binary64.
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_double, decode_double}.
Tests: extended_types::tests::double_round_trips.
Status: done
§1.6.13 decimal32
Spec: §1.6.13 — decimal32 (0x74, fixed-4) = IEEE 754
decimal32 in BID-Layout.
Repo: crates/amqp-bridge/src/extended_types.rs::encode_decimal32
(Encoder, BID-Layout verbatim; Decimal-Arithmetik ist Caller-Layer).
Tests: extended_types::tests::decimal32_64_128_have_correct_lengths.
Status: done — Wire-Format korrekt; Decimal-Arithmetik (z.B. exact-decimal-roundtrips zwischen Werten) ist Caller-Verantwortung.
§1.6.14 decimal64
Spec: §1.6.14 — decimal64 (0x84, fixed-8) = IEEE 754
decimal64 in BID-Layout.
Repo: crates/amqp-bridge/src/extended_types.rs::encode_decimal64.
Tests: extended_types::tests::decimal32_64_128_have_correct_lengths.
Status: done
§1.6.15 decimal128
Spec: §1.6.15 — decimal128 (0x94, fixed-16) = IEEE 754
decimal128 in BID-Layout.
Repo: crates/amqp-bridge/src/extended_types.rs::encode_decimal128.
Tests: extended_types::tests::decimal32_64_128_have_correct_lengths.
Status: done
§1.6.16 char
Spec: §1.6.16 — char (0x73, fixed-4) = “A single Unicode
character” als UTF-32BE-Codepoint.
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_char, decode_char}.
Tests: extended_types::tests::char_round_trips_ascii_and_unicode.
Status: done
§1.6.17 Timestamp
Spec: timestamp = 0x83 + 8-byte BE signed (ms since
1970-01-01 00:00:00).
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_timestamp, decode_timestamp}.
Tests: extended_types::tests::timestamp_round_trips_negative.
Status: done
§1.6.18 Uuid
Spec: uuid = 0x98 + 16 bytes RFC 4122.
Repo: crates/amqp-bridge/src/extended_types.rs::{encode_uuid, decode_uuid}.
Tests: extended_types::tests::uuid_round_trips.
Status: done
§1.6.19 Binary
Spec: binary = vbin8 (0xA0 + 1-byte len + bytes) oder vbin32
(0xB0 + 4-byte BE len + bytes).
Repo: crates/amqp-bridge/src/types.rs::encode_binary (waehlt
Compact-Form basierend auf Length); Decoder fuer beide Formate.
Tests: types::tests::binary_short_uses_vbin8_format,
binary_long_uses_vbin32_format,
round_trip_all_primitive_values,
truncated_inputs_yield_error.
Status: done
§1.6.20 String (UTF-8)
Spec: string = str8-utf8 (0xA1) oder str32-utf8 (0xB1).
Repo: crates/amqp-bridge/src/types.rs::encode_string.
Tests: types::tests::string_short_uses_str8_format,
string_unicode_round_trip, invalid_utf8_in_str_yields_error.
Status: done
§1.6.21 Symbol (ASCII)
Spec: symbol = sym8 (0xA3) oder sym32 (0xB3); MUST be ASCII.
Repo: crates/amqp-bridge/src/types.rs::encode_symbol lehnt
non-ASCII-Strings ab (NonAsciiSymbol-Error).
Tests: types::tests::symbol_short_uses_sym8_format,
symbol_rejects_non_ascii.
Status: done
§1.6.22 list
Spec: §1.6.22 — list mit drei Format-Codes: list0 (0x45,
fixed-0), list8 (0xC0, compound-1), list32 (0xD0,
compound-4). Generische Liste polymorpher Items.
Repo: crates/amqp-bridge/src/extended_types.rs::AmqpExtValue:: List mit encode/decode und Compact-Selection list0/list8/list32.
Tests: extended_types::tests::empty_list_uses_list0,
extended_types::tests::small_list_round_trips,
extended_types::tests::nested_list_round_trips,
extended_types::tests::deeply_nested_list_exceeds_dos_cap.
Status: done
§1.6.23 map
Spec: §1.6.23 — map mit zwei Format-Codes: map8 (0xC1,
compound-1), map32 (0xD1, compound-4). Polymorpher Map mit
Key-Value-Pairs.
Repo: crates/amqp-bridge/src/extended_types.rs::AmqpExtValue::Map
mit encode/decode und Compact-Selection.
Tests: extended_types::tests::map_round_trips_with_string_keys,
extended_types::tests::encode_map_uses_long_form_when_count_exceeds_u8.
Status: done
§1.6.24 array
Spec: §1.6.24 — array mit zwei Format-Codes: array8 (0xE0,
array-1), array32 (0xF0, array-4). Homogene Sequence mit
einheitlichem Element-Constructor.
Repo: crates/amqp-bridge/src/extended_types.rs::AmqpExtValue::Array
mit encode/decode und Homogenitäts-Validation.
Tests: extended_types::tests::array_round_trips_homogeneous_short,
extended_types::tests::array_homogeneous_constraint_violation_yields_error,
extended_types::tests::encode_array_uses_long_form_when_count_exceeds_u8,
extended_types::tests::decode_array_at_minimum_buffer_size.
Status: done
Plus DoS-Cap-Schutz auf Recursion-Depth 32 (siehe
dds-amqp-1.0-beta1.pdf §6.1):
extended_types::tests::decode_at_depth_at_cap_accepted,
extended_types::tests::decode_at_depth_over_cap_rejected.
amqp-1.0-transport
§2.3.1 Frame Format
Spec: amqp-1.0-transport §2.3.1 — 8-byte Header (SIZE 4-byte BE +
DOFF + TYPE + CHANNEL 2-byte BE) + Extended-Header + Body.
Repo: crates/amqp-bridge/src/frame.rs::{FrameHeader, FrameType, encode_frame_header, decode_frame_header}. Pre-Condition-Enforcement:
DOFF >= 2, SIZE >= 8, body_offset <= SIZE.
Tests: frame::tests::frame_type_round_trip,
header_round_trip_minimum_size,
header_with_channel_42_and_size_1024,
body_offset_is_doff_times_4, header_too_short_decode_fails,
doff_below_2_rejected, size_below_8_rejected,
body_offset_exceeding_size_rejected,
sasl_frame_type_byte_is_1.
Status: done
§2.3.1.4 Frame Type (AMQP/SASL)
Spec: amqp-1.0-transport §2.3.1.4 — 0x00 AMQP, 0x01 SASL.
Repo: FrameType::Amqp/Sasl/Reserved.
Tests: frame::tests::frame_type_round_trip,
sasl_frame_type_byte_is_1.
Status: done
§2.7 Performatives (open/begin/attach/…)
Spec: amqp-1.0-transport §2.7 — open, begin, attach, flow,
transfer, disposition, detach, end, close.
Repo: crates/amqp-bridge/src/performatives.rs — alle 9
Performatives als described composites (Descriptor-Marker 0x00 +
Ulong-Descriptor + List-Body). Convenience-Constructor pro
Performative (open, begin, attach, flow, transfer, disposition,
detach, end, close) plus generischer
encode_performative/decode_performative.
Tests: performatives::tests::open_descriptor_is_0x10,
begin_descriptor_is_0x11, attach_carries_role_bit,
flow_carries_window_values, transfer_default_settled_false,
disposition_settled_round_trip, detach_round_trips,
end_and_close_are_minimal, arbitrary_descriptor_round_trip,
truncated_input_yields_error,
all_nine_descriptors_have_unique_values.
Status: done
amqp-1.0-messaging
§3 Message Format
Spec: amqp-1.0-messaging §3 — Header/Delivery-Annotations/
Message-Annotations/Properties/Application-Properties/Body/Footer-
Sektionen.
Repo: crates/amqp-bridge/src/sections.rs::MessageSection mit
allen 7 Section-Variants (Header/DeliveryAnnotations/
MessageAnnotations/Properties/ApplicationProperties/Data/
AmqpSequence/AmqpValue/Footer) inkl. Roundtrip-Codec und
validate_section_sequence fuer Spec-§3.2-Sequencing-Constraint.
Tests: sections::tests::header_section_round_trips,
properties_section_round_trips_with_subject,
application_properties_round_trips,
data_section_round_trips_binary, amqp_value_section_round_trips,
amqp_sequence_round_trips, footer_section_round_trips,
canonical_order_passes_validator,
out_of_order_fails_validator,
all_seven_sections_have_unique_order_indexes.
Status: done
amqp-1.0-security
§5 SASL
Spec: amqp-1.0-security §5 — SASL-Mechanism-List, init,
challenge, response, outcome.
Repo: crates/amqp-endpoint/src/sasl.rs::{SaslMechanism, SaslState, SaslOutcome, SaslCode} mit PLAIN/ANONYMOUS/EXTERNAL-
Mechanismen + Outcome-Codes (ok/auth/sys/sys-perm/sys-temp gemaess
§5.3.3.6) + State-Machine (authenticate_plain/authenticate_anonymous/
authenticate_external/select_outbound).
Tests: Inline-Tests im sasl-Modul (Mechanism-Round-Trip,
SASL-Code-Wire-Values, Outcome-Helper).
Status: done
Audit-Status
33 done / 0 partial / 0 open / 2 n/a (informative) / 0 n/a (rejected).
Test-Lauf: siehe Header — 188 Tests grün insgesamt (82 lib + 106
integration), davon 77 OASIS-AMQP-1.0-relevant
(extended_types/frame/performatives/sections/types).
Offene Punkte und Decision-Records: siehe amqp-1.0.open.md
(insbesondere SASL-n/a (rejected)-Decision-Record).