mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-06-15 18:21:22 +00:00
fix: do upnp hole punch after startup (#1217)
The transport manager configures it's addresses during the `start` phase so access them during `afterStart` so they'll be ready for use.
This commit is contained in:
@ -92,7 +92,7 @@
|
|||||||
"test:interop": "aegir test -t node -f dist/test/interop.js"
|
"test:interop": "aegir test -t node -f dist/test/interop.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@achingbrain/nat-port-mapper": "^1.0.0",
|
"@achingbrain/nat-port-mapper": "^1.0.3",
|
||||||
"@libp2p/connection": "^1.1.5",
|
"@libp2p/connection": "^1.1.5",
|
||||||
"@libp2p/crypto": "^0.22.11",
|
"@libp2p/crypto": "^0.22.11",
|
||||||
"@libp2p/interfaces": "^1.3.31",
|
"@libp2p/interfaces": "^1.3.31",
|
||||||
|
@ -94,10 +94,14 @@ export class NatManager implements Startable {
|
|||||||
return this.started
|
return this.started
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start () {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the NAT manager
|
* Attempt to use uPnP to configure port mapping using the current gateway.
|
||||||
|
*
|
||||||
|
* Run after start to ensure the transport manager has all addresses configured.
|
||||||
*/
|
*/
|
||||||
start () {
|
afterStart () {
|
||||||
if (isBrowser || !this.enabled || this.started) {
|
if (isBrowser || !this.enabled || this.started) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -105,7 +109,7 @@ export class NatManager implements Startable {
|
|||||||
this.started = true
|
this.started = true
|
||||||
|
|
||||||
// done async to not slow down startup
|
// done async to not slow down startup
|
||||||
this._start().catch((err) => {
|
void this._start().catch((err) => {
|
||||||
// hole punching errors are non-fatal
|
// hole punching errors are non-fatal
|
||||||
log.error(err)
|
log.error(err)
|
||||||
})
|
})
|
||||||
|
@ -13,6 +13,7 @@ import { createFromJSON } from '@libp2p/peer-id-factory'
|
|||||||
import { Components } from '@libp2p/interfaces/components'
|
import { Components } from '@libp2p/interfaces/components'
|
||||||
import type { NatAPI } from '@achingbrain/nat-port-mapper'
|
import type { NatAPI } from '@achingbrain/nat-port-mapper'
|
||||||
import { StubbedInstance, stubInterface } from 'ts-sinon'
|
import { StubbedInstance, stubInterface } from 'ts-sinon'
|
||||||
|
import { start, stop } from '@libp2p/interfaces/startable'
|
||||||
|
|
||||||
const DEFAULT_ADDRESSES = [
|
const DEFAULT_ADDRESSES = [
|
||||||
'/ip4/127.0.0.1/tcp/0',
|
'/ip4/127.0.0.1/tcp/0',
|
||||||
@ -49,7 +50,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
await components.getTransportManager().listen(components.getAddressManager().getListenAddrs())
|
await components.getTransportManager().listen(components.getAddressManager().getListenAddrs())
|
||||||
|
|
||||||
teardown.push(async () => {
|
teardown.push(async () => {
|
||||||
await natManager.stop()
|
await stop(natManager)
|
||||||
await components.getTransportManager().removeAll()
|
await components.getTransportManager().removeAll()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -78,7 +79,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
|
||||||
await natManager._start()
|
await start(natManager)
|
||||||
|
|
||||||
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.not.be.empty()
|
expect(observed).to.not.be.empty()
|
||||||
@ -127,7 +128,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
enabled: false
|
enabled: false
|
||||||
})
|
})
|
||||||
|
|
||||||
natManager.start()
|
await start(natManager)
|
||||||
|
|
||||||
await delay(100)
|
await delay(100)
|
||||||
|
|
||||||
@ -146,7 +147,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
|
||||||
await natManager._start()
|
await start(natManager)
|
||||||
|
|
||||||
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
@ -163,7 +164,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
|
||||||
await natManager._start()
|
await start(natManager)
|
||||||
|
|
||||||
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
@ -180,7 +181,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
|
||||||
await natManager._start()
|
await start(natManager)
|
||||||
|
|
||||||
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
@ -197,7 +198,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
|
||||||
await natManager._start()
|
await start(natManager)
|
||||||
|
|
||||||
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
@ -214,7 +215,7 @@ describe('Nat Manager (TCP)', () => {
|
|||||||
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
let observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
|
||||||
await natManager._start()
|
await start(natManager)
|
||||||
|
|
||||||
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
observed = components.getAddressManager().getObservedAddrs().map(ma => ma.toString())
|
||||||
expect(observed).to.be.empty()
|
expect(observed).to.be.empty()
|
||||||
|
Reference in New Issue
Block a user