mirror of
https://github.com/status-im/go-waku.git
synced 2025-02-26 12:07:34 +00:00
fix: watchMultiaddressChanges (#1093)
This commit is contained in:
parent
ea3f9d8d9d
commit
46e48044da
@ -316,13 +316,13 @@ func (w *WakuNode) watchMultiaddressChanges(ctx context.Context) {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-first:
|
||||
addr := maps.Keys(addrsSet)
|
||||
addr := maps.Values(addrsSet)
|
||||
w.log.Info("listening", logging.MultiAddrs("multiaddr", addr...))
|
||||
case <-w.addressChangesSub.Out():
|
||||
newAddrs := utils.MultiAddrSet(w.ListenAddresses()...)
|
||||
if !maps.Equal(addrsSet, newAddrs) {
|
||||
if !utils.MultiAddrSetEquals(addrsSet, newAddrs) {
|
||||
addrsSet = newAddrs
|
||||
addrs := maps.Keys(addrsSet)
|
||||
addrs := maps.Values(addrsSet)
|
||||
w.log.Info("listening addresses update received", logging.MultiAddrs("multiaddr", addrs...))
|
||||
err := w.setupENR(ctx, addrs)
|
||||
if err != nil {
|
||||
|
@ -17,10 +17,23 @@ func EncapsulatePeerID(peerID peer.ID, addrs ...multiaddr.Multiaddr) []multiaddr
|
||||
return result
|
||||
}
|
||||
|
||||
func MultiAddrSet(addr ...multiaddr.Multiaddr) map[multiaddr.Multiaddr]struct{} {
|
||||
r := make(map[multiaddr.Multiaddr]struct{})
|
||||
func MultiAddrSetEquals(m1 map[string]multiaddr.Multiaddr, m2 map[string]multiaddr.Multiaddr) bool {
|
||||
if len(m1) != len(m2) {
|
||||
return false
|
||||
}
|
||||
for k1, v1 := range m1 {
|
||||
v2, ok := m2[k1]
|
||||
if !ok || !v1.Equal(v2) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func MultiAddrSet(addr ...multiaddr.Multiaddr) map[string]multiaddr.Multiaddr {
|
||||
r := make(map[string]multiaddr.Multiaddr)
|
||||
for _, a := range addr {
|
||||
r[a] = struct{}{}
|
||||
r[a.String()] = a
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
42
waku/v2/utils/multiaddr_test.go
Normal file
42
waku/v2/utils/multiaddr_test.go
Normal file
@ -0,0 +1,42 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"github.com/multiformats/go-multiaddr"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/exp/maps"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMultiaddrAsKeyMap(t *testing.T) {
|
||||
addr := "/ip4/127.0.0.1/tcp/63634/p2p/16Uiu2HAmJSLz9nyDMmjRpZzHAxMFiEUeszWgPReekzAroCgkTgbD"
|
||||
m1 := make(map[multiaddr.Multiaddr]struct{})
|
||||
mm1, err := multiaddr.NewMultiaddr(addr)
|
||||
require.NoError(t, err)
|
||||
m1[mm1] = struct{}{}
|
||||
_, ok := m1[mm1]
|
||||
require.True(t, ok)
|
||||
mm2, err := multiaddr.NewMultiaddr(addr)
|
||||
require.NoError(t, err)
|
||||
_, ok = m1[mm2]
|
||||
require.False(t, ok)
|
||||
|
||||
m2 := make(map[multiaddr.Multiaddr]struct{})
|
||||
m2[mm2] = struct{}{}
|
||||
require.False(t, maps.Equal(m1, m2))
|
||||
}
|
||||
|
||||
func TestMultiAddrSetEquals(t *testing.T) {
|
||||
addr := "/ip4/127.0.0.1/tcp/63634/p2p/16Uiu2HAmJSLz9nyDMmjRpZzHAxMFiEUeszWgPReekzAroCgkTgbD"
|
||||
ma1, err := multiaddr.NewMultiaddr(addr)
|
||||
require.NoError(t, err)
|
||||
ma2, err := multiaddr.NewMultiaddr(addr)
|
||||
require.NoError(t, err)
|
||||
|
||||
m1 := map[string]multiaddr.Multiaddr{
|
||||
addr: ma1,
|
||||
}
|
||||
m2 := map[string]multiaddr.Multiaddr{
|
||||
addr: ma2,
|
||||
}
|
||||
require.True(t, MultiAddrSetEquals(m1, m2))
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user