mirror of
https://github.com/status-im/go-waku.git
synced 2025-02-26 20:10:44 +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():
|
case <-ctx.Done():
|
||||||
return
|
return
|
||||||
case <-first:
|
case <-first:
|
||||||
addr := maps.Keys(addrsSet)
|
addr := maps.Values(addrsSet)
|
||||||
w.log.Info("listening", logging.MultiAddrs("multiaddr", addr...))
|
w.log.Info("listening", logging.MultiAddrs("multiaddr", addr...))
|
||||||
case <-w.addressChangesSub.Out():
|
case <-w.addressChangesSub.Out():
|
||||||
newAddrs := utils.MultiAddrSet(w.ListenAddresses()...)
|
newAddrs := utils.MultiAddrSet(w.ListenAddresses()...)
|
||||||
if !maps.Equal(addrsSet, newAddrs) {
|
if !utils.MultiAddrSetEquals(addrsSet, newAddrs) {
|
||||||
addrsSet = newAddrs
|
addrsSet = newAddrs
|
||||||
addrs := maps.Keys(addrsSet)
|
addrs := maps.Values(addrsSet)
|
||||||
w.log.Info("listening addresses update received", logging.MultiAddrs("multiaddr", addrs...))
|
w.log.Info("listening addresses update received", logging.MultiAddrs("multiaddr", addrs...))
|
||||||
err := w.setupENR(ctx, addrs)
|
err := w.setupENR(ctx, addrs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -17,10 +17,23 @@ func EncapsulatePeerID(peerID peer.ID, addrs ...multiaddr.Multiaddr) []multiaddr
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func MultiAddrSet(addr ...multiaddr.Multiaddr) map[multiaddr.Multiaddr]struct{} {
|
func MultiAddrSetEquals(m1 map[string]multiaddr.Multiaddr, m2 map[string]multiaddr.Multiaddr) bool {
|
||||||
r := make(map[multiaddr.Multiaddr]struct{})
|
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 {
|
for _, a := range addr {
|
||||||
r[a] = struct{}{}
|
r[a.String()] = a
|
||||||
}
|
}
|
||||||
return r
|
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