fix(relay): external addr not expiring when relayed listen addr expire #5577
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
We encountered a bug when our app is connected and listening through a relay and that it decided to stop listening through the relay but still let the connection with the relay open (some other streams are opened with this peer), then the previously confirmed
ExternalAddress
does not expire.The PR solves this problem and simplify a little bit the way to emit
ExternalAddrConfirmed
andExternalAddrExpired
by only watchingNewListenAddr
andExpiredListenAddr
events if they are notifying about a relayed listen address.Also, when renewing reservation,
NewListenAddr
should not be emitted again if the samelisten_addr
is given, but it should emit aListenAddrExpired
event if a previously reserved one was not reserved again.Notes & open questions
I have also included a correlated change by removing the
/p2p/<local_peer_id>
of the relayed listen addresses and external addresses (corresponding to a listen addresses). Indeed, every other transport does not include it so I think it is better that therelay
transport acts the same. If necessary, I can do a separated PR.Change checklist