v1.53.2 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Dec 5, 2023 License: MPL-2.0 Imports: 17 Imported by: 581


A library for manipulating ".torrent" files.




View Source
const HashSize = infohash.Size
View Source
const NoName = "-"

The Info.Name field is "advisory". For multi-file torrents it's usually a suggested directory name. There are situations where we don't want a directory (like using the contents of a torrent as the immediate contents of a directory), or the name is invalid. Transmission will inject the name of the torrent file if it doesn't like the name, resulting in a different infohash ( To work around these situations, we will use a sentinel name for compatibility with Transmission and to signal to our own client that we intended to have no directory name. By exposing it in the API we can check for references to this behaviour within this implementation.


View Source
var (
	NewHashFromHex = infohash.FromHexString
	HashBytes      = infohash.HashBytes
View Source
var ParseMagnetURI = ParseMagnetUri

Deprecated: Use ParseMagnetUri.


func ChoosePieceLength added in v1.47.0

func ChoosePieceLength(totalLength int64) (pieceLength int64)

Choose a good piecelength.

func GeneratePieces added in v1.16.0

func GeneratePieces(r io.Reader, pieceLength int64, b []byte) ([]byte, error)


type AnnounceList

type AnnounceList [][]string

func (AnnounceList) Clone added in v1.16.0

func (al AnnounceList) Clone() (ret AnnounceList)

func (AnnounceList) DistinctValues

func (al AnnounceList) DistinctValues() (ret []string)

func (AnnounceList) OverridesAnnounce

func (al AnnounceList) OverridesAnnounce(announce string) bool

Whether the AnnounceList should be preferred over a single URL announce.

type FileInfo

type FileInfo struct {
	Length   int64    `bencode:"length"` // BEP3
	Path     []string `bencode:"path"`   // BEP3
	PathUtf8 []string `bencode:"path.utf-8,omitempty"`

Information specific to a single file inside the MetaInfo structure.

func (FileInfo) BestPath added in v1.42.0

func (fi FileInfo) BestPath() []string

func (*FileInfo) DisplayPath

func (fi *FileInfo) DisplayPath(info *Info) string

func (FileInfo) Offset

func (me FileInfo) Offset(info *Info) (ret int64)

type Hash

type Hash = infohash.T

type Info

type Info struct {
	PieceLength int64  `bencode:"piece length"` // BEP3
	Pieces      []byte `bencode:"pieces"`       // BEP3
	Name        string `bencode:"name"`         // BEP3
	NameUtf8    string `bencode:"name.utf-8,omitempty"`
	Length      int64  `bencode:"length,omitempty"`  // BEP3, mutually exclusive with Files
	Private     *bool  `bencode:"private,omitempty"` // BEP27
	// TODO: Document this field.
	Source string     `bencode:"source,omitempty"`
	Files  []FileInfo `bencode:"files,omitempty"` // BEP3, mutually exclusive with Length

The info dictionary.

func (Info) BestName added in v1.42.0

func (info Info) BestName() string

func (*Info) BuildFromFilePath

func (info *Info) BuildFromFilePath(root string) (err error)

This is a helper that sets Files and Pieces from a root path and its children.

func (*Info) GeneratePieces

func (info *Info) GeneratePieces(open func(fi FileInfo) (io.ReadCloser, error)) (err error)

Sets Pieces (the block of piece hashes in the Info) by using the passed function to get at the torrent data.

func (*Info) IsDir

func (info *Info) IsDir() bool

func (*Info) NumPieces

func (info *Info) NumPieces() int

func (*Info) Piece

func (info *Info) Piece(index int) Piece

func (*Info) TotalLength

func (info *Info) TotalLength() (ret int64)

func (*Info) UpvertedFiles

func (info *Info) UpvertedFiles() []FileInfo

The files field, converted up from the old single-file in the parent info dict if necessary. This is a helper to avoid having to conditionally handle single and multi-file torrent infos.

type Magnet

type Magnet struct {
	InfoHash    Hash       // Expected in this implementation
	Trackers    []string   // "tr" values
	DisplayName string     // "dn" value, if not empty
	Params      url.Values // All other values, such as "", "as", "xs" etc.

Magnet link components.

func ParseMagnetUri added in v1.19.0

func ParseMagnetUri(uri string) (m Magnet, err error)

ParseMagnetUri parses Magnet-formatted URIs into a Magnet instance

func (Magnet) String

func (m Magnet) String() string

type MetaInfo

type MetaInfo struct {
	InfoBytes    bencode.Bytes `bencode:"info,omitempty"`                              // BEP 3
	Announce     string        `bencode:"announce,omitempty"`                          // BEP 3
	AnnounceList AnnounceList  `bencode:"announce-list,omitempty"`                     // BEP 12
	Nodes        []Node        `bencode:"nodes,omitempty,ignore_unmarshal_type_error"` // BEP 5
	// Where's this specified? Mentioned at
	// (optional) the creation time of
	// the torrent, in standard UNIX epoch format (integer, seconds since 1-Jan-1970 00:00:00 UTC)
	CreationDate int64   `bencode:"creation date,omitempty,ignore_unmarshal_type_error"`
	Comment      string  `bencode:"comment,omitempty"`
	CreatedBy    string  `bencode:"created by,omitempty"`
	Encoding     string  `bencode:"encoding,omitempty"`
	UrlList      UrlList `bencode:"url-list,omitempty"` // BEP 19 WebSeeds

func Load

func Load(r io.Reader) (*MetaInfo, error)

Load a MetaInfo from an io.Reader. Returns a non-nil error in case of failure.

func LoadFromFile

func LoadFromFile(filename string) (*MetaInfo, error)

Convenience function for loading a MetaInfo from a file.

func (MetaInfo) HashInfoBytes

func (mi MetaInfo) HashInfoBytes() (infoHash Hash)

func (MetaInfo) Magnet

func (mi MetaInfo) Magnet(infoHash *Hash, info *Info) (m Magnet)

Creates a Magnet from a MetaInfo. Optional infohash and parsed info can be provided.

func (*MetaInfo) SetDefaults

func (mi *MetaInfo) SetDefaults()

Set good default values in preparation for creating a new MetaInfo file.

func (MetaInfo) UnmarshalInfo

func (mi MetaInfo) UnmarshalInfo() (info Info, err error)

func (*MetaInfo) UpvertedAnnounceList

func (mi *MetaInfo) UpvertedAnnounceList() AnnounceList

Returns the announce list converted from the old single announce field if necessary.

func (MetaInfo) Write

func (mi MetaInfo) Write(w io.Writer) error

Encode to bencoded form.

type Node

type Node string

func (*Node) UnmarshalBencode

func (n *Node) UnmarshalBencode(b []byte) (err error)

type Piece

type Piece struct {
	Info *Info // Can we embed the fields here instead, or is it something to do with saving memory?
	// contains filtered or unexported fields

func (Piece) Hash

func (p Piece) Hash() (ret Hash)

func (Piece) Index

func (p Piece) Index() pieceIndex

func (Piece) Length

func (p Piece) Length() int64

func (Piece) Offset

func (p Piece) Offset() int64

type PieceKey

type PieceKey struct {
	InfoHash Hash
	Index    pieceIndex

Uniquely identifies a piece.

type UrlList

type UrlList []string

func (*UrlList) UnmarshalBencode

func (me *UrlList) UnmarshalBencode(b []byte) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL