Skip to main content

zerodds_corba_giop/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! OMG CORBA 3.3 Part 2 §15 — General Inter-ORB Protocol (GIOP).
5//!
6//! Crate `zerodds-corba-giop`. Safety classification: **STANDARD**.
7//! Spec OMG CORBA 3.3 Part 2 §15 (`docs/standards/cache/omg/corba-3.3-part2.pdf`,
8//! eingepflegt in Sprint-1-Setup-Phase).
9//!
10//! # Scope
11//!
12//! Voller GIOP-Wire-Codec — alle 8 Message-Types fuer GIOP 1.0, 1.1
13//! und 1.2 (inkl. Bidirectional-GIOP). Reuse CDR-1 aus `crates/cdr/`.
14//!
15//! Implementierte Message-Types (Spec §15.4.1-15.4.9):
16//!
17//! * `Request` (Spec §15.4.2) — Client→Server Method-Invocation.
18//! * `Reply` (Spec §15.4.3) — Server→Client Response inkl. aller 6
19//!   Reply-Statuses (NO_EXCEPTION/USER_EXCEPTION/SYSTEM_EXCEPTION/
20//!   LOCATION_FORWARD/LOCATION_FORWARD_PERM/NEEDS_ADDRESSING_MODE).
21//! * `CancelRequest` (Spec §15.4.4) — Client cancelt pending Request.
22//! * `LocateRequest` (Spec §15.4.5) — Client probt Object-Location.
23//! * `LocateReply` (Spec §15.4.6) — Server antwortet auf LocateRequest.
24//! * `CloseConnection` (Spec §15.4.7) — Server schliesst Connection.
25//! * `MessageError` (Spec §15.4.8) — Wire-Format-Fehler-Indication.
26//! * `Fragment` (Spec §15.4.9) — Multi-Frame-Message-Body.
27//!
28//! GIOP-Versionen:
29//!
30//! * `1.0` — Initial-Format. Request/Reply-Header inkl. `requesting_principal`.
31//!   Kein Fragment-Support, kein Bidirectional-GIOP.
32//! * `1.1` — `byte_order` wird zu `flags`-Octet (Bit 0 = byte_order,
33//!   Bit 1 = fragment). Fragment fuer Request+Reply. Request-Header
34//!   bekommt 3-Byte-`reserved`-Feld.
35//! * `1.2` — Request/Reply-Header neu organisiert: `request_id`
36//!   zuerst, `service_context` zuletzt. `TargetAddress`-Union ersetzt
37//!   den `object_key`. Body 8-Byte-aligned. Fragment fuer alle
38//!   Message-Types. Bidirectional-GIOP via `BiDirIIOPServiceContext`.
39//!
40//! # Was nicht hier ist
41//!
42//! * **Transport** — TCP/UDS-Lieferung in `crates/corba-iiop/`.
43//! * **IOR-Format** — Object-Reference-Marshalling in `crates/corba-ior/`.
44//! * **POA** — Servant-Dispatch in `crates/corba-poa/`.
45//! * **Codeset-Konversion** — `crates/cdr/` macht UTF-8/UTF-16 nativ;
46//!   ISO-Latin-Konversion ist Caller-Layer (selten in modernen
47//!   CORBA-Deployments).
48//!
49//! # Beispiel
50//!
51//! ```
52//! use zerodds_corba_giop::{MAGIC_BYTES, Version};
53//! assert_eq!(MAGIC_BYTES, *b"GIOP");
54//! let v = Version { major: 1, minor: 2 };
55//! assert_eq!(v.major, 1);
56//! ```
57
58#![cfg_attr(not(feature = "std"), no_std)]
59#![forbid(unsafe_code)]
60#![warn(missing_docs)]
61
62#[cfg(feature = "alloc")]
63extern crate alloc;
64
65pub mod cancel_request;
66pub mod close_connection;
67pub mod codec;
68pub mod error;
69pub mod flags;
70pub mod fragment;
71pub mod header;
72pub mod locate_reply;
73pub mod locate_request;
74pub mod message_error;
75pub mod message_type;
76pub mod reply;
77pub mod request;
78pub mod service_context;
79pub mod target_address;
80pub mod version;
81
82pub use cancel_request::CancelRequest;
83pub use close_connection::CloseConnection;
84pub use codec::{Message, decode_message, encode_message};
85pub use error::{GiopError, GiopResult};
86pub use flags::Flags;
87pub use fragment::{Fragment, FragmentHeader};
88pub use header::{MAGIC, MAGIC_BYTES, MessageHeader};
89pub use locate_reply::{LocateReply, LocateStatusType};
90pub use locate_request::LocateRequest;
91pub use message_error::MessageError;
92pub use message_type::MessageType;
93pub use reply::{Reply, ReplyStatusType};
94pub use request::{Request, ResponseFlags};
95pub use service_context::{ServiceContext, ServiceContextList, ServiceContextTag};
96pub use target_address::{ObjectKey, TargetAddress};
97pub use version::Version;