なんとなくですが、AMFのパケットの中身はどうなっているのだろうか?と思い立って調べてみました。
Googleで、「AMF パケット 仕様」で調べた結果、AdobeがAMF規格の仕様をPDFファイルで公開していたのを見つけました。
AMF0 http://opensource.adobe.com/wiki/download/attachments/1114283/JP_amf0_spec_121207.pdf
AMF3 http://opensource.adobe.com/wiki/download/attachments/1114283/JP_amf3_spec_121207.pdf
上のPDFですと私自身はいまひとつ分かりにくかったので、以下表にして簡単にまとめてみました。
AMFパケットの仕様
項目 | 型 | 説明 | |
---|---|---|---|
AMFパケットのバージョン | U16 |
AMFパケットのバージョン AMF3=3 AMF0=0 |
|
ヘッダー数 | U16 | ヘッダーの数 | |
ヘッダー ※ヘッダー数分繰り返す |
ヘッダー名称サイズ | U16 | ヘッダー名称の文字列長 |
ヘッダー名称 | UTF8 |
ヘッダー名称 文字列の長さはヘッダー名称サイズ |
|
ヘッダーのバイト長 | U32 |
ヘッダーのバイト長 ※わからない場合は(U32)-1 |
|
value-type | |||
AMFメッセージ数 | U16 | AMFメッセージ(ボディ)の数 | |
AMFメッセージ部 ※AMFメッセージ数分繰り返す |
ターゲットURIサイズ | U16 | ターゲットURIの文字列長 |
ターゲットURIサイズ | UTF8 |
ターゲットURI名称 文字列の長さはターゲットURIサイズ |
|
レスポンスURIサイズ | U16 | レスポンスURIの文字列長 | |
レスポンスURIサイズ | UTF8 |
レスポンスURI名称 文字列の長さはレスポンスURIサイズ |
|
メッセージのバイト長 | U32 |
メッセージのバイト長 ※わからない場合は(U32)-1 |
|
value-type |
U8 = 符号なしのバイト、8 ビットのデータ、オクテット
U16 = ビッグエンディアン(network)バイトオーダで記された符号なしの16 ビット整数
U32 = ビッグエンディアン(network)バイトオーダで記された符号なしの32 ビット整数
ドキュメントを読んでも、value-type の部分がいまいち謎です。
こういうことに今まで興味がわかなかったのは技術者としては?でしょうが、今回調べたことでAMFの中身についてある程度知ることができました。
そのうち、パケット解析ツールなどを使用して実際のデータを除いてみたいと思います。