Documentation
¶
Index ¶
- func PackNodes(nodes []*Node) (string, error)
- type AnnouncePeerArgs
- type CrawCallback
- type Crawler
- type FindNodeArgs
- type GetPeersArgs
- type Handle
- type Host
- type KRPCErr
- type Message
- func MakeError(transactionID string, err *KRPCErr) (*Message, error)
- func MakeQuery(transactionID string, args interface{}) (*Message, error)
- func MakeQueryEx(q string, transactionID string, args interface{}) (*Message, error)
- func MakeResponse(transactionID string, resp interface{}) (*Message, error)
- type MessageDisposer
- type Node
- type NodePtrSlice
- type PingArgs
- type Response
- type Stimulater
- type SybilCrawler
- type Transaction
- type TransactionDispatcher
- func (dispatcher *TransactionDispatcher) Add(t Transaction) error
- func (dispatcher *TransactionDispatcher) DisposeError(src *net.UDPAddr, transactionID string, code int, describe string)
- func (dispatcher *TransactionDispatcher) DisposeResponse(src *net.UDPAddr, transactionID string, resp bencode.RawMessage)
- func (dispatcher *TransactionDispatcher) Remove(transactionID string)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AnnouncePeerArgs ¶
type AnnouncePeerArgs struct {
NodeID string `bencode:"id"`
InfoHash string `bencode:"info_hash"`
Port int `bencode:"port"`
Token string `bencode:"token"`
}
AnnouncePeerArgs is announce_peer query "a" field
type CrawCallback ¶
CrawCallback will call when Crawler craw a infohash
type Crawler ¶
type Crawler interface {
Crawl(ctx context.Context, callback CrawCallback) error
}
Crawler can crawl infohash from dht.
type FindNodeArgs ¶
FindNodeArgs is find_node query "a" field
type GetPeersArgs ¶
GetPeersArgs is get_peers query "a" field
type Host ¶
type Host struct {
// contains filtered or unexported fields
}
Host is the core of dht.
func (*Host) SendMessage ¶
SendMessage will send message to the node.
func (*Host) Serv ¶
func (core *Host) Serv(ctx context.Context, disposer MessageDisposer) (err error)
Serv starts serving.
func (*Host) SetMaxWorkers ¶
SetMaxWorkers set the max goroutine will be create to dispose dht message. If maxWorkers smaller than 0. it won't set upper limit.
type KRPCErr ¶
type KRPCErr struct {
// contains filtered or unexported fields
}
KRPCErr is krpc errors
func (KRPCErr) MarshalBencode ¶
MarshalBencode implements bencode.Marshaler
func (*KRPCErr) UnmarshalBencode ¶
UnmarshalBencode implements bencode.Unmarshaler
type Message ¶
type Message struct {
TransactionID string `bencode:"t"`
Y string `bencode:"y"`
Q string `bencode:"q,omitempty"`
Args bencode.RawMessage `bencode:"a,omitempty"`
Resp bencode.RawMessage `bencode:"r,omitempty"`
Err *KRPCErr `bencode:"e,omitempty"`
}
Message is KRPC message
func MakeQueryEx ¶
MakeQueryEx can make query optional q
func MakeResponse ¶
MakeResponse make a krpc resp Message
type MessageDisposer ¶
type MessageDisposer interface {
DisposeQuery(src *net.UDPAddr, transactionID string, q string, args bencode.RawMessage) error
DisposeResponse(src *net.UDPAddr, transactionID string, resp bencode.RawMessage) error
DisposeError(src *net.UDPAddr, transactionID string, code int, describe string) error
DisposeUnknownMessage(src *net.UDPAddr, message bencode.RawMessage) error
}
MessageDisposer is used for dispose message.
type NodePtrSlice ¶
type NodePtrSlice []*Node
NodePtrSlice is []*Node
func (NodePtrSlice) MarshalBencode ¶
func (nds NodePtrSlice) MarshalBencode() ([]byte, error)
MarshalBencode implements bencode.Marshaler
func (*NodePtrSlice) UnmarshalBencode ¶
func (nds *NodePtrSlice) UnmarshalBencode(data []byte) error
UnmarshalBencode implemts bencode.Unmarshaler
type PingArgs ¶
type PingArgs struct {
NodeID string `bencode:"id"`
}
PingArgs is ping query "a" field
type Response ¶
type Response struct {
NodeID string `bencode:"id"`
Nodes *NodePtrSlice `bencode:"nodes,omitempty"`
Token string `bencode:"token,omitempty"`
Values []string `bencode:"values,omitempty"`
}
Response is reponse "r" field
type SybilCrawler ¶
type SybilCrawler struct {
// contains filtered or unexported fields
}
SybilCrawler can crawl info hash from DHT.
func NewSybilCrawler ¶
func NewSybilCrawler(host string) *SybilCrawler
NewSybilCrawler returns a new Crawler instance.
func (*SybilCrawler) Crawl ¶
func (crawler *SybilCrawler) Crawl(ctx context.Context, callback CrawCallback) error
Crawl ovrride Crawler.Crawl
func (*SybilCrawler) SetMaxWorkers ¶
func (crawler *SybilCrawler) SetMaxWorkers(n int)
SetMaxWorkers set the max goroutine will be create to dispose dht message. If maxWorkers smaller than 0. it won't set upper limit.
func (*SybilCrawler) Stimulate ¶
func (crawler *SybilCrawler) Stimulate()
Stimulate implements Stimulater
type Transaction ¶
type Transaction interface {
ID() string
ShelfLife() time.Duration
OnLaunch(handle Handle)
OnFinish(handle Handle)
OnResponse(handle Handle, src *net.UDPAddr, resp bencode.RawMessage) bool
OnError(handle Handle, src *net.UDPAddr, code int, describe string) bool
OnTimeout(handle Handle) bool
}
Transaction is KRPC transaction.
type TransactionDispatcher ¶
type TransactionDispatcher struct {
// contains filtered or unexported fields
}
TransactionDispatcher can dispatch transactions
func NewTransactionDispatcher ¶
func NewTransactionDispatcher(handle Handle) *TransactionDispatcher
NewTransactionDispatcher creates a new TransactionDispatcher
func (*TransactionDispatcher) Add ¶
func (dispatcher *TransactionDispatcher) Add(t Transaction) error
Add the transaction into dispathcher and launch it
func (*TransactionDispatcher) DisposeError ¶
func (dispatcher *TransactionDispatcher) DisposeError(src *net.UDPAddr, transactionID string, code int, describe string)
DisposeError dispose error
func (*TransactionDispatcher) DisposeResponse ¶
func (dispatcher *TransactionDispatcher) DisposeResponse(src *net.UDPAddr, transactionID string, resp bencode.RawMessage)
DisposeResponse dispose response.
func (*TransactionDispatcher) Remove ¶
func (dispatcher *TransactionDispatcher) Remove(transactionID string)
Remove the transaction from the dispatcher.