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.