mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-05-02 14:02:14 +00:00
chore: auto relay multiaddr update push
This commit is contained in:
parent
caf66ea143
commit
4d1fcdb3d2
@ -143,8 +143,8 @@ class AutoRelay {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
await this._transportManager.listen([multiaddr(listenAddr)])
|
await this._transportManager.listen([multiaddr(listenAddr)])
|
||||||
// TODO: push announce multiaddrs update
|
// Announce multiaddrs update on listen success
|
||||||
// await this._libp2p.identifyService.pushToPeerStore()
|
await this._libp2p.identifyService.pushToPeerStore()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error(err)
|
log.error(err)
|
||||||
this._listenRelays.delete(id)
|
this._listenRelays.delete(id)
|
||||||
|
@ -20,8 +20,8 @@ module.exports = (libp2p) => {
|
|||||||
const deleted = listeningAddrs.delete(connection.remotePeer.toB58String())
|
const deleted = listeningAddrs.delete(connection.remotePeer.toB58String())
|
||||||
|
|
||||||
if (deleted) {
|
if (deleted) {
|
||||||
// TODO push announce multiaddrs update
|
// Announce multiaddrs update on listen success
|
||||||
// libp2p.identifyService.pushToPeerStore()
|
libp2p.identifyService.pushToPeerStore()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -329,13 +329,30 @@ class IdentifyService {
|
|||||||
* @returns {Uint8Array}
|
* @returns {Uint8Array}
|
||||||
*/
|
*/
|
||||||
async _getSelfPeerRecord () {
|
async _getSelfPeerRecord () {
|
||||||
const selfSignedPeerRecord = this.peerStore.addressBook.getRawEnvelope(this.peerId)
|
// Update self peer record if needed
|
||||||
|
await this._createOrUpdateSelfPeerRecord()
|
||||||
|
|
||||||
// TODO: support invalidation when dynamic multiaddrs are supported
|
return this.peerStore.addressBook.getRawEnvelope(this.peerId)
|
||||||
if (selfSignedPeerRecord) {
|
}
|
||||||
return selfSignedPeerRecord
|
|
||||||
|
/**
|
||||||
|
* Creates or updates the self peer record if it exists and is outdated.
|
||||||
|
* @return {Promise<void>}
|
||||||
|
*/
|
||||||
|
async _createOrUpdateSelfPeerRecord () {
|
||||||
|
const selfPeerRecordEnvelope = await this.peerStore.addressBook.getPeerRecord(this.peerId)
|
||||||
|
|
||||||
|
if (selfPeerRecordEnvelope) {
|
||||||
|
const peerRecord = PeerRecord.createFromProtobuf(selfPeerRecordEnvelope.payload)
|
||||||
|
|
||||||
|
const mIntersection = peerRecord.multiaddrs.filter((m) => this._libp2p.multiaddrs.some((newM) => m.equals(newM)))
|
||||||
|
if (mIntersection.length === this._libp2p.multiaddrs.length) {
|
||||||
|
// Same multiaddrs as already existing in the record, no need to proceed
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create / Update Peer record
|
||||||
try {
|
try {
|
||||||
const peerRecord = new PeerRecord({
|
const peerRecord = new PeerRecord({
|
||||||
peerId: this.peerId,
|
peerId: this.peerId,
|
||||||
@ -343,12 +360,9 @@ class IdentifyService {
|
|||||||
})
|
})
|
||||||
const envelope = await Envelope.seal(peerRecord, this.peerId)
|
const envelope = await Envelope.seal(peerRecord, this.peerId)
|
||||||
this.peerStore.addressBook.consumePeerRecord(envelope)
|
this.peerStore.addressBook.consumePeerRecord(envelope)
|
||||||
|
|
||||||
return this.peerStore.addressBook.getRawEnvelope(this.peerId)
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error('failed to get self peer record')
|
log.error('failed to create self peer record')
|
||||||
}
|
}
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,6 +259,7 @@ class Libp2p extends EventEmitter {
|
|||||||
await this.peerStore.stop()
|
await this.peerStore.stop()
|
||||||
await this.connectionManager.stop()
|
await this.connectionManager.stop()
|
||||||
|
|
||||||
|
ping.unmount(this)
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
this.pubsub && this.pubsub.stop(),
|
this.pubsub && this.pubsub.stop(),
|
||||||
this._dht && this._dht.stop(),
|
this._dht && this._dht.stop(),
|
||||||
@ -267,7 +268,6 @@ class Libp2p extends EventEmitter {
|
|||||||
|
|
||||||
await this.transportManager.close()
|
await this.transportManager.close()
|
||||||
|
|
||||||
ping.unmount(this)
|
|
||||||
this.dialer.destroy()
|
this.dialer.destroy()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -259,6 +259,9 @@ describe('auto-relay', () => {
|
|||||||
it('should not listen on a relayed address if peer disconnects', async () => {
|
it('should not listen on a relayed address if peer disconnects', async () => {
|
||||||
const originalMultiaddrs1Length = relayLibp2p1.multiaddrs.length
|
const originalMultiaddrs1Length = relayLibp2p1.multiaddrs.length
|
||||||
|
|
||||||
|
// Spy if identify push is fired on adding/removing listen addr
|
||||||
|
sinon.spy(relayLibp2p1.identifyService, 'pushToPeerStore')
|
||||||
|
|
||||||
// Discover one relay and connect
|
// Discover one relay and connect
|
||||||
relayLibp2p1.peerStore.addressBook.add(relayLibp2p2.peerId, relayLibp2p2.multiaddrs)
|
relayLibp2p1.peerStore.addressBook.add(relayLibp2p2.peerId, relayLibp2p2.multiaddrs)
|
||||||
await relayLibp2p1.dial(relayLibp2p2.peerId)
|
await relayLibp2p1.dial(relayLibp2p2.peerId)
|
||||||
@ -268,8 +271,8 @@ describe('auto-relay', () => {
|
|||||||
expect(autoRelay1._listenRelays.size).to.equal(1)
|
expect(autoRelay1._listenRelays.size).to.equal(1)
|
||||||
expect(relayLibp2p1.multiaddrs[originalMultiaddrs1Length].getPeerId()).to.eql(relayLibp2p2.peerId.toB58String())
|
expect(relayLibp2p1.multiaddrs[originalMultiaddrs1Length].getPeerId()).to.eql(relayLibp2p2.peerId.toB58String())
|
||||||
|
|
||||||
// Spy if identify push is fired
|
// Identify push for adding listen relay multiaddr
|
||||||
sinon.spy(relayLibp2p1.identifyService, 'pushToPeerStore')
|
expect(relayLibp2p1.identifyService.pushToPeerStore.callCount).to.equal(1)
|
||||||
|
|
||||||
// Disconnect from peer used for relay
|
// Disconnect from peer used for relay
|
||||||
await relayLibp2p1.hangUp(relayLibp2p2.peerId)
|
await relayLibp2p1.hangUp(relayLibp2p2.peerId)
|
||||||
@ -277,7 +280,9 @@ describe('auto-relay', () => {
|
|||||||
// Wait for removed listening on the relay
|
// Wait for removed listening on the relay
|
||||||
await pWaitFor(() => relayLibp2p1.multiaddrs.length === originalMultiaddrs1Length)
|
await pWaitFor(() => relayLibp2p1.multiaddrs.length === originalMultiaddrs1Length)
|
||||||
expect(autoRelay1._listenRelays.size).to.equal(0)
|
expect(autoRelay1._listenRelays.size).to.equal(0)
|
||||||
// TODO: identify-push expect(relayLibp2p1.identifyService.pushToPeerStore.callCount).to.equal(1)
|
|
||||||
|
// Identify push for removing listen relay multiaddr
|
||||||
|
expect(relayLibp2p1.identifyService.pushToPeerStore.callCount).to.equal(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should try to listen on other connected peers relayed address if one used relay disconnects', async () => {
|
it('should try to listen on other connected peers relayed address if one used relay disconnects', async () => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user