Full-featured BitTorrent client package and utilities
Go to file
Matt Joiner be6052912f Improve error message when piece fails to be completed
Happens occasionally on some servers, can't work out why.
2016-02-16 23:35:19 +11:00
bencode Actually fix #41 properly; and several big changes 2015-12-07 03:28:28 +11:00
cmd Use new tracker package interface 2016-02-07 18:49:35 +11:00
data Use Cache.StatFile to get piece length in the backend 2016-02-10 00:48:23 +11:00
dht go vet 2016-02-02 00:44:29 +11:00
fs Fixes for torrent.Reader not having ReadAt 2016-01-18 20:12:51 +11:00
internal Remove internal/pieceordering 2016-01-18 20:11:53 +11:00
iplist Avoid allocation in iplist.Ranger.Lookup 2015-10-19 00:00:26 +11:00
logonce logonce is a package that prints each distinct message only once 2014-11-16 13:04:44 -06:00
metainfo missinggo.ZeroReader is now a var, not a type 2016-02-05 01:20:02 +11:00
mmap_span Switch from launchpad.net/gommap to github.com/edsrzf/mmap-go for Windows support 2015-12-23 03:50:34 +11:00
mse Some utils moved to missinggo 2015-08-04 00:29:01 +10:00
peer_protocol Add support for Fast Extension 2015-03-12 20:06:23 +11:00
testdata Add benchmark for adding a torrent with a lot of pieces 2015-06-22 19:43:22 +10:00
tracker Retain query parameters from announce URL. 2016-02-14 21:15:51 +01:00
util util/profile was replaced by github.com/anacrolix/envpprof 2016-01-31 18:35:51 +11:00
LICENSE The license is MPL2.0 2015-03-25 17:35:33 +11:00
README.md list cloud torrent in "projects using Torrent" 2016-01-29 16:13:24 +11:00
TODO Use new tracker package interface 2016-02-07 18:49:35 +11:00
client.go Improve error message when piece fails to be completed 2016-02-16 23:35:19 +11:00
client_test.go Export PieceStateChange through piece state change pubsub 2016-02-07 21:55:47 +11:00
config.go Make Config.DHTConfig not a pointer 2016-01-17 00:12:53 +11:00
connection.go Only assert we should be requesting a piece in debug mode 2016-02-15 17:47:04 +11:00
connection_test.go Remove internal/pieceordering 2016-01-18 20:11:53 +11:00
data.go Create a pieceStore interface, and merge in my httpfile backend, and replace data/blob 2015-10-04 00:22:46 +10:00
doc.go Add packed IP list 2015-09-23 18:25:22 +10:00
example_test.go Fix the download/prioritize piece functions 2016-01-19 01:28:56 +11:00
file.go Reinstate File.PrioritizeRegion() for backward compatibility 2016-02-07 17:15:06 +11:00
file_test.go Add File.Cancel 2016-02-05 01:18:54 +11:00
issue35_test.go Make Config.DHTConfig not a pointer 2016-01-17 00:12:53 +11:00
magnet.go Make ParseMagnetURI easier to read 2015-03-22 13:50:16 -04:00
magnet_test.go go vet 2015-05-15 08:41:42 +10:00
misc.go Explicitly import Torrent.InfoHash 2015-08-02 03:55:48 +10:00
misc_test.go Replace go-check with testify 2015-08-03 16:23:05 +10:00
ordered.go More cleaning of public interface 2015-03-08 17:28:14 +11:00
ordered_test.go More cleaning of public interface 2015-03-08 17:28:14 +11:00
pex.go Redo the compact peer types 2015-08-17 19:52:47 +10:00
pex_test.go Redo the compact peer types 2015-08-17 19:52:47 +10:00
piece.go Rework requesting of shuffled pending pieces 2016-02-07 21:58:48 +11:00
piecestate.go Change the way piece state is exposed to give more detail 2015-06-01 18:22:12 +10:00
reader.go Reintroduce connection piece inclinations, and begin caching piece priorities 2016-02-01 21:11:41 +11:00
t.go Export Torrent.PieceState() 2016-02-07 21:57:57 +11:00
torrent.go Trigger piece request order changes on connections in a few spots 2016-02-11 17:57:57 +11:00
torrent_test.go Invalid test 2015-08-05 02:38:36 +10:00
worst_conns.go Replace pruning timer with as-required connection dropping 2015-06-30 00:45:26 +10:00

README.md

torrent

Join the chat at https://gitter.im/anacrolix/torrent Build Status GoDoc Coverage

This repository implements BitTorrent-related packages and command-line utilities in Go. The emphasis is on use as a library from other projects. It's been used 24/7 in production by a downstream, private service since late 2014.

There is support for protocol encryption, DHT, PEX, uTP, and various extensions. See the package documentation for a more complete list. There are several data storage backends provided: blob, file, and mmap, and you can write your own, such as to store data on S3, or in a database. You can use the provided binaries in ./cmd, or use torrent as a library for your own applications.

Many of the sub-packages can be used for other purposes: dht, bencode, and tracker, in particular.

Installation

Install the library package with go get github.com/anacrolix/torrent, or the provided cmds with go get github.com/anacrolix/torrent/cmd/....

Library example

There is a small example in the package documentation.

Other projects using Torrent

Commands

Here I'll describe what some of the provided commands in ./cmd do.

Note that the godo command which is invoked in the following examples builds and executes a Go import path, like go run. It's easier to use this convention than to spell out the install/invoke cycle for every single example.

torrent

Downloads torrents from the command-line.

$ go get github.com/anacrolix/torrent/cmd/torrent
$ torrent 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
2015/04/01 02:08:20 main.go:137: downloaded ALL the torrents
$ md5sum ubuntu-14.04.2-desktop-amd64.iso
1b305d585b1918f297164add46784116  ubuntu-14.04.2-desktop-amd64.iso
$ echo such amaze
wow

torrentfs

torrentfs mounts a FUSE filesystem at -mountDir. The contents are the torrents described by the torrent files and magnet links at -torrentPath. Data for read requests is fetched only as required from the torrent network, and stored at -downloadDir.

$ mkdir mnt torrents
$ godo github.com/anacrolix/torrent/cmd/torrentfs -mountDir mnt -torrentPath torrents &
$ cd torrents
$ wget http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso.torrent
$ cd ..
$ ls mnt
ubuntu-14.04.2-desktop-amd64.iso
$ pv mnt/ubuntu-14.04.2-desktop-amd64.iso | md5sum
996MB 0:04:40 [3.55MB/s] [========================================>] 100%
1b305d585b1918f297164add46784116  -

torrent-magnet

Creates a magnet link from a torrent file. Note the extracted trackers, display name, and info hash.

$ godo github.com/anacrolix/torrent/cmd/torrent-magnet < ubuntu-14.04.2-desktop-amd64.iso.torrent
magnet:?xt=urn:btih:546cf15f724d19c4319cc17b179d7e035f89c1f4&dn=ubuntu-14.04.2-desktop-amd64.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&tr=http%3A%2F%2Fipv6.torrent.ubuntu.com%3A6969%2Fannounce

dht-ping

Pings DHT nodes with the given network addresses.

$ godo ./cmd/dht-ping router.bittorrent.com:6881 router.utorrent.com:6881
2015/04/01 17:21:23 main.go:33: dht server on [::]:60058
32f54e697351ff4aec29cdbaabf2fbe3467cc267 (router.bittorrent.com:6881): 648.218621ms
ebff36697351ff4aec29cdbaabf2fbe3467cc267 (router.utorrent.com:6881): 873.864706ms
2/2 responses (100.000000%)