View Source
const DefaultTrackerAnnounceTimeout = 15 * time.Second

    The code *is* the documentation.


    View Source
    var (
    	ErrBadScheme = errors.New("unknown scheme")


    This section is empty.


    type Action

    type Action int32
    const (
    	ActionConnect Action = iota

    type Announce

    type Announce struct {
    	TrackerUrl string
    	Request    AnnounceRequest
    	HostHeader string
    	HTTPProxy  func(*http.Request) (*url.URL, error)
    	ServerName string
    	UserAgent  string
    	UdpNetwork string
    	// If the port is zero, it's assumed to be the same as the Request.Port.
    	ClientIp4 krpc.NodeAddr
    	// If the port is zero, it's assumed to be the same as the Request.Port.
    	ClientIp6 krpc.NodeAddr
    	Context   context.Context

    func (Announce) Do

    func (me Announce) Do() (res AnnounceResponse, err error)

    type AnnounceEvent

    type AnnounceEvent int32
    const (
    	None      AnnounceEvent = iota
    	Completed               // The local peer just completed the torrent.
    	Started                 // The local peer has just resumed this torrent.
    	Stopped                 // The local peer is leaving the swarm.

    func (AnnounceEvent) String

    func (e AnnounceEvent) String() string

    type AnnounceRequest

    type AnnounceRequest struct {
    	InfoHash   [20]byte
    	PeerId     [20]byte
    	Downloaded int64
    	Left       int64 // If less than 0, math.MaxInt64 will be used for HTTP trackers instead.
    	Uploaded   int64
    	// Apparently this is optional. None can be used for announces done at
    	// regular intervals.
    	Event     AnnounceEvent
    	IPAddress uint32
    	Key       int32
    	NumWant   int32 // How many peer addresses are desired. -1 for default.
    	Port      uint16
    } // 82 bytes

      Marshalled as binary by the UDP client, so be careful making changes.

      type AnnounceResponse

      type AnnounceResponse struct {
      	Interval int32 // Minimum seconds the local peer should wait before next announce.
      	Leechers int32
      	Seeders  int32
      	Peers    []Peer

      type AnnounceResponseHeader

      type AnnounceResponseHeader struct {
      	Interval int32
      	Leechers int32
      	Seeders  int32

      type ConnectionRequest

      type ConnectionRequest struct {
      	ConnectionId int64
      	Action       int32
      	TransctionId int32

      type ConnectionResponse

      type ConnectionResponse struct {
      	ConnectionId int64

      type HttpResponse

      type HttpResponse struct {
      	FailureReason string `bencode:"failure reason"`
      	Interval      int32  `bencode:"interval"`
      	TrackerId     string `bencode:"tracker id"`
      	Complete      int32  `bencode:"complete"`
      	Incomplete    int32  `bencode:"incomplete"`
      	Peers         Peers  `bencode:"peers"`
      	// BEP 7
      	Peers6 krpc.CompactIPv6NodeAddrs `bencode:"peers6"`

      type Peer

      type Peer struct {
      	IP   net.IP
      	Port int
      	ID   []byte

      func (*Peer) FromDictInterface

      func (p *Peer) FromDictInterface(d map[string]interface{})

        Set from the non-compact form in BEP 3.

        func (Peer) FromNodeAddr

        func (p Peer) FromNodeAddr(na krpc.NodeAddr) Peer

        func (Peer) String

        func (p Peer) String() string

        type Peers

        type Peers []Peer

        func (*Peers) UnmarshalBencode

        func (me *Peers) UnmarshalBencode(b []byte) (err error)

        type RequestHeader

        type RequestHeader struct {
        	ConnectionId  int64
        	Action        Action
        	TransactionId int32
        } // 16 bytes

        type ResponseHeader

        type ResponseHeader struct {
        	Action        Action
        	TransactionId int32