Skip to content

Commit d02c86c

Browse files
committed
force convert underlays to ws
1 parent 24bb137 commit d02c86c

2 files changed

Lines changed: 35 additions & 14 deletions

File tree

dist/style.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
body {
2-
background-color: orange;
2+
background-color: rgb(71, 55, 24);
33
}

pkg/hive/hive_js.go

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -175,20 +175,41 @@ func (s *Service) checkAndAddPeers(ctx context.Context, peers pb.Peers) {
175175
wg := sync.WaitGroup{}
176176

177177
addPeer := func(newPeer *pb.BzzAddress, multiUnderlay ma.Multiaddr) {
178-
wsProto := false
179-
ma.ForEach(multiUnderlay, func(c ma.Component) bool {
180-
if c.Protocol().Name == "ws" {
181-
wsProto = true
182-
return false
178+
parts := ma.Split(multiUnderlay)
179+
180+
var baseParts []ma.Component
181+
var p2pID string
182+
183+
for _, c := range parts {
184+
switch c.Protocol().Name {
185+
case "ws", "wss":
186+
continue // skip if already present
187+
case "p2p":
188+
p2pID = c.Value()
189+
default:
190+
baseParts = append(baseParts, c)
183191
}
184-
return true
185-
})
192+
}
186193

187-
if !wsProto {
188-
s.logger.Debug("skipping non-websocket peer", "peer_address", hex.EncodeToString(newPeer.Overlay), "underlay", multiUnderlay)
189-
return
194+
baseAddr, _ := ma.NewMultiaddr("")
195+
for _, c := range baseParts {
196+
componentStr := "/" + c.Protocol().Name + "/" + c.Value()
197+
component, err := ma.NewMultiaddr(componentStr)
198+
if err != nil {
199+
s.logger.Error(errors.New("invalid multiaddr component"), "component", componentStr, "error", err)
200+
return
201+
}
202+
baseAddr = baseAddr.Encapsulate(component)
203+
}
204+
205+
// Add /ws and /p2p
206+
baseAddr = baseAddr.Encapsulate(ma.StringCast("/ws"))
207+
if p2pID != "" {
208+
baseAddr = baseAddr.Encapsulate(ma.StringCast("/p2p/" + p2pID))
190209
}
191210

211+
s.logger.Debug("rewritten multiaddr to use websocket", "peer_address", hex.EncodeToString(newPeer.Overlay), "ws_underlay", baseAddr.String())
212+
192213
err := s.sem.Acquire(ctx, 1)
193214
if err != nil {
194215
return
@@ -206,15 +227,15 @@ func (s *Service) checkAndAddPeers(ctx context.Context, peers pb.Peers) {
206227
defer cancel()
207228

208229
// check if the underlay is usable by doing a raw ping using libp2p
209-
if _, err := s.streamer.Ping(ctx, multiUnderlay); err != nil {
230+
if _, err := s.streamer.Ping(ctx, baseAddr); err != nil {
210231

211-
s.logger.Debug("unreachable peer underlay", "peer_address", hex.EncodeToString(newPeer.Overlay), "underlay", multiUnderlay)
232+
s.logger.Debug("unreachable peer underlay", "peer_address", hex.EncodeToString(newPeer.Overlay), "underlay", multiUnderlay, "error", err)
212233
return
213234
}
214235

215236
bzzAddress := bzz.Address{
216237
Overlay: swarm.NewAddress(newPeer.Overlay),
217-
Underlay: multiUnderlay,
238+
Underlay: baseAddr,
218239
Signature: newPeer.Signature,
219240
Nonce: newPeer.Nonce,
220241
}

0 commit comments

Comments
 (0)