到目前为止,我还没有找到任何用javascript编码的合适的.torrent文件解析器,因此我开始创建自己的文件解析器。
到目前为止,我已经能够在javascript中对php解码器进行重新编码,我发现的一个问题是,较大的.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/
谢谢。
发布于 2014-05-10 15:08:43
使用readAsTest或readAsBinaryString读取急流文件(这是不推荐的)不足以生成准确的信息哈希。为了使事情尽可能地保持原生状态,必须将文件作为ArrayBuffer读取并使用Uint8Arrays进行解析。解析时,保存信息字典的开头和结尾偏移量,以生成信息哈希。
为了生成准确的信息散列,您必须使用允许散列ArrayBuffers的沙-1的javascript实现。鲁沙似乎是一个可行的选择。使用Rusha中的digestFromArrayBuffer和包含信息字典的初始ArrayBuffer片段,我们得到了一个精确的信息哈希。
使用ArrayBuffer可以消除我之前遇到的堆栈溢出问题。
这是调整后的代码:http://jsfiddle.net/e23YQ/5/
https://stackoverflow.com/questions/23575020
复制相似问题