Skip to content

Commit

Permalink
Fix PeerStore missing remote endpoints of established connection. (#1226
Browse files Browse the repository at this point in the history
)
  • Loading branch information
cheatfate authored Nov 27, 2024
1 parent f591e69 commit b7e0df1
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
13 changes: 10 additions & 3 deletions libp2p/peerstore.nim
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ type
KeyBook* {.public.} = ref object of PeerBook[PublicKey]

AgentBook* {.public.} = ref object of PeerBook[string]
LastSeenBook* {.public.} = ref object of PeerBook[Opt[MultiAddress]]
ProtoVersionBook* {.public.} = ref object of PeerBook[string]
SPRBook* {.public.} = ref object of PeerBook[Envelope]

Expand Down Expand Up @@ -145,10 +146,16 @@ proc del*(peerStore: PeerStore, peerId: PeerId) {.public.} =
for _, book in peerStore.books:
book.deletor(peerId)

proc updatePeerInfo*(peerStore: PeerStore, info: IdentifyInfo) =
if info.addrs.len > 0:
proc updatePeerInfo*(
peerStore: PeerStore,
info: IdentifyInfo,
observedAddr: Opt[MultiAddress] = Opt.none(MultiAddress),
) =
if len(info.addrs) > 0:
peerStore[AddressBook][info.peerId] = info.addrs

peerStore[LastSeenBook][info.peerId] = observedAddr

info.pubkey.withValue(pubkey):
peerStore[KeyBook][info.peerId] = pubkey

Expand Down Expand Up @@ -200,7 +207,7 @@ proc identify*(peerStore: PeerStore, muxer: Muxer) {.async.} =
knownAgent = shortAgent
muxer.connection.setShortAgent(knownAgent)

peerStore.updatePeerInfo(info)
peerStore.updatePeerInfo(info, stream.observedAddr)
finally:
await stream.closeWithEOF()

Expand Down
2 changes: 2 additions & 0 deletions tests/testswitch.nim
Original file line number Diff line number Diff line change
Expand Up @@ -842,6 +842,8 @@ suite "Switch":
switch1.peerStore[AddressBook][switch2.peerInfo.peerId] == switch2.peerInfo.addrs
switch1.peerStore[ProtoBook][switch2.peerInfo.peerId] == switch2.peerInfo.protocols

switch1.peerStore[LastSeenBook][switch2.peerInfo.peerId].isSome()

switch1.peerInfo.peerId notin switch2.peerStore[AddressBook]
switch1.peerInfo.peerId notin switch2.peerStore[ProtoBook]

Expand Down

0 comments on commit b7e0df1

Please sign in to comment.