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
//! Sans I/O な WebSocket ライブラリ
//!
//! このライブラリは I/O を含まない純粋な WebSocket プロトコル実装を提供します。
//! HTTP/1.1 上での WebSocket 接続のみをサポートしています。
//!
//! # 特徴
//!
//! - Sans I/O パターンによる I/O 非依存の設計
//! - クライアント・サーバー両方の接続をサポート
//! - permessage-deflate 拡張 (RFC 7692) に対応
//! - フレームの直接操作が可能な低レベル API
//!
//! # クライアント接続
//!
//! ```no_run
//! use shiguredo_websocket::{
//! ClientConnectionOptions, ConnectionEvent, ConnectionOutput,
//! RandomSource, WebSocketClientConnection, Timestamp,
//! };
//!
//! // 乱数ソースの実装(実際には getrandom などを使用)
//! struct DemoRandom {
//! counter: u32,
//! }
//!
//! impl RandomSource for DemoRandom {
//! fn masking_key(&mut self) -> [u8; 4] {
//! self.counter = self.counter.wrapping_add(1);
//! self.counter.to_le_bytes()
//! }
//! fn nonce(&mut self) -> [u8; 16] {
//! [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
//! }
//! }
//!
//! // WebSocket 接続オプション
//! let options = ClientConnectionOptions::new("example.com", "/");
//!
//! // WebSocket 接続作成
//! let mut ws = WebSocketClientConnection::new(options, DemoRandom { counter: 0 });
//!
//! // 接続開始
//! ws.connect().unwrap();
//!
//! // 出力データを取得してソケットに送信
//! while let Some(output) = ws.poll_output() {
//! if let ConnectionOutput::SendData(data) = output {
//! // data をソケットに送信
//! }
//! }
//! ```
//!
//! # サーバー接続
//!
//! ```no_run
//! use shiguredo_websocket::{
//! ServerConnectionOptions, WebSocketServerConnection,
//! };
//!
//! // サーバー接続オプション
//! let options = ServerConnectionOptions::new();
//!
//! // WebSocket サーバー接続作成
//! let mut ws = WebSocketServerConnection::new(options);
//! ```
//!
//! # 準拠規格
//!
//! - RFC 6455 - The WebSocket Protocol
//! - RFC 7692 - Compression Extensions for WebSocket
pub use ;
pub use ;
pub use ;
pub use Timestamp;
pub use ;
pub use CloseCode;
pub use ;
pub use ;
pub use ;
pub use ;
pub use Opcode;
pub use ;