Documentation ¶
Overview ¶
Package torrent implements a torrent client.
Simple example:
c, _ := torrent.NewClient(&torrent.Config{}) defer c.Close() t, _ := c.AddMagnet("magnet:?xt=urn:btih:ZOCMZQIPFFW7OLLMIC5HUB6BPCSDEOQU") <-t.GotInfo t.DownloadAll() c.WaitAll() log.Print("ermahgerd, torrent downloaded")
Index ¶
- type Client
- func (me *Client) AddMagnet(uri string) (T Torrent, err error)
- func (me *Client) AddTorrent(mi *metainfo.MetaInfo) (T Torrent, err error)
- func (me *Client) AddTorrentFromFile(filename string) (T Torrent, err error)
- func (cl *Client) AddTorrentSpec(spec *TorrentSpec) (T Torrent, new bool, err error)
- func (me *Client) Close()
- func (cl *Client) ConfigDir() string
- func (me *Client) IPBlockList() *iplist.IPList
- func (me *Client) ListenAddr() (addr net.Addr)
- func (me *Client) PeerID() string
- func (me *Client) SetIPBlockList(list *iplist.IPList)
- func (cl *Client) Torrent(ih InfoHash) (T Torrent, ok bool)
- func (me *Client) Torrents() (ret []Torrent)
- func (me *Client) WaitAll() bool
- func (cl *Client) WriteStatus(_w io.Writer)
- type Config
- type File
- type FilePieceState
- type Handle
- type InfoHash
- type Magnet
- type Peer
- type PieceStatusCharSequence
- type Reader
- type SectionOpener
- type StatefulData
- type Torrent
- func (t Torrent) AddPeers(pp []Peer) error
- func (t Torrent) BytesCompleted() int64
- func (t Torrent) DownloadAll()
- func (t Torrent) Drop()
- func (t Torrent) Files() (ret []File)
- func (t *Torrent) GotInfo() <-chan struct{}
- func (t *Torrent) Info() *metainfo.Info
- func (t Torrent) Length() int64
- func (t Torrent) MetaInfo() *metainfo.MetaInfo
- func (t Torrent) Name() string
- func (t *Torrent) NewReader() (ret *Reader)
- func (t Torrent) NumPieces() int
- func (t Torrent) PieceStatusCharSequences() []PieceStatusCharSequence
- func (t Torrent) SetRegionPriority(off, len int64)
- func (t Torrent) String() string
- type TorrentDataOpener
- type TorrentSpec
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) AddTorrent ¶
func (*Client) AddTorrentFromFile ¶
func (*Client) AddTorrentSpec ¶
func (cl *Client) AddTorrentSpec(spec *TorrentSpec) (T Torrent, new bool, err error)
Add or merge a torrent spec. If the torrent is already present, the trackers will be merged with the existing ones. If the Info isn't yet known, it will be set. The display name is replaced if the new spec provides one. Returns new if the torrent wasn't already in the client.
func (*Client) Close ¶
func (me *Client) Close()
Stops the client. All connections to peers are closed and all activity will come to a halt.
func (*Client) IPBlockList ¶
func (*Client) ListenAddr ¶
func (*Client) SetIPBlockList ¶
func (*Client) WaitAll ¶
Returns true when all torrents are completely downloaded and false if the client is stopped before that.
func (*Client) WriteStatus ¶
Writes out a human readable status of the client, such as for writing to a HTTP status page.
type Config ¶
type Config struct { // Store torrent file data in this directory unless TorrentDataOpener is // specified. DataDir string `long:"data-dir" description:"directory to store downloaded torrent data"` // The address to listen for new uTP and TCP bittorrent protocol // connections. DHT shares a UDP socket with uTP unless configured // otherwise. ListenAddr string `long:"listen-addr" value-name:"HOST:PORT"` // Don't announce to trackers. This only leaves DHT to discover peers. DisableTrackers bool `long:"disable-trackers"` DisablePEX bool `long:"disable-pex"` // Don't create a DHT. NoDHT bool `long:"disable-dht"` // Overrides the default DHT configuration. DHTConfig *dht.ServerConfig // Don't ever send chunks to peers. NoUpload bool `long:"no-upload"` // Upload even after there's nothing in it for us. By default uploading is // not altruistic. Seed bool `long:"seed"` // User-provided Client peer ID. If not present, one is generated automatically. PeerID string // For the bittorrent protocol. DisableUTP bool // For the bittorrent protocol. DisableTCP bool `long:"disable-tcp"` // Don't automatically load "$ConfigDir/blocklist". NoDefaultBlocklist bool // Defaults to "$HOME/.config/torrent". This is where "blocklist", // "torrents" and other operational files are stored. ConfigDir string // Don't save or load to a cache of torrent files stored in // "$ConfigDir/torrents". DisableMetainfoCache bool // Called to instantiate storage for each added torrent. Provided backends // are in $REPO/data. If not set, the "file" implementation is used. TorrentDataOpener DisableEncryption bool `long:"disable-encryption"` }
Override Client defaults.
type File ¶
type File struct {
// contains filtered or unexported fields
}
Provides access to regions of torrent data that correspond to its files.
func (*File) PrioritizeRegion ¶
func (*File) Progress ¶
func (f *File) Progress() (ret []FilePieceState)
type FilePieceState ¶
type Magnet ¶
func ParseMagnetURI ¶
ParseMagnetURI parses Magnet-formatted URIs into a Magnet instance
type PieceStatusCharSequence ¶
type Reader ¶
type Reader struct {
// contains filtered or unexported fields
}
Accesses torrent data via a client.
func (*Reader) SetReadahead ¶
func (*Reader) SetResponsive ¶
func (r *Reader) SetResponsive()
Don't wait for pieces to complete and be verified. Read calls return as soon as they can when the underlying chunks become available.
type SectionOpener ¶
type SectionOpener interface { // Open a ReadCloser at the given offset into torrent data. n is how many // bytes we intend to read. OpenSection(off, n int64) (io.ReadCloser, error) }
A Data that implements this has a streaming interface that should be preferred over ReadAt. For example, the data is stored in blocks on the network and have a fixed cost to open.
type StatefulData ¶
type StatefulData interface { data.Data // We believe the piece data will pass a hash check. PieceCompleted(index int) error // Returns true if the piece is complete. PieceComplete(index int) bool }
Data maintains per-piece persistent state.
type Torrent ¶
type Torrent struct {
// contains filtered or unexported fields
}
A handle to a live torrent within a Client.
func (Torrent) BytesCompleted ¶
func (t Torrent) BytesCompleted() int64
Don't call this before the info is available.
func (Torrent) DownloadAll ¶
func (t Torrent) DownloadAll()
Marks the entire torrent for download. Requires the info first, see GotInfo.
func (Torrent) Files ¶
Returns handles to the files in the torrent. This requires the metainfo is available first.
func (*Torrent) GotInfo ¶
func (t *Torrent) GotInfo() <-chan struct{}
Closed when the info (.Info()) for the torrent has become available. Using features of Torrent that require the info before it is available will have undefined behaviour.
func (Torrent) MetaInfo ¶
Returns a run-time generated MetaInfo that includes the info bytes and announce-list as currently known to the client.
func (Torrent) Name ¶
func (t Torrent) Name() string
The current working name for the torrent. Either the name in the info dict, or a display name given such as by the dn value in a magnet link, or "".
func (Torrent) PieceStatusCharSequences ¶
func (t Torrent) PieceStatusCharSequences() []PieceStatusCharSequence
Returns the state of pieces of the torrent. They are grouped into runs of same state. The sum of the Counts of the sequences is the number of pieces in the torrent. See the function torrent.pieceStatusChar for the possible states.
func (Torrent) SetRegionPriority ¶
type TorrentSpec ¶
type TorrentSpec struct { Trackers [][]string InfoHash InfoHash Info *metainfo.InfoEx DisplayName string }
Specifies a new torrent for adding to a client. There are helpers for magnet URIs and torrent metainfo files.
func TorrentSpecFromMagnetURI ¶
func TorrentSpecFromMagnetURI(uri string) (spec *TorrentSpec, err error)
func TorrentSpecFromMetaInfo ¶
func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) (spec *TorrentSpec)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
dht-ping
Pings DHT nodes with the given network addresses.
|
Pings DHT nodes with the given network addresses. |
magnet-metainfo
Converts magnet URIs and info hashes into torrent metainfo files.
|
Converts magnet URIs and info hashes into torrent metainfo files. |
torrent
Downloads torrents from the command-line.
|
Downloads torrents from the command-line. |
torrentfs
Mounts a FUSE filesystem backed by torrents and magnet links.
|
Mounts a FUSE filesystem backed by torrents and magnet links. |
Package DHT implements a DHT for use with the BitTorrent protocol, described in BEP 5: http://www.bittorrent.org/beps/bep_0005.html.
|
Package DHT implements a DHT for use with the BitTorrent protocol, described in BEP 5: http://www.bittorrent.org/beps/bep_0005.html. |
internal
|
|
pieceordering
Implements ordering of torrent piece indices for such purposes as download prioritization.
|
Implements ordering of torrent piece indices for such purposes as download prioritization. |
Package logonce implements an io.Writer facade that only performs distinct writes.
|
Package logonce implements an io.Writer facade that only performs distinct writes. |
dirwatch
Package dirwatch provides filesystem-notification based tracking of torrent info files and magnet URIs in a directory.
|
Package dirwatch provides filesystem-notification based tracking of torrent info files and magnet URIs in a directory. |