A library for manipulating ".torrent" files.




View Source
const HashSize = 20


View Source
var ParseMagnetURI = ParseMagnetUri

Deprecated: Use ParseMagnetUri.


func GeneratePieces

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


type AnnounceList

type AnnounceList [][]string

func (AnnounceList) Clone

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

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

func (FileInfo) Offset

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

type Hash

type Hash [HashSize]byte

20-byte SHA1 hash used for info and pieces.

func HashBytes

func HashBytes(b []byte) (ret Hash)

func NewHashFromHex

func NewHashFromHex(s string) (h Hash)

func (Hash) AsString

func (h Hash) AsString() string

func (Hash) Bytes

func (h Hash) Bytes() []byte

func (Hash) Format

func (h Hash) Format(f fmt.State, c rune)

func (*Hash) FromHexString

func (h *Hash) FromHexString(s string) (err error)

func (Hash) HexString

func (h Hash) HexString() string

func (Hash) MarshalText

func (h Hash) MarshalText() (text []byte, err error)

func (Hash) String

func (h Hash) String() string

func (*Hash) UnmarshalText

func (h *Hash) UnmarshalText(b []byte) error

type Info

type Info struct {
	PieceLength int64  `bencode:"piece length"`      // BEP3
	Pieces      []byte `bencode:"pieces"`            // BEP3
	Name        string `bencode:"name"`              // BEP3
	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) 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

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"`         // 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

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