bencode:   Bit  Torrent Bencode Decoding
1 Introduction
2 Interface
unbencode-single
unbencode
3 History
4 Legal
3:0

bencode: BitTorrent Bencode Decoding🔗ℹ

Neil Van Dyke

 (require bencode) package: bencode

1 Introduction🔗ℹ

The bencode package is for parsing the bencoding format of the BitTorrent network protocol into basic Racket data types. This is useful for inspecting .torrent files, and might be useful 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 Racket types is:
  • String Racket byte string.

  • Integer Racket integer.

  • List Racket list.

  • Dictionary Racket list with the symbol dictionary as its head, and an association list as its tail. (This is for historical reasons, from when this package was for Scheme; were this package written today, this type would be a hash.)

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...]))))

2 Interface🔗ℹ

procedure

(unbencode-single port)  list?

  port : input-port?
Parses a single bencoding object (and any child objects, in the case of a list or dictionary) from input port port and yields the Racket representation.

procedure

(unbencode port)  list?

  port : input-port?
Yields a list of the Racket representations of all bencoding objects parsed from input port port.

3 History🔗ℹ

4 Legal🔗ℹ

Copyright (c) 2005, 2009, 2012, 2016 Neil 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 3 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/licenses/ for details. For other licenses and consulting, please contact the author.