2014-05-09 3 views
2

지금까지 적절한 .torrent 파일 파서가 자바 스크립트로 코딩되어 있지 않음을 발견했습니다. 따라서 필자는 내 자신을 만들기 시작했습니다.자바 토런트 파일 구문 분석

는 지금까지 내가 자바 스크립트에서 PHP를 bdecoder을 코딩 할 수 있었다, 내가 찾은 한 문제는 (http://www.vuze.com/content/channel.php?id=53&name=Scam%20School%20(Quicktime%20HD)에서 두 번째로 같은) 큰 .torrent 파일이 가끔 크롬에서 Uncaught RangeError: Maximum call stack size exceeded 오류가 발생할 것입니다. bdecode 함수를 재귀 적으로 덜 실행하는 방법이 있습니까?

이 문제와 함께 성공적으로 디코딩 된 '.torrent'파일에 대한 정보 해시를 정확하게 생성하지 못했습니다. info 이름 바로 다음에 시작하고 e '종료 태그'로 끝나는 정보 사전을 해싱합니다. 그러나 실제 비트 토 런트 클라이언트와 비교할 때 잘못된 해시가 발생합니다. 파일을 잘못 읽었습니까?

현재 코드 : http://jsfiddle.net/e23YQ/

감사합니다.

+2

하는 토런트 파일을 정확하게하기 위해? 그리고 [jstorrent] (https://github.com/kzahel/jstorrent)와 같은 라이브러리를 보았습니까 – Xotic750

+0

정말 토런트 파일을 utf-8 텍스트가 아닌 바이너리 문자열로 읽어야합니다. – nmaier

+0

@nmaier readAsBinaryString은 부정확 한 해시도 생성합니다. –

답변

2

readAsTest 또는 readAsBinaryString (더 이상 사용되지 않음)을 사용하여 토런트 파일을 읽는 것은 정확한 정보 해시를 생성하는 데 충분하지 않습니다. 가능한 한 네이티브로 유지하려면 파일을 ArrayBuffer으로 읽고 Uint8Arrays을 사용하여 구문 분석해야합니다. 구문 분석하는 동안 정보 해시를 생성하기 위해 정보 사전의 시작 및 끝 오프셋을 저장하십시오.

정확한 정보 해시를 생성하려면 해시가 ArrayBuffers 인 Sha-1의 자바 스크립트 구현을 사용해야합니다. Rusha은 실행 가능한 옵션으로 보입니다. Rusha에있는 digestFromArrayBuffer을 정보 사전이 포함 된 초기 ArrayBuffer 슬라이스와 함께 사용하면 정확한 정보 해시를 얻을 수 있습니다.

ArrayBuffer를 사용하면 이전에 발생했던 stackoverflow 문제가 해결되었습니다.

이 조정 된 코드입니다 : http://jsfiddle.net/e23YQ/5/