Haskell Torrent - a haskell bittorrent client.
Introduction
This is a Haskell bittorrent client. I am the introduction document
and I need to be written by some generous soul!
Installation
Here is what I do to install haskell torrrent locally on my machine:
cabal install --prefix=$HOME --user
Since we are using the magnificient cabal, this is enough to install haskell
torrent in our $HOME/bin directory.
Usage
Haskell torrent can currently only do one very simple thing. If you call it with
HaskellTorrent foo.torrent
then it will begin downloading the file in foo.torrent to the current
directory via the Bittorrent protocol. Note: Currently we have no support
for multifile torrents.
Protocol support
Currently haskell-torrent supports the following BEPs (See the
BEP Process document for an
explanation of these)
Haskell-torrent is not supporting these BEPs, but strives to do so one day:
- 003, 005, 006, 007, 010, 012, 015, 009, 023, 018, 021, 022, 024, 026, 027,
028, 029, 030, 031, 032
Haskell-torrent will probably never support these BEPs:
Debugging
For debugging, jlouis tends to use the following:
make conf build test
This builds HaskellTorrent with the Debug flag set and also builds the software with profiling
by default so it is easy to hunt down performance regressions. It also runs the internal test-suite
for various values.
Reading material for hacking HaskellTorrent:
-
Protocol specification - BEP0003:
This is the original protocol specification, tracked into the BEP
process. It is worth reading because it explains the general overview
and the precision with which the original protocol was written down.
-
Bittorrent Enhancement Process - BEP0000
The BEP process is an official process for adding extensions on top of
the BitTorrent protocol. It allows implementors to mix and match the
extensions making sense for their client and it allows people to
discuss extensions publicly in a forum. It also provisions for the
deprecation of certain features in the long run as they prove to be of
less value.
-
wiki.theory.org
An alternative description of the protocol. This description is in
general much more detailed than the BEP structure. It is worth a read
because it acts somewhat as a historic remark and a side channel. Note
that there are some commentary on these pages which can be disputed
quite a lot.
-
"Concurrent Programming in ML" - John. H. Reppy
This book describes the CML system which HaskellTorrent uses. The basic
idea of CML is that of higher order events. That is, events which can
be abstractly manipulated before being synchronized on. For instance,
CML events are a Functor instance, though the code currently does not
reflect that. This also provisions for fair selective receives
with dynamic choice of which events may fire.
-
"A Concurrent ML library in Concurrent Haskell" - Avik Chaudhuri, ICFP 2009
The paper behind the CML library which HaskellTorrent uses. It
describes a way to transform the first-order MVar and ForkIO structures
of concurrent haskell into a higher order CML language by use of a
clever matchmaking algorithm.
-
"Supervisor Behaviour"
From the Erlang documentation. How the Erlang Supervisor behaviour
works. The Supervisor and process structure of HaskellTorrent is
somewhat inspired by the Erlang ditto.
Source code Hierarchy
Known bugs
"PieceMgrP"(Fatal): Process exiting due to ex: user error (P/Blk (655,Block {blockOffset = 81920, blockSize = 16384}) is in the HaveBlocks set)
"ConsoleP"(Info): Process Terminated by Supervisor
vim: filetype=none tw=76 expandtab