de928be582
This should have prevented Torrent.piecePriorityChanged from being called, meaning requests for the completed piece were not canceled, and the piece remained in connection's piece request queue, which meant wasted effort downloading chunks for an already acquired piece. Thanks to @elgatito for discovering the issue. |
||
---|---|---|
.circleci | ||
bencode | ||
cmd | ||
fs | ||
internal | ||
iplist | ||
logonce | ||
metainfo | ||
mmap_span | ||
mse | ||
peer_protocol | ||
storage | ||
testdata | ||
tracker | ||
util | ||
LICENSE | ||
README.md | ||
TODO | ||
client.go | ||
client_test.go | ||
config.go | ||
conn_stats.go | ||
connection.go | ||
connection_test.go | ||
doc.go | ||
example_test.go | ||
file.go | ||
file_test.go | ||
global.go | ||
handshake.go | ||
handshake_test.go | ||
issue97_test.go | ||
issue211_test.go | ||
main_test.go | ||
misc.go | ||
misc_test.go | ||
peerid.go | ||
peerid_test.go | ||
pex.go | ||
pex_test.go | ||
piece.go | ||
piecestate.go | ||
portfwd.go | ||
protocol.go | ||
ratelimitreader.go | ||
reader.go | ||
reader_test.go | ||
rlreader_test.go | ||
spec.go | ||
t.go | ||
torrent.go | ||
torrent_stats.go | ||
torrent_test.go | ||
tracker_scraper.go | ||
utp.go | ||
utp_go.go | ||
utp_libutp.go | ||
utp_test.go | ||
worst_conns.go |
README.md
torrent
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 package torrent
as a library for your own applications.
Many of the sub-packages can be used for other purposes: 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 public projects using torrent
- Go Peerflix
- Cloud Torrent
- Android Torrent Client
- Android libtorrent
- Trickl - Torrent Client
- Confluence
- Remote-Torrent
- Trickl Android Torrent Client
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. This first example does not use godo
.
$ go get github.com/anacrolix/torrent/cmd/torrent
# Now 'torrent' should be in $GOPATH/bin, which should be in $PATH.
$ torrent 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
ubuntu-14.04.2-desktop-amd64.iso [===================================================================>] 99% downloading (1.0 GB/1.0 GB)
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 -metainfoDir
. 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 -metainfoDir=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