Go to file
Matt Joiner 1cc50f85a6 connection.writer wasn't working efficiently
Because of the pseudo-random selection of a communication in a select statement, flushing was occuring prematurely. Also the buffer was needlessly large. For large messages, like outgoing pieces, it's probably better they just go straight to the wire anyway.

This change will make it easier to implement sending of pieces that doesn't block control messages in the future. Any time that the buffer is empty, we'll be able to signal that it's an optimal time to send a piece.
2015-08-02 20:39:31 +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 AccessTime helper moved to missinggo 2015-06-01 18:26:32 +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 Move CI to drone.io 2015-07-20 18:48:23 +10:00
TODO TODO 2015-06-23 02:02:32 +10:00
client.go Track the connection flags for completed handshakes 2015-08-02 04:06:22 +10:00
client_test.go Add TestResponsive 2015-07-15 15:51:42 +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 Change the way piece state is exposed to give more detail 2015-06-01 18:22:12 +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 Allow chunk size to be specified per torrent 2015-07-15 15:31:18 +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 have been contributions from people using some various packages for integrating BitTorrent into media and other services.

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%)