Javascript种子文件解析



到目前为止,我还没有找到任何合适的用javascript编码的.torrent文件解析器,因此我开始创建我自己的。

到目前为止,我能够在javascript中重新编码php bdecoder,我发现的一个问题是较大的.torrent文件(如http://www.vuze.com/content/channel.php?id=53&name=Scam%20School%20(Quicktime%20HD中的第二个))有时会导致chrome中的Uncaught RangeError: Maximum call stack size exceeded错误。是否有一种方法可以让bdecode函数递归地运行?

随着这个问题,我还没有能够准确地为'生成一个信息哈希。已成功解码的Torrent文件。我对信息字典进行散列,从info名称之后开始,以e"结束标记"结束。然而,与实际的bittorrent客户端相比,这会导致不正确的哈希值。我是否错误地读取了文件?

当前代码:http://jsfiddle.net/e23YQ/

谢谢。

使用readAsTest或readAsBinaryString(已弃用)读取种子文件将不足以生成准确的信息哈希。为了尽可能保持原生,必须将文件作为ArrayBuffer读取,然后使用Uint8Arrays进行解析。在解析时,保存info字典的开始和结束偏移量以生成info哈希。

为了生成一个准确的信息哈希,你必须使用一个javascript实现的Sha-1,它允许ArrayBuffers的哈希。鲁沙似乎是个可行的选择。使用Rusha中的digestFromArrayBuffer和包含info字典的初始ArrayBuffer的切片,我们得到了一个准确的info哈希。

使用ArrayBuffer消除了我之前遇到的stackoverflow问题。

调整后的代码:http://jsfiddle.net/e23YQ/5/

最新更新