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等と共通の要素と,いくつかの専用の要素からなる.

download.dat の トップレベルのレコードの構成
タグID ペイロードの型説明
0x41 レコード個々のダウンロードファイルに関するレコード
個々のダウンロードファイルに関するレコードの構成
タグID ペイロードの型説明
0x03string完全なURLの名前(The name of the URL, fully qualified)
0x04time_t最終訪問日時
(0x0b | MSB_VALUE)flagそのURLがフォームの問い合わせ結果であるときにのみ存在
0x22レコードその文書に存在する 相対リンクのレコード
0x05time_tローカルの時間帯でのファイルの最終取得日時.
0x07uint8
ファイル取得の状態
意味
2取得済み
4取得中断
5取得失敗
0x08uint32ダウンロードファイルのサイズ
0x09stringダウンロードファイルの MIME type
0x0astringダウンロードファイルの文字集合 (Character set of content)
(0x0c | MSB_VALUE)flagキャッシュフォルダ以外の場所にダウンロードされたかどうか
0x0dstringファイル名 (cache files: キャッシュディレクトリに相対)
(0x0f | MSB_VALUE)flagファイルが更新されたかどうか.更新されてたら存在.
0x10レコードHTTP での通信に関する情報のレコード
0x28time_tダウンロードファイルの前回の取得開始時刻.
0x29time_tダウンロードファイルの前回の取得中止時刻.
0x2Auint32ファイルの前回のダウンロードで取得したバイト数.ファイルの取得終了時刻が不明のとき,この値は 0 とみなされ,ダウンロード速度も0(不明値)にセットされる.
HTTP での通信に関する情報のレコードの構成
タグID ペイロードの型説明
0x15stringHTTP date header
0x16time_tExpiry date
0x17stringLast modified date
0x18stringMIME type of document
0x19stringEntity tag
0x1AstringMoved to URL (Location header)
0x1BstringResponse line text
0x1Cuint32Response code
0x1DstringRefresh URL
0x1Euint32Refresh delta time
0x1FstringSuggested file name
0x20stringContent Encodings
0x21stringContent Location
0x25uint32(string)タグ 0x26と一緒に使い,最後にリソースを取得したときに使った User Agent の文字列をあらわす.
0x26uint32(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

更新履歴

  1. 2008/01/04 : titleのtypo修正
  2. 2006/11/04 : 初版