YTSFlix_Go/vendor/github.com/anacrolix/dht/node.go
2018-11-04 15:58:15 +01:00

58 lines
975 B
Go

package dht
import (
"time"
"github.com/anacrolix/dht/krpc"
)
type nodeKey struct {
addr Addr
id int160
}
type node struct {
nodeKey
announceToken string
readOnly bool
lastGotQuery time.Time
lastGotResponse time.Time
consecutiveFailures int
}
func (n *node) hasAddrAndID(addr Addr, id int160) bool {
return id == n.id && n.addr.String() == addr.String()
}
func (n *node) IsSecure() bool {
return NodeIdSecure(n.id.AsByteArray(), n.addr.UDPAddr().IP)
}
func (n *node) idString() string {
return n.id.ByteString()
}
func (n *node) NodeInfo() (ret krpc.NodeInfo) {
ret.Addr = n.addr.KRPC()
if n := copy(ret.ID[:], n.idString()); n != 20 {
panic(n)
}
return
}
// Per the spec in BEP 5.
func (n *node) IsGood() bool {
if n.id.IsZero() {
return false
}
if time.Since(n.lastGotResponse) < 15*time.Minute {
return true
}
if !n.lastGotResponse.IsZero() && time.Since(n.lastGotQuery) < 15*time.Minute {
return true
}
return false
}