Go to file
Matt Joiner 64848a206a Replace go-check with testify
It's muuuuch better.
2015-08-03 16:23:05 +10:00
bencode Several trivial fixes 2015-06-28 16:39:04 +10:00
cmd cmd/torrent: Remove some dead code 2015-07-21 22:54:50 +10:00
data Fix locking in data/blob 2015-08-03 14:24:59 +10:00
dht dht: Export some useful variables 2015-06-29 19:36:08 +10:00
fs fs: Remove errant logging 2015-07-22 19:07:01 +10:00
internal Comments 2015-06-01 18:17:14 +10:00
iplist Move IP blocklist loading into iplist package 2015-06-22 19:44:59 +10:00
logonce logonce is a package that prints each distinct message only once 2014-11-16 13:04:44 -06:00
metainfo Adding trackerless.torrent metainfo file to test suite 2015-05-03 16:37:48 +01:00
mmap_span Multiple file metainfo mode support in cmd tools 2015-05-16 13:23:33 +01:00
mse Use rogpeppe's sortimports to fix this goimports ordering madness 2015-03-26 17:18:08 +11: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 tracker_test: Check for the error string instead of the type 2015-08-02 14:57:28 +10:00
util Apply sortimports 2015-04-30 00:31:34 +10:00
LICENSE The license is MPL2.0 2015-03-25 17:35:33 +11:00
NOTES Add UTP support, disable TCP for now. DHT moves to another port 2014-11-16 13:29:31 -06:00
README.md Remove clunky sentence from README 2015-08-02 20:45:26 +10:00
TODO TODO 2015-06-23 02:02:32 +10:00
client.go Trivial missed changes 2015-08-02 21:00:49 +10:00
client_test.go Replace go-check with testify 2015-08-03 16:23:05 +10:00
config.go Support seeding 2015-05-15 08:39:53 +10:00
connection.go connection.writer wasn't working efficiently 2015-08-02 20:39:31 +10:00
connection_test.go Replace go-check with testify 2015-08-03 16:23:05 +10:00
doc.go Document ConfigDir 2015-06-22 19:48:50 +10:00
example_test.go Clarify Example_fileReader 2015-06-04 14:25:52 +10:00
file.go Avoid holding client lock while scanning pieces in File.State 2015-07-17 20:58:25 +10: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
piece.go Store chunk data without holding client lock 2015-07-15 16:00:59 +10:00
piecestate.go Change the way piece state is exposed to give more detail 2015-06-01 18:22:12 +10:00
reader.go Hold client lock as little as possible in Reader.readAt 2015-07-17 20:59:26 +10:00
stateless.go Rewrite import paths for migration from Bitbucket 2015-03-20 16:37:44 +11:00
t.go Explicitly import Torrent.InfoHash 2015-08-02 03:55:48 +10:00
torrent.go Several speedups in logic 2015-07-17 21:07:01 +10:00
torrent_test.go Replace pruning timer with as-required connection dropping 2015-06-30 00:45:26 +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

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.

Commands

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

Note that godo that I invoke in the following examples is a command that 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%)