RFC6455 Websocketサーバー開発 (C言語版) 進捗
ハンドシェイク
- 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]
- デコード
- [x]
masking keyを使用したペイロードデコード
- [x]
- 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
Write a comment