Version 0.1, 2005-04-17, http://www.neilvandyke.org/bencode-scm/
by
Neil W. Van Dyke
<neil@neilvandyke.org
>
Copyright © 2005 Neil W. Van Dyke. This program is Free Software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See http://www.gnu.org/copyleft/lesser.html for details. For other license options and consulting, contact the author.
bencode.scm
parses the bencoding format of the BitTorrent
network protocol into basic Scheme data types (and currently PLT-specific
byte strings). This is useful for inspecting .torrent
files, and
might later be used in the implementation of a BitTorrent client or
protocol analyzer.
The format interpretation is based on the undated BitTorrent protocol documentation Web page as viewed on 2005-04-17. The mapping from those bencoding types to Scheme types is:
dictionary
as its head, and an
association list as its tail.
For example, a parse of a certain real-world .torrent
file:
(unbencode (open-input-file "debian.torrent"))) => ((dictionary (#"announce" . #"http://cdimage.debian.org:6969/announce") (#"comment" . #"Debian CD from cdimage.debian.org") (#"creation date" . 1105009474) (#"info" dictionary (#"length" . 600158208) (#"name" . #"debian-30r4-i386-binary-1.iso") (#"piece length" . 524288) (#"pieces" . [...large byte string...]))))
bencode.scm
is currently specific to PLT 299/3xx, due to the need
for byte I/O and some representation for byte sequences. Otherwise, the
code has been written to require only R5RS, SRFI-6, and SRFI-23.
Parses a single bencoding object (and any child objects, in the case of a list or dictionary) from input port port and yields the Scheme representation.
Yields a list of the Scheme representations of all bencoding objects parsed from input port port.
The bencode.scm
test suite can be enabled by editing the source code
file and loading Testeez.