Documentation ¶
Overview ¶
Package models implements the common data types used throughout a BitTorrent tracker.
Index ¶
- Variables
- func AppendPeer(ipv4s, ipv6s *PeerList, ann *Announce, peer *Peer) int
- func IsPublicError(err error) bool
- type Announce
- type AnnounceResponse
- type ClientError
- type Endpoint
- type NotFoundError
- type Peer
- type PeerKey
- type PeerList
- type PeerMap
- func (pm *PeerMap) AppendPeers(ipv4s, ipv6s PeerList, ann *Announce, wanted int) (PeerList, PeerList)
- func (pm *PeerMap) Contains(pk PeerKey) bool
- func (pm *PeerMap) Delete(pk PeerKey)
- func (pm *PeerMap) Len() int
- func (pm *PeerMap) LookUp(pk PeerKey) (peer Peer, exists bool)
- func (pm *PeerMap) Purge(unixtime int64)
- func (pm *PeerMap) Put(p Peer)
- type ProtocolError
- type Scrape
- type ScrapeResponse
- type Torrent
Constants ¶
This section is empty.
Variables ¶
var ( // ErrMalformedRequest is returned when a request does not contain the // required parameters needed to create a model. ErrMalformedRequest = ClientError("malformed request") // ErrBadRequest is returned when a request is invalid in the peer's // current state. For example, announcing a "completed" event while // not a leecher or a "stopped" event while not active. ErrBadRequest = ClientError("bad request") // ErrTorrentDNE is returned when a torrent does not exist. ErrTorrentDNE = NotFoundError("torrent does not exist") // ErrClientUnapproved is returned when a clientID is not in the whitelist. ErrClientUnapproved = ClientError("client is not approved") )
Functions ¶
func AppendPeer ¶
AppendPeer adds a peer to its corresponding peerlist.
func IsPublicError ¶
IsPublicError determines whether an error should be propogated to the client.
Types ¶
type Announce ¶
type Announce struct { Config *config.Config `json:"config"` Compact bool `json:"compact"` Downloaded uint64 `json:"downloaded"` Event string `json:"event"` IPv4 Endpoint `json:"ipv4"` IPv6 Endpoint `json:"ipv6"` Infohash string `json:"infohash"` Left uint64 `json:"left"` NumWant int `json:"numwant"` PeerID string `json:"peer_id"` Uploaded uint64 `json:"uploaded"` JWT string `json:"jwt"` Torrent *Torrent `json:"-"` Peer *Peer `json:"-"` PeerV4 *Peer `json:"-"` // Only valid if HasIPv4() is true. PeerV6 *Peer `json:"-"` // Only valid if HasIPv6() is true. }
Announce is an Announce by a Peer.
func (*Announce) BuildPeer ¶
BuildPeer creates the Peer representation of an Announce. BuildPeer creates one peer for each IP in the announce, and panics if there are none.
func (*Announce) ClientID ¶
ClientID returns the part of a PeerID that identifies a Peer's client software.
type AnnounceResponse ¶
type AnnounceResponse struct { Announce *Announce Complete, Incomplete int Interval, MinInterval time.Duration IPv4Peers, IPv6Peers PeerList Compact bool }
AnnounceResponse contains the information needed to fulfill an announce.
type ClientError ¶
type ClientError string
func (ClientError) Error ¶
func (e ClientError) Error() string
type Endpoint ¶
Endpoint is an IP and port pair.
IP always has length net.IPv4len if IPv4, and net.IPv6len if IPv6.
type NotFoundError ¶
type NotFoundError ClientError
func (NotFoundError) Error ¶
func (e NotFoundError) Error() string
type Peer ¶
type Peer struct { ID string `json:"id"` Uploaded uint64 `json:"uploaded"` Downloaded uint64 `json:"downloaded"` Left uint64 `json:"left"` LastAnnounce int64 `json:"lastAnnounce"` Endpoint }
Peer represents a participant in a BitTorrent swarm.
func (*Peer) HasIPv4 ¶
HasIPv4 determines if a peer's IP address can be represented as an IPv4 address.
type PeerKey ¶
type PeerKey string
PeerKey is the key used to uniquely identify a peer in a swarm.
func NewPeerKey ¶
NewPeerKey creates a properly formatted PeerKey.
type PeerList ¶
type PeerList []Peer
PeerList represents a list of peers: either seeders or leechers.
type PeerMap ¶
type PeerMap struct { Peers map[string]map[PeerKey]Peer `json:"peers"` Seeders bool `json:"seeders"` Config config.SubnetConfig `json:"config"` Size int32 `json:"size"` sync.RWMutex }
PeerMap is a thread-safe map from PeerKeys to Peers. When PreferredSubnet is enabled, it is a thread-safe map of maps from MaskedIPs to Peerkeys to Peers.
func NewPeerMap ¶
NewPeerMap initializes the map for a new PeerMap.
func (*PeerMap) AppendPeers ¶
func (pm *PeerMap) AppendPeers(ipv4s, ipv6s PeerList, ann *Announce, wanted int) (PeerList, PeerList)
AppendPeers adds peers to given IPv4 or IPv6 lists.
type ProtocolError ¶
type ProtocolError ClientError
func (ProtocolError) Error ¶
func (e ProtocolError) Error() string
type ScrapeResponse ¶
type ScrapeResponse struct {
Files []*Torrent
}
ScrapeResponse contains the information needed to fulfill a scrape.