-
@ 発火大根 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]
- [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