@cryptotaxi247 / kubo / commits / b2b8f3866

use a ConnectionManager for filtering addresses

Marten Seemann committed Jul 24, 2021 at 12:57 UTC b2b8f3866b388fd4bdf930de820906741cc5803a
2 files changed +39 -3
core/node/libp2p/addrs.go
+3 -3
@@ -4,7 +4,7 @@ import (
4 "fmt"
5
6 "github.com/libp2p/go-libp2p"
7 - host "github.com/libp2p/go-libp2p-core/host"
7 + "github.com/libp2p/go-libp2p-core/host"
8 p2pbhost "github.com/libp2p/go-libp2p/p2p/host/basic"
9 ma "github.com/multiformats/go-multiaddr"
10 mamask "github.com/whyrusleeping/multiaddr-filter"
@@ -13,13 +13,13 @@ import (
13 func AddrFilters(filters []string) func() (*ma.Filters, Libp2pOpts, error) {
14 return func() (filter *ma.Filters, opts Libp2pOpts, err error) {
15 filter = ma.NewFilters()
16 - opts.Opts = append(opts.Opts, libp2p.Filters(filter)) //nolint
16 + opts.Opts = append(opts.Opts, libp2p.ConnectionGater((*filtersConnectionGater)(filter)))
17 for _, s := range filters {
18 f, err := mamask.NewMask(s)
19 if err != nil {
20 return filter, opts, fmt.Errorf("incorrectly formatted address filter in config: %s", s)
21 }
22 - opts.Opts = append(opts.Opts, libp2p.FilterAddresses(f)) //nolint
22 + filter.AddFilter(*f, ma.ActionDeny)
23 }
24 return filter, opts, nil
25 }
core/node/libp2p/filters.go new
+36
@@ -0,0 +1,36 @@
1 +package libp2p
2 +
3 +import (
4 + "github.com/libp2p/go-libp2p-core/connmgr"
5 + "github.com/libp2p/go-libp2p-core/control"
6 + "github.com/libp2p/go-libp2p-core/network"
7 + "github.com/libp2p/go-libp2p-core/peer"
8 +
9 + ma "github.com/multiformats/go-multiaddr"
10 +)
11 +
12 +// filtersConnectionGater is an adapter that turns multiaddr.Filter into a
13 +// connmgr.ConnectionGater.
14 +type filtersConnectionGater ma.Filters
15 +
16 +var _ connmgr.ConnectionGater = (*filtersConnectionGater)(nil)
17 +
18 +func (f *filtersConnectionGater) InterceptAddrDial(_ peer.ID, addr ma.Multiaddr) (allow bool) {
19 + return !(*ma.Filters)(f).AddrBlocked(addr)
20 +}
21 +
22 +func (f *filtersConnectionGater) InterceptPeerDial(p peer.ID) (allow bool) {
23 + return true
24 +}
25 +
26 +func (f *filtersConnectionGater) InterceptAccept(connAddr network.ConnMultiaddrs) (allow bool) {
27 + return !(*ma.Filters)(f).AddrBlocked(connAddr.RemoteMultiaddr())
28 +}
29 +
30 +func (f *filtersConnectionGater) InterceptSecured(_ network.Direction, _ peer.ID, connAddr network.ConnMultiaddrs) (allow bool) {
31 + return !(*ma.Filters)(f).AddrBlocked(connAddr.RemoteMultiaddr())
32 +}
33 +
34 +func (f *filtersConnectionGater) InterceptUpgraded(_ network.Conn) (allow bool, reason control.DisconnectReason) {
35 + return true, 0
36 +}