1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 ZeroDDS Contributors
//! Crate `zerodds-websocket-bridge`. Safety classification: **STANDARD**.
//!
//! WebSocket (RFC 6455) komplettes Stack-Set — pure-Rust `no_std +
//! alloc`, `forbid(unsafe_code)`. Implementiert die volle WebSocket-
//! Spec inklusive Base-Framing-Protocol (§5.2 + §5.3), Opening-
//! Handshake (§4) mit `Sec-WebSocket-Accept`-SHA1-Berechnung,
//! Extension- + Subprotocol-Negotiation (§9), Close-Frame-Status-
//! Code-Semantik (§7.4) inkl. Forbidden-on-Wire-Pruefung,
//! permessage-deflate Extension (RFC 7692), URI-Parser (`ws://` /
//! `wss://`, RFC 6455 §3), Streaming-UTF-8-Validator (§8.1) fuer
//! Text-Frames, sowie einen WebSocket↔DDS-Topic-Bridge.
//!
//! Spec-Referenzen:
//!
//! - **RFC 6455** — The WebSocket Protocol.
//! - **RFC 7692** — Compression Extensions for WebSocket
//! (`permessage-deflate`).
//!
//! ## Schichten-Position
//!
//! Layer 5 — Bridges. Substrat fuer Browser↔DDS-Endpoint-Mapping
//! (Web-UIs, Realtime-Dashboards, DDS-Web-Gateway).
//!
//! ## Public API (Stand 1.0.0-rc.1)
//!
//! - [`Frame`] / [`Opcode`] — Frame-Modell (§5.2).
//! - [`encode`] / [`decode`] / [`CodecError`] — Wire-Codec inklusive
//! Payload-Length-Encoding (7-bit / 7+16-bit / 7+64-bit) und
//! Masking-Application.
//! - [`apply_mask`] / [`generate_masking_key`] /
//! [`MaskingKeyProvider`] / [`InsecureSplitmixProvider`] /
//! [`ClosureMaskingKeyProvider`] — XOR-Masking (§5.3).
//! - [`CloseCode`] / [`ClosePayload`] / [`encode_close_payload`] /
//! [`decode_close_payload`] — Close-Frame-Codec (§7.4).
//! - [`ClientHandshake`] / [`ServerHandshake`] /
//! [`compute_accept`] / [`parse_client_request`] /
//! [`build_server_response`] / [`render_server_response`] /
//! [`HandshakeError`] — Opening-Handshake (§4).
//! - [`PermessageDeflateParams`] / [`parse_offer`] / [`render_accept`]
//! / [`append_tail`] / [`strip_tail`] / [`DEFLATE_TAIL`] /
//! [`NegotiationError`] — RFC 7692 permessage-deflate Negotiation.
//! - [`WebSocketUri`] / [`parse_websocket_uri`] / [`default_port`] /
//! [`is_local_loopback`] / [`resource_name`] / [`UriError`] —
//! `ws://` / `wss://` URI-Parser (§3).
//! - [`StreamingValidator`] / [`validate_utf8`] / [`Utf8Error`] —
//! Text-Frame-UTF-8-Validator (§8.1).
//! - [`SubscriptionRegistry`] / [`Notification`] / [`BridgeOp`] /
//! [`BridgeError`] / [`parse_op`] / [`render_notification`] —
//! WebSocket↔DDS-Topic-Bridge.
//!
//! ## Beispiel
//!
//! ```rust
//! use zerodds_websocket_bridge::{compute_accept};
//!
//! // RFC 6455 §1.3: Sec-WebSocket-Accept-Beispiel.
//! let accept = compute_accept("dGhlIHNhbXBsZSBub25jZQ==");
//! assert_eq!(accept, "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=");
//! ```
extern crate alloc;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;