Opera のTransfer を管理するファイル download.dat についての解析.
注意
この文書は,WindowsXPにWindows版の Opera9を インストールしたときの情報に基づいて作成してます.別のOS,別のバージョンの解析状況は追々.
この文書を基にして,Operaにカスタマイズその他の変更を加えて,不具合が発生しても責任は取れません.
突っ込み,感想,その他は,office@ashula.infoまで
説明
このページでは,Operaのダウンロードレスキューファイル( download.dat )について解説しています.
「ユーザごとの設定を使う」でインストールすると,通常,%APPDATA%\Opera\Opera\profile
以下に作られます.
(%APPDATA%
は,通常Documents and Settings\user_name\Application Data
.エクスプローラの「ツール→フォルダオプション→表示→全てのファイルとフォルダを表示する」が設定されていないと見ることは出来ないです).正確な場所は opera:config#UserPrefs|OperaDirectoryの値を参照のこと.
ここにまとめた情報は主に,Opera File Formatsの公式の解説を基に作られています.ほかの資料は参考文献を参照してください.
構造
データ構造(レコード)についての概要は,binary filesを参照のこと.
download.dat ファイルはヘッダと訪問済みリンク情報のデータレコードからなる.
ヘッダ
ヘッダは,4つの値からなり, download.dat の ヘッダの4つの値はそれぞれ次のようになっている.
- file version number
0x0000 1000
- app. version number
0x0002 0000
- idtag_length
0x0001
- length_length
0x0002
なので,まとめるとファイルの先頭は以下のようになる.
0 8 16 24
+--------+--------+--------+--------+
| 0x00 | 0x00 | 0x10 | 0x00 |
+--------+--------+--------+--------+
| 0x00 | 0x02 | 0x00 | 0x00 |
+--------+--------+--------+--------+
| 0x00 | 0x01 | 0x00 | 0x02 |
+--------+--------+--------+--------+
本体
download.dat ファイルの本体は ダウンロードファイルに関する情報のレコードの集合からなる.
download.dat ファイルで使われる レコードのタグIDとペイロードは以下の通り.vlink4.dat等と共通の要素と,いくつかの専用の要素からなる.
タグID | ペイロードの型 | 説明 |
---|---|---|
0x41 | レコード | 個々のダウンロードファイルに関するレコード. |
タグID | ペイロードの型 | 説明 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
0x03 | string | 完全なURLの名前(The name of the URL, fully qualified) | ||||||||
0x04 | time_t | 最終訪問日時 | ||||||||
(0x0b | MSB_VALUE) | flag | そのURLがフォームの問い合わせ結果であるときにのみ存在 | ||||||||
0x22 | レコード | その文書に存在する 相対リンクのレコード | ||||||||
0x05 | time_t | ローカルの時間帯でのファイルの最終取得日時. | ||||||||
0x07 | uint8 |
|
||||||||
0x08 | uint32 | ダウンロードファイルのサイズ | ||||||||
0x09 | string | ダウンロードファイルの MIME type | ||||||||
0x0a | string | ダウンロードファイルの文字集合 (Character set of content) | ||||||||
(0x0c | MSB_VALUE) | flag | キャッシュフォルダ以外の場所にダウンロードされたかどうか | ||||||||
0x0d | string | ファイル名 (cache files: キャッシュディレクトリに相対) | ||||||||
(0x0f | MSB_VALUE) | flag | ファイルが更新されたかどうか.更新されてたら存在. | ||||||||
0x10 | レコード | HTTP での通信に関する情報のレコード | ||||||||
0x28 | time_t | ダウンロードファイルの前回の取得開始時刻. | ||||||||
0x29 | time_t | ダウンロードファイルの前回の取得中止時刻. | ||||||||
0x2A | uint32 | ファイルの前回のダウンロードで取得したバイト数.ファイルの取得終了時刻が不明のとき,この値は 0 とみなされ,ダウンロード速度も0(不明値)にセットされる. |
タグID | ペイロードの型 | 説明 |
---|---|---|
0x23 | string | 相対リンクのURL |
0x24 | time_t | 最終訪問日時 |
タグID | ペイロードの型 | 説明 |
---|---|---|
0x15 | string | HTTP date header |
0x16 | time_t | Expiry date |
0x17 | string | Last modified date |
0x18 | string | MIME type of document |
0x19 | string | Entity tag |
0x1A | string | Moved to URL (Location header) |
0x1B | string | Response line text |
0x1C | uint32 | Response code |
0x1D | string | Refresh URL |
0x1E | uint32 | Refresh delta time |
0x1F | string | Suggested file name |
0x20 | string | Content Encodings |
0x21 | string | Content Location |
0x25 | uint32(string) | タグ 0x26 と一緒に使い,最後にリソースを取得したときに使った User Agent の文字列をあらわす. |
0x26 | uint32(string) | タグ 0x25 と一緒に使い,最後にリソースを取得したときに使った User Agent の sub version をあらわす. |
(0x30 | MSB_VALUE) | flag | (予約領域) |
(0x31 | MSB_VALUE) | flag | (予約領域) |
各レコードの名称と意味の詳細はHypertext Transfer Protocol -- HTTP/1.1を参照
構成
YAML(google://YAML)っぽい書式を使ってまとめるとファイルの構成は次のようになる.()
header : file version number : 0x0000 1000 app version number : 0x0002 0000 tag_id length : 0x0001 length length : 0x0002 body : - download file record : tag : 0x41 length : 0xLLLL payload : url_name : tag : 0x03 length : 0xLLLL payload : url # 文字列(長さ url_name record length) last_visit : tag : 0x04 length : 0x0004 payload : 0xTTTT TTTT # time_t 型 rel_url_info : tag : 0x22 length : 0xLLLL payload : rel_url_name : tag : 0x23 length : 0xLLLL payload : url # 文字列(長さ rel_url_name record length) rel_url_last : tag : 0x24 length : 0x0004 payload : 0xTTTT TTTT # time_t 型 local_download_time : tag : 0x05 length : 0x0004 payload : 0xTTTT TTTT # time_t 型 download_state : tag : 0x07 length : 0x0001 payload : ( 0x02 | 0x04 | 0x05 ) # 2,4,5 のどれか download_file_size : tag : 0x08 length : 0x0004 payload : 0xLLLL LLLL mime_type : tag : 0x09 langth : 0xLLLL payload : MIME-type char_set : tag : 0x0a length : 0xLLLL payload : char-set # 文字集合 file_name : tag : 0x0d length : 0xLLLL payload : file name # ローカルでのファイル名 last_download_start_time : tag : 0x28 length : 0x0004 payload : 0xTTTT TTTT # last_download_stop_time : tag : 0x29 length : 0x0004 payload : 0xTTTT TTTT last_download_length : tag : 0x2a length : 0x0004 payload : 0xLLLL # ファイルの取得終了時刻が有効のときのみ有効 is_in_cache_folder : tag : 0x8c # 0x0c flag is_file_edited : tag : 0x8d # 0x0d flag http_com_result : tag : 0x10 length : 0xLLLL payload : http_date_header : tag : 0x15 length : 0xLLLL payload : HTTP date header http_expiry_date : tag : 0x16 length : 0x0004 payload : 0xTTTT TTTT # Expiry date http_last_mod_date : tag : 0x17 length : 0xLLLL payload : last modified date # http date format ? http_mime_type : tag : 0x18 length : 0xLLLL payload : mime-type http_entity_tag : tag : 0x19 length : 0xLLLL payload : ETag http_location_header : tag : 0x1a length : 0xLLLL payload : MovedToURL http_response_line : tag : 0x1b length : 0xLLLL payload : response-line-text http_response_code : tag : 0x1c length : 0x0004 payload : 0xVVVV VVVV http_refresh_url : tag : 0x1d length : 0xLLLL payload : refresh-url http_refresh_delta_time : tag : 0x1e length : 0x0004 payload : 0xVVVV VVVV http_suggested_file_name : tag : 0x1f length : 0xLLLL payload : suggested-file-name http_content_encoding : tag : 0x20 length : 0xLLLL payload : encoding http_content_location : tag : 0x21 lenght : 0xLLLL payload : location http_user_agent : tag : 0x25 length : 0xLLLL payload : user-agent-string http_user_agent_subversion : tag : 0x26 length : 0xLLLL payload : user-agent-subversion-string reserved_flag_1 : tag : 0xC0 # 0x30 予約領域 reserved_flag_2 : tag : 0xC1 # 0x31 予約領域
参考文献
- Off
Opera File Formats, http://www.opera.com/docs/fileformats/ , opera.com
- Off_jp
Opera のファイル形式, http://jp.opera.com/docs/fileformats/ , jp.opera.com
- unofficial
Opera File Formats(私家訳), http://ashula.info/neta/opera/inis/OperaFileFormats-jp.html , t.ashula
- O4FE
Opera4 File Explorer, http://users.westelcom.com/jsegur/O4FE.HTM , Josef W. Segur
更新履歴
- 2008/01/04 : titleのtypo修正
- 2006/11/04 : 初版