Files
brianmcgee 78c300dbc6
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
cluster: refactor and clean up of handlers
2026-02-20 09:58:16 +00:00

80 lines
1.9 KiB
Go

package cluster
import (
"log/slog"
dmnet "git.clan.lol/clan/data-mesher/pkg/net"
"github.com/libp2p/go-libp2p/core/control"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/multiformats/go-multiaddr"
)
type ConnectionGater struct {
interfaces []string
resolver dmnet.InterfaceResolver
}
func NewConnectionGater(interfaces []string, resolver dmnet.InterfaceResolver) *ConnectionGater {
if resolver == nil {
resolver = dmnet.DefaultResolver{}
}
return &ConnectionGater{
interfaces: interfaces,
resolver: resolver,
}
}
func (c *ConnectionGater) InterceptPeerDial(peer.ID) bool {
return true
}
func (c *ConnectionGater) InterceptAddrDial(id peer.ID, multiaddr multiaddr.Multiaddr) bool {
ok, err := c.resolver.IsReachable(multiaddr, c.interfaces)
if err != nil {
slog.Error(
"failed to check if multiaddr is reachable",
slog.String("peer", id.String()),
slog.String("addr", multiaddr.String()),
slog.Any("err", err),
)
}
slog.Debug(
"addr dial interception result",
slog.String("addr", multiaddr.String()),
slog.Bool("allowed", ok),
)
return ok
}
func (c *ConnectionGater) InterceptAccept(multiaddrs network.ConnMultiaddrs) bool {
// enforce this connection is being accepted over one of the provided interfaces
ok, err := c.resolver.IsReachable(multiaddrs.RemoteMultiaddr(), c.interfaces)
if err != nil {
slog.Error(
"failed to check if remote multiaddr is reachable",
slog.String("addr", multiaddrs.RemoteMultiaddr().String()),
slog.Any("err", err),
)
}
slog.Debug(
"accept interception result",
slog.String("addr", multiaddrs.RemoteMultiaddr().String()),
slog.Bool("allowed", ok),
)
return ok
}
func (c *ConnectionGater) InterceptSecured(_ network.Direction, _ peer.ID, _ network.ConnMultiaddrs) bool {
return true
}
func (c *ConnectionGater) InterceptUpgraded(_ network.Conn) (bool, control.DisconnectReason) {
return true, 0
}