-
![](https://github.com/user-attachments/assets/c1086d97-4cc3-44da-9ce5-07d3b05dd94c)
@ 発火大根 a.k.a. radish on fire🎤
2025-01-02 17:28:15
---
### ハンドシェイク
- HTTPリクエスト解析
- [ ] HTTPリクエストラインのパーサー関数作成
- [x] HTTPヘッダーのパーサー関数作成
- [ ] HTTPリクエストボディのパーサー関数作成
- [ ] WebSocket関連ヘッダーの検証
- [ ] `Upgrade: websocket`
- [ ] `Connection: Upgrade`
- [ ] `Sec-WebSocket-Key` の取得と検証
- [ ] `Sec-WebSocket-Version: 13` の検証
- HTTPレスポンス作成
- [ ] `Sec-WebSocket-Accept` の生成
- [x] `Sec-WebSocket-Key` にSHA-1適用(外部依存)
- [ ] `Sec-WebSocket-Key` にSHA-1適用(非依存)
- [x] `Sec-WebSocket-Key` にBase64エンコードを適用
- [x] HTTP 101 Switching Protocolsレスポンスの構築と送信
---
### データ転送
#### WebSocketフレームの処理
- フレーム解析
- [x] `fin` ビットの取り出しと解釈
- [x] `rsv1`, `rsv2`, `rsv3` の取り出しと検証
- [ ] `opcode` の取り出しと処理
- [ ] 0x0: 継続フレーム
- [ ] 0x1: テキストフレーム
- [ ] 0x2: バイナリフレーム
- [ ] 0x8: 接続終了
- [ ] 0x9: Ping
- [ ] 0xA: Pong
- [x] `mask` フラグの取得と検証
- [x] `payload_len` の取り出しと解析
- [x] 拡張されたペイロード長(`extended payload len`)の取り出し
- [x] `masking key` の取得とデコード
- [x] `payload` データの取り出し
- [ ] `fin` に基づく分割パケット対応
- デコード
- [x] `masking key` を使用したペイロードデコード
- opcode別処理
- [ ] テキストフレーム(0x1)のUTF-8デコードと処理
- [ ] バイナリフレーム(0x2)のデータ処理
- [ ] Ping(0x9)フレームへのPong応答
- [ ] 接続終了(0x8)の処理
- [ ] 不正なopcodeに対するエラー応答
#### フレーム生成
- フレーム構築
- [ ] `fin` フラグ設定
- [ ] `opcode` の設定
- [ ] ペイロードのマスキング処理(クライアント向けのみ)
- [ ] ペイロード長の設定(拡張ペイロード長を含む)
- [ ] フレーム全体のバイトストリーム化
---
### 接続管理
- [x] クライアント接続の確立
- [x] 2クライアント以上の接続の確立
- [ ] 接続中のクライアントのリスト管理
- [ ] 接続のタイムアウト処理
- [ ] 不正なクライアントからの接続拒否
- [ ] 接続終了時のクリーンアップ処理
- [ ] ハートビート機能(Ping/Pong)による接続維持
---
### セキュリティ
- [ ] WebSocket Originヘッダーの検証(許可されたオリジンのみ受け入れる)
- [ ] メッセージサイズの上限設定(大規模メッセージ攻撃の防御)
- [ ] 不正なフレーム/データに対するエラーハンドリング
- [ ] SSL/TLSサポート(wssプロトコル用)
---
### 拡張機能とプロトコルアップグレード
- [ ] サブプロトコル(Sec-WebSocket-Protocol)の処理
- [ ] 拡張(Sec-WebSocket-Extensions)のサポート
- 圧縮データのデコード (例: permessage-deflate)
---
### テストとデバッグ
- [ ] 単体テスト
- [ ] ハンドシェイクのテスト
- [ ] フレーム解析と生成のテスト
- [ ] 各opcode処理のテスト
- [ ] 負荷テスト(高負荷時の動作確認)
- [ ] プロトコルコンフォーマンステスト
- [ ] RFC 6455に準拠しているかの確認
- [ ] ロギングとデバッグツールの実装
---
### ドキュメント
- [ ] コードベースのコメントとドキュメント化
- [ ] WebSocketサーバーの設定と使用法についてのユーザーガイド作成
### タグ
#RFC6455