mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-04-24 22:32:13 +00:00
change peer validation func
This commit is contained in:
parent
7c27400a1e
commit
d7b6b1b091
32
dht.go
32
dht.go
@ -202,10 +202,6 @@ func NewDHTClient(ctx context.Context, h host.Host, dstore ds.Batching) *IpfsDHT
|
||||
}
|
||||
|
||||
func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
|
||||
rt, err := makeRoutingTable(h, cfg)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to construct routing table,err=%s", err)
|
||||
}
|
||||
|
||||
protocols := []protocol.ID{cfg.protocolPrefix + kad2}
|
||||
serverProtocols := []protocol.ID{cfg.protocolPrefix + kad2, cfg.protocolPrefix + kad1}
|
||||
@ -228,7 +224,6 @@ func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
|
||||
strmap: make(map[peer.ID]*messageSender),
|
||||
birth: time.Now(),
|
||||
rng: rand.New(rand.NewSource(rand.Int63())),
|
||||
routingTable: rt,
|
||||
protocols: protocols,
|
||||
serverProtocols: serverProtocols,
|
||||
bucketSize: cfg.bucketSize,
|
||||
@ -238,6 +233,13 @@ func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
|
||||
triggerSelfLookup: make(chan chan<- error),
|
||||
}
|
||||
|
||||
// construct routing table
|
||||
rt, err := makeRoutingTable(dht, cfg)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to construct routing table,err=%s", err)
|
||||
}
|
||||
dht.routingTable = rt
|
||||
|
||||
// create a DHT proc with the given context
|
||||
dht.proc = goprocessctx.WithContext(ctx)
|
||||
|
||||
@ -251,15 +253,23 @@ func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
|
||||
return dht, nil
|
||||
}
|
||||
|
||||
func makeRoutingTable(h host.Host, cfg config) (*kb.RoutingTable, error) {
|
||||
self := kb.ConvertPeerID(h.ID())
|
||||
func makeRoutingTable(dht *IpfsDHT, cfg config) (*kb.RoutingTable, error) {
|
||||
self := kb.ConvertPeerID(dht.host.ID())
|
||||
// construct the routing table with a peer validation function
|
||||
pvF := func(c context.Context, p peer.ID) bool {
|
||||
if err := h.Connect(c, peer.AddrInfo{ID: p}); err != nil {
|
||||
// connect should work
|
||||
if err := dht.host.Connect(c, peer.AddrInfo{ID: p}); err != nil {
|
||||
rtPvLogger.Infof("failed to connect to peer %s for validation, err=%s", p, err)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
// peer should support the DHT protocol
|
||||
b, err := dht.validRTPeer(p)
|
||||
if err != nil {
|
||||
rtPvLogger.Errorf("failed to check if peer %s supports DHT protocol, err=%s", p, err)
|
||||
}
|
||||
|
||||
return b
|
||||
}
|
||||
|
||||
rtOpts := []kb.Option{kb.PeerValidationFnc(pvF)}
|
||||
@ -267,9 +277,9 @@ func makeRoutingTable(h host.Host, cfg config) (*kb.RoutingTable, error) {
|
||||
rtOpts = append(rtOpts, kb.TableCleanupInterval(cfg.routingTable.checkInterval))
|
||||
}
|
||||
|
||||
rt, err := kb.NewRoutingTable(cfg.bucketSize, self, time.Minute, h.Peerstore(),
|
||||
rt, err := kb.NewRoutingTable(cfg.bucketSize, self, time.Minute, dht.host.Peerstore(),
|
||||
rtOpts...)
|
||||
cmgr := h.ConnManager()
|
||||
cmgr := dht.host.ConnManager()
|
||||
|
||||
rt.PeerAdded = func(p peer.ID) {
|
||||
commonPrefixLen := kb.CommonPrefixLen(self, kb.ConvertPeerID(p))
|
||||
|
2
go.mod
2
go.mod
@ -14,7 +14,7 @@ require (
|
||||
github.com/libp2p/go-eventbus v0.1.0
|
||||
github.com/libp2p/go-libp2p v0.5.3-0.20200221174525-7ba322244e0a
|
||||
github.com/libp2p/go-libp2p-core v0.3.2-0.20200305051524-d143201d83c2
|
||||
github.com/libp2p/go-libp2p-kbucket v0.3.1
|
||||
github.com/libp2p/go-libp2p-kbucket v0.3.2-0.20200319122627-7fa6dacb57ec
|
||||
github.com/libp2p/go-libp2p-peerstore v0.1.4
|
||||
github.com/libp2p/go-libp2p-record v0.1.2
|
||||
github.com/libp2p/go-libp2p-swarm v0.2.2
|
||||
|
2
go.sum
2
go.sum
@ -197,6 +197,8 @@ github.com/libp2p/go-libp2p-kbucket v0.2.3 h1:XtNfN4WUy0cfeJoJgWCf1lor4Pp3kBkFJ9
|
||||
github.com/libp2p/go-libp2p-kbucket v0.2.3/go.mod h1:opWrBZSWnBYPc315q497huxY3sz1t488X6OiXUEYWKA=
|
||||
github.com/libp2p/go-libp2p-kbucket v0.3.1 h1:aHSdqYBAyExg2xir/VN7B2myIN6yxUuDG0FeyrZpBQE=
|
||||
github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
|
||||
github.com/libp2p/go-libp2p-kbucket v0.3.2-0.20200319122627-7fa6dacb57ec h1:TzGGI4zuTxJxobJyAxwfjm05aFJW6kanlni5snT7k6Q=
|
||||
github.com/libp2p/go-libp2p-kbucket v0.3.2-0.20200319122627-7fa6dacb57ec/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
|
||||
github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8=
|
||||
github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90=
|
||||
github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo=
|
||||
|
Loading…
x
Reference in New Issue
Block a user