mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-09 18:28:08 +08:00
use a ConnectionManager for filtering addresses
This commit is contained in:
parent
7db27bf83a
commit
b2b8f3866b
@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/libp2p/go-libp2p"
|
||||
host "github.com/libp2p/go-libp2p-core/host"
|
||||
"github.com/libp2p/go-libp2p-core/host"
|
||||
p2pbhost "github.com/libp2p/go-libp2p/p2p/host/basic"
|
||||
ma "github.com/multiformats/go-multiaddr"
|
||||
mamask "github.com/whyrusleeping/multiaddr-filter"
|
||||
@ -13,13 +13,13 @@ import (
|
||||
func AddrFilters(filters []string) func() (*ma.Filters, Libp2pOpts, error) {
|
||||
return func() (filter *ma.Filters, opts Libp2pOpts, err error) {
|
||||
filter = ma.NewFilters()
|
||||
opts.Opts = append(opts.Opts, libp2p.Filters(filter)) //nolint
|
||||
opts.Opts = append(opts.Opts, libp2p.ConnectionGater((*filtersConnectionGater)(filter)))
|
||||
for _, s := range filters {
|
||||
f, err := mamask.NewMask(s)
|
||||
if err != nil {
|
||||
return filter, opts, fmt.Errorf("incorrectly formatted address filter in config: %s", s)
|
||||
}
|
||||
opts.Opts = append(opts.Opts, libp2p.FilterAddresses(f)) //nolint
|
||||
filter.AddFilter(*f, ma.ActionDeny)
|
||||
}
|
||||
return filter, opts, nil
|
||||
}
|
||||
|
||||
36
core/node/libp2p/filters.go
Normal file
36
core/node/libp2p/filters.go
Normal file
@ -0,0 +1,36 @@
|
||||
package libp2p
|
||||
|
||||
import (
|
||||
"github.com/libp2p/go-libp2p-core/connmgr"
|
||||
"github.com/libp2p/go-libp2p-core/control"
|
||||
"github.com/libp2p/go-libp2p-core/network"
|
||||
"github.com/libp2p/go-libp2p-core/peer"
|
||||
|
||||
ma "github.com/multiformats/go-multiaddr"
|
||||
)
|
||||
|
||||
// filtersConnectionGater is an adapter that turns multiaddr.Filter into a
|
||||
// connmgr.ConnectionGater.
|
||||
type filtersConnectionGater ma.Filters
|
||||
|
||||
var _ connmgr.ConnectionGater = (*filtersConnectionGater)(nil)
|
||||
|
||||
func (f *filtersConnectionGater) InterceptAddrDial(_ peer.ID, addr ma.Multiaddr) (allow bool) {
|
||||
return !(*ma.Filters)(f).AddrBlocked(addr)
|
||||
}
|
||||
|
||||
func (f *filtersConnectionGater) InterceptPeerDial(p peer.ID) (allow bool) {
|
||||
return true
|
||||
}
|
||||
|
||||
func (f *filtersConnectionGater) InterceptAccept(connAddr network.ConnMultiaddrs) (allow bool) {
|
||||
return !(*ma.Filters)(f).AddrBlocked(connAddr.RemoteMultiaddr())
|
||||
}
|
||||
|
||||
func (f *filtersConnectionGater) InterceptSecured(_ network.Direction, _ peer.ID, connAddr network.ConnMultiaddrs) (allow bool) {
|
||||
return !(*ma.Filters)(f).AddrBlocked(connAddr.RemoteMultiaddr())
|
||||
}
|
||||
|
||||
func (f *filtersConnectionGater) InterceptUpgraded(_ network.Conn) (allow bool, reason control.DisconnectReason) {
|
||||
return true, 0
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user