Documentation

Index

Constants

This section is empty.

Variables

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

Functions

This section is empty.

Types

type Action

type Action int32
const (
	ActionConnect Action = iota
	ActionAnnounce
	ActionScrape
	ActionError
)

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       uint64
	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 Peer

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

    func (Peer) FromNodeAddr

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

    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
    }