Javascript Torrent文件解析

时间:2014-05-09 22:39:44

标签: javascript stack-overflow bittorrent

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

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

除了这个问题,我还没能准确地为成功解码的'.torrent'文件生成信息哈希。我在info名称后面开始并在e'结束标记'结尾处对信息词典进行哈希处理。但是,与实际的bittorrent客户端相比,这会导致不正确的哈希值。我是否错误地阅读了该文件?

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

感谢。

1 个答案:

答案 0 :(得分:2)

使用readAsTest或readAsBinaryString(不推荐使用)读取torrent文件不足以生成准确的信息哈希。为了使内容尽可能保持原生,您必须将文件读作ArrayBuffer并使用Uint8Arrays进行解析。在解析时,保存信息字典的开始和结束偏移以生成信息哈希。

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

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

这是经过调整的代码: http://jsfiddle.net/e23YQ/5/