TorrentFileの中身
TorrentファイルはBencodingで記載されている
Trackerのアドレスが記載されている
ファイル名が記載されている
ブロックデータごとのSHA1 Hashが記載されている
Torentファイルを読み込んでみよう
無事、Bencodeのパーサーを書く事ができました。これで、 Torrentファイルの中身を解析できます。Torrentファイルの中身 を確認してみましょう。
さっそく、Torrentファイルを読み込んでみましょう。Parserを 作成していない方は、「https://github.com/kyorohiro/ dart_hetimalib_test/tree/master/hetimalib_sample/TorrentFileParser」を利用してください。
読み込んで見ると以下のようなデータ構成である事がわかりま す。
announce
Tracker サーバーのアドレスが記載されています。本アドレス のサーバー にからデータを配信してくれる端末を紹介してもらえます。
created by
本ファイル生成したツールを示す名前のようです。
creation date
本ファイルが生成された日にちを表しているようです。
info.length
配信されているデータのサイズです。1024byte のデータである 事がわかります。
info.name
配信されているデータのファイル名です。xxx という名前であ る事が解ります。
piece length
データを配信する際に、分割するサイズです。16kb単位で分割 する事がわかります。
pieces
分割されたデータごとのHash値です。データーの正当性を判定 するのに使用します。
ファイルが複数の場合
ひとつのファイルを配信するデータは説明した通りです。複数 のファイルをパッケージする場合は、もう少し構造が複雑にな ります。
さきほどのと比較すると、info辞書の中に、files リストが増え ています。今回の場合だと、「xxx/aaa/bbb.mp3」、「xxx/ccc/ ddd.mp3」という2つのデータが含まれている事が読み取れま す。
Torrentファイルを作成してみよう
これらの理解できた事を整理して、理解出来ていない事を発見 しながら、Torrentファイルを作成するツールを作成してみまし ょう。無事作成できたならば、だいたいは理解できたという事 になります。既に、Bencoding のパーサーはありますから、ゴ ールは目の前です。
といった感じで、必要な情報をMapに配置して、Bencode にエ ンコードすれば完成です。
実際に作成してみると、明らかでなかった点が現れてきます。 例えば、ファイルが複数ある場合は、pieceデータをどのよう に算出するのでしょうか? まだ、明らかになっていませんでし た。2つ生成する方法を思いつきました。どちらかが、Torrent で採用されている方法だと良いのですが..。
ファイル単位で、pieceデータを作成する。
複数ファイルは結合してひとつのファイルと見なしてから、pieceデータを作成する。
実際に試してみたところ、 2の方法が採用されているようで す。具体的には、
といったコードで生成できます。
Kyorohiro work
Last updated