@libp2p/mdns 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/src/compat/index.d.ts +8 -9
- package/dist/src/compat/index.d.ts.map +1 -1
- package/dist/src/compat/index.js +7 -7
- package/dist/src/compat/index.js.map +1 -1
- package/dist/src/compat/querier.d.ts +7 -7
- package/dist/src/compat/querier.d.ts.map +1 -1
- package/dist/src/compat/querier.js +21 -65
- package/dist/src/compat/querier.js.map +1 -1
- package/dist/src/compat/responder.d.ts +5 -10
- package/dist/src/compat/responder.d.ts.map +1 -1
- package/dist/src/compat/responder.js +37 -36
- package/dist/src/compat/responder.js.map +1 -1
- package/dist/src/compat/utils.d.ts +5 -0
- package/dist/src/compat/utils.d.ts.map +1 -0
- package/dist/src/compat/utils.js +70 -0
- package/dist/src/compat/utils.js.map +1 -0
- package/dist/src/index.d.ts +5 -8
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/query.d.ts.map +1 -1
- package/dist/src/query.js +13 -11
- package/dist/src/query.js.map +1 -1
- package/package.json +11 -10
- package/src/compat/index.ts +15 -10
- package/src/compat/querier.ts +26 -77
- package/src/compat/responder.ts +44 -50
- package/src/compat/utils.ts +81 -0
- package/src/index.ts +21 -22
- package/src/query.ts +15 -11
package/dist/src/index.js
CHANGED
|
@@ -3,33 +3,32 @@ import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
|
|
|
3
3
|
import { logger } from '@libp2p/logger';
|
|
4
4
|
import * as query from './query.js';
|
|
5
5
|
import { GoMulticastDNS } from './compat/index.js';
|
|
6
|
+
import { Components } from '@libp2p/interfaces/components';
|
|
6
7
|
const log = logger('libp2p:mdns');
|
|
7
8
|
export class MulticastDNS extends EventEmitter {
|
|
8
|
-
constructor(options) {
|
|
9
|
+
constructor(options = {}) {
|
|
9
10
|
super();
|
|
10
|
-
|
|
11
|
-
throw new Error('needs own PeerId to work');
|
|
12
|
-
}
|
|
11
|
+
this.components = new Components();
|
|
13
12
|
this.broadcast = options.broadcast !== false;
|
|
14
13
|
this.interval = options.interval ?? (1e3 * 10);
|
|
15
14
|
this.serviceTag = options.serviceTag ?? 'ipfs.local';
|
|
16
15
|
this.port = options.port ?? 5353;
|
|
17
|
-
this.peerId = options.peerId;
|
|
18
|
-
this.peerMultiaddrs = options.multiaddrs ?? [];
|
|
19
16
|
this._queryInterval = null;
|
|
20
17
|
this._onPeer = this._onPeer.bind(this);
|
|
21
18
|
this._onMdnsQuery = this._onMdnsQuery.bind(this);
|
|
22
19
|
this._onMdnsResponse = this._onMdnsResponse.bind(this);
|
|
23
20
|
if (options.compat !== false) {
|
|
24
21
|
this._goMdns = new GoMulticastDNS({
|
|
25
|
-
multiaddrs: this.peerMultiaddrs,
|
|
26
|
-
peerId: options.peerId,
|
|
27
22
|
queryPeriod: options.compatQueryPeriod,
|
|
28
23
|
queryInterval: options.compatQueryInterval
|
|
29
24
|
});
|
|
30
25
|
this._goMdns.addEventListener('peer', this._onPeer);
|
|
31
26
|
}
|
|
32
27
|
}
|
|
28
|
+
init(components) {
|
|
29
|
+
this.components = components;
|
|
30
|
+
this._goMdns?.init(components);
|
|
31
|
+
}
|
|
33
32
|
isStarted() {
|
|
34
33
|
return Boolean(this.mdns);
|
|
35
34
|
}
|
|
@@ -54,19 +53,22 @@ export class MulticastDNS extends EventEmitter {
|
|
|
54
53
|
if (this.mdns == null) {
|
|
55
54
|
return;
|
|
56
55
|
}
|
|
57
|
-
|
|
56
|
+
log.trace('received incoming mDNS query');
|
|
57
|
+
query.gotQuery(event, this.mdns, this.components.getPeerId(), this.components.getAddressManager().getAddresses(), this.serviceTag, this.broadcast);
|
|
58
58
|
}
|
|
59
59
|
_onMdnsResponse(event) {
|
|
60
|
+
log.trace('received mDNS query response');
|
|
60
61
|
try {
|
|
61
|
-
const foundPeer = query.gotResponse(event, this.
|
|
62
|
+
const foundPeer = query.gotResponse(event, this.components.getPeerId(), this.serviceTag);
|
|
62
63
|
if (foundPeer != null) {
|
|
64
|
+
log('discovered peer in mDNS qeury response %p', foundPeer.id);
|
|
63
65
|
this.dispatchEvent(new CustomEvent('peer', {
|
|
64
66
|
detail: foundPeer
|
|
65
67
|
}));
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
catch (err) {
|
|
69
|
-
log('Error processing peer response', err);
|
|
71
|
+
log.error('Error processing peer response', err);
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
_onPeer(evt) {
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAA8B,MAAM,yBAAyB,CAAA;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAK9E,wBAAgB,QAAQ,CAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAejF;AAUD,wBAAgB,WAAW,CAAE,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CA6D/G;AAED,wBAAgB,QAAQ,CAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,QAqE9I"}
|
package/dist/src/query.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import os from 'os';
|
|
2
2
|
import { logger } from '@libp2p/logger';
|
|
3
|
-
import { Multiaddr } from '@multiformats/multiaddr';
|
|
4
|
-
import { base58btc } from 'multiformats/bases/base58';
|
|
3
|
+
import { Multiaddr, protocols } from '@multiformats/multiaddr';
|
|
5
4
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
6
|
-
const log = logger('libp2p:mdns');
|
|
5
|
+
const log = logger('libp2p:mdns:query');
|
|
7
6
|
export function queryLAN(mdns, serviceTag, interval) {
|
|
8
7
|
const query = () => {
|
|
9
8
|
log('query', serviceTag);
|
|
@@ -67,28 +66,31 @@ export function gotResponse(rsp, localPeerId, serviceTag) {
|
|
|
67
66
|
multiaddrs.push(ma);
|
|
68
67
|
}
|
|
69
68
|
});
|
|
70
|
-
if (localPeerId.toString(
|
|
69
|
+
if (localPeerId.toString() === b58Id) {
|
|
71
70
|
return; // replied to myself, ignore
|
|
72
71
|
}
|
|
73
|
-
|
|
72
|
+
const id = peerIdFromString(b58Id);
|
|
73
|
+
log('peer found %p', id);
|
|
74
74
|
return {
|
|
75
|
-
id
|
|
75
|
+
id,
|
|
76
76
|
multiaddrs,
|
|
77
77
|
protocols: []
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
|
|
81
81
|
if (!broadcast) {
|
|
82
|
+
log('not responding to mDNS query as broadcast mode is false');
|
|
82
83
|
return;
|
|
83
84
|
}
|
|
84
85
|
const addresses = multiaddrs.reduce((acc, addr) => {
|
|
85
|
-
if (addr.isThinWaistAddress()) {
|
|
86
|
+
if (addr.decapsulateCode(protocols('p2p').code).isThinWaistAddress()) {
|
|
86
87
|
acc.push(addr.toOptions());
|
|
87
88
|
}
|
|
88
89
|
return acc;
|
|
89
90
|
}, []);
|
|
90
91
|
// Only announce TCP for now
|
|
91
92
|
if (addresses.length === 0) {
|
|
93
|
+
log('no thin waist addresses present, cannot respond to query');
|
|
92
94
|
return;
|
|
93
95
|
}
|
|
94
96
|
if (qry.questions[0] != null && qry.questions[0].name === serviceTag) {
|
|
@@ -98,12 +100,12 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
|
|
|
98
100
|
type: 'PTR',
|
|
99
101
|
class: 'IN',
|
|
100
102
|
ttl: 120,
|
|
101
|
-
data: peerId.toString(
|
|
103
|
+
data: peerId.toString() + '.' + serviceTag
|
|
102
104
|
});
|
|
103
105
|
// Only announce TCP multiaddrs for now
|
|
104
106
|
const port = addresses[0].port;
|
|
105
107
|
answers.push({
|
|
106
|
-
name: peerId.toString(
|
|
108
|
+
name: peerId.toString() + '.' + serviceTag,
|
|
107
109
|
type: 'SRV',
|
|
108
110
|
class: 'IN',
|
|
109
111
|
ttl: 120,
|
|
@@ -115,11 +117,11 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
|
|
|
115
117
|
}
|
|
116
118
|
});
|
|
117
119
|
answers.push({
|
|
118
|
-
name: peerId.toString(
|
|
120
|
+
name: peerId.toString() + '.' + serviceTag,
|
|
119
121
|
type: 'TXT',
|
|
120
122
|
class: 'IN',
|
|
121
123
|
ttl: 120,
|
|
122
|
-
data: peerId.toString(
|
|
124
|
+
data: peerId.toString()
|
|
123
125
|
});
|
|
124
126
|
addresses.forEach((addr) => {
|
|
125
127
|
if ([4, 6].includes(addr.family)) {
|
package/dist/src/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAmB,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/mdns",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Node.js libp2p mDNS discovery implementation for peer discovery",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-mdns#readme",
|
|
@@ -123,26 +123,27 @@
|
|
|
123
123
|
"dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
|
|
124
124
|
"build": "tsc",
|
|
125
125
|
"pretest": "npm run build",
|
|
126
|
-
"test": "aegir test -f ./dist/test",
|
|
126
|
+
"test": "aegir test -f ./dist/test/*.js -f ./dist/test/*/*.js",
|
|
127
127
|
"test:node": "npm run test -- -t node --cov",
|
|
128
128
|
"test:electron-main": "npm run test -- -t electron-main",
|
|
129
129
|
"release": "semantic-release"
|
|
130
130
|
},
|
|
131
131
|
"dependencies": {
|
|
132
|
-
"@libp2p/logger": "^1.
|
|
133
|
-
"@libp2p/peer-id": "^1.1.
|
|
134
|
-
"@multiformats/multiaddr": "^10.
|
|
132
|
+
"@libp2p/logger": "^1.1.2",
|
|
133
|
+
"@libp2p/peer-id": "^1.1.8",
|
|
134
|
+
"@multiformats/multiaddr": "^10.1.5",
|
|
135
135
|
"multicast-dns": "^7.2.0",
|
|
136
136
|
"multiformats": "^9.6.3"
|
|
137
137
|
},
|
|
138
138
|
"devDependencies": {
|
|
139
|
-
"@libp2p/interface-compliance-tests": "^1.1.
|
|
140
|
-
"@libp2p/interfaces": "^1.3.
|
|
141
|
-
"@libp2p/peer-id-factory": "^1.0.
|
|
139
|
+
"@libp2p/interface-compliance-tests": "^1.1.16",
|
|
140
|
+
"@libp2p/interfaces": "^1.3.14",
|
|
141
|
+
"@libp2p/peer-id-factory": "^1.0.8",
|
|
142
142
|
"@types/multicast-dns": "^7.2.1",
|
|
143
|
-
"aegir": "^36.1.
|
|
143
|
+
"aegir": "^36.1.3",
|
|
144
144
|
"delay": "^5.0.0",
|
|
145
145
|
"p-defer": "^4.0.0",
|
|
146
|
-
"p-wait-for": "^4.1.0"
|
|
146
|
+
"p-wait-for": "^4.1.0",
|
|
147
|
+
"ts-sinon": "^2.0.2"
|
|
147
148
|
}
|
|
148
149
|
}
|
package/src/compat/index.ts
CHANGED
|
@@ -2,27 +2,27 @@
|
|
|
2
2
|
import { EventEmitter, CustomEvent } from '@libp2p/interfaces'
|
|
3
3
|
import { Responder } from './responder.js'
|
|
4
4
|
import { Querier } from './querier.js'
|
|
5
|
-
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
6
|
-
import type { PeerId } from '@libp2p/interfaces/peer-id'
|
|
7
5
|
import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery'
|
|
6
|
+
import type { Components, Initializable } from '@libp2p/interfaces/components'
|
|
8
7
|
|
|
9
|
-
export
|
|
8
|
+
export interface GoMulticastDNSInit {
|
|
9
|
+
queryPeriod?: number
|
|
10
|
+
queryInterval?: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class GoMulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
|
|
10
14
|
private _started: boolean
|
|
11
15
|
private readonly _responder: Responder
|
|
12
16
|
private readonly _querier: Querier
|
|
13
17
|
|
|
14
|
-
constructor (options:
|
|
18
|
+
constructor (options: GoMulticastDNSInit = {}) {
|
|
15
19
|
super()
|
|
16
|
-
const {
|
|
20
|
+
const { queryPeriod, queryInterval } = options
|
|
17
21
|
|
|
18
22
|
this._started = false
|
|
19
23
|
|
|
20
|
-
this._responder = new Responder(
|
|
21
|
-
peerId,
|
|
22
|
-
multiaddrs
|
|
23
|
-
})
|
|
24
|
+
this._responder = new Responder()
|
|
24
25
|
this._querier = new Querier({
|
|
25
|
-
peerId,
|
|
26
26
|
queryInterval,
|
|
27
27
|
queryPeriod
|
|
28
28
|
})
|
|
@@ -32,6 +32,11 @@ export class GoMulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements
|
|
|
32
32
|
})
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
init (components: Components): void {
|
|
36
|
+
this._responder.init(components)
|
|
37
|
+
this._querier.init(components)
|
|
38
|
+
}
|
|
39
|
+
|
|
35
40
|
isStarted () {
|
|
36
41
|
return this._started
|
|
37
42
|
}
|
package/src/compat/querier.ts
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
import { EventEmitter } from '@libp2p/interfaces'
|
|
1
|
+
import { CustomEvent, EventEmitter } from '@libp2p/interfaces'
|
|
2
2
|
import MDNS from 'multicast-dns'
|
|
3
|
-
import { Multiaddr } from '@multiformats/multiaddr'
|
|
4
|
-
import type { PeerId } from '@libp2p/interfaces/peer-id'
|
|
5
3
|
import { logger } from '@libp2p/logger'
|
|
6
4
|
import { SERVICE_TAG_LOCAL, MULTICAST_IP, MULTICAST_PORT } from './constants.js'
|
|
7
|
-
import { base58btc } from 'multiformats/bases/base58'
|
|
8
|
-
import { peerIdFromString } from '@libp2p/peer-id'
|
|
9
5
|
import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery'
|
|
10
6
|
import type { ResponsePacket } from 'multicast-dns'
|
|
11
7
|
import type { RemoteInfo } from 'dgram'
|
|
8
|
+
import { Components, Initializable } from '@libp2p/interfaces/components'
|
|
9
|
+
import { findPeerDataInAnswers } from './utils.js'
|
|
12
10
|
|
|
13
11
|
const log = logger('libp2p:mdns:compat:querier')
|
|
14
12
|
|
|
15
|
-
export interface
|
|
16
|
-
peerId: PeerId
|
|
13
|
+
export interface QuerierInit {
|
|
17
14
|
queryInterval?: number
|
|
18
15
|
queryPeriod?: number
|
|
19
16
|
}
|
|
@@ -22,24 +19,17 @@ export interface Handle {
|
|
|
22
19
|
stop: () => Promise<void>
|
|
23
20
|
}
|
|
24
21
|
|
|
25
|
-
export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
|
|
26
|
-
private readonly
|
|
27
|
-
private readonly _options: Required<QuerierOptions>
|
|
22
|
+
export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
|
|
23
|
+
private readonly _init: Required<QuerierInit>
|
|
28
24
|
private _handle?: Handle
|
|
25
|
+
private components: Components = new Components()
|
|
29
26
|
|
|
30
|
-
constructor (
|
|
27
|
+
constructor (init: QuerierInit = {}) {
|
|
31
28
|
super()
|
|
32
29
|
|
|
33
|
-
const {
|
|
34
|
-
|
|
35
|
-
if (peerId == null) {
|
|
36
|
-
throw new Error('missing peerId parameter')
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
this._peerIdStr = peerId.toString(base58btc)
|
|
40
|
-
this._options = {
|
|
41
|
-
peerId,
|
|
30
|
+
const { queryInterval, queryPeriod } = init
|
|
42
31
|
|
|
32
|
+
this._init = {
|
|
43
33
|
// Re-query in leu of network change detection (every 60s by default)
|
|
44
34
|
queryInterval: queryInterval ?? 60000,
|
|
45
35
|
// Time for which the MDNS server will stay alive waiting for responses
|
|
@@ -52,6 +42,10 @@ export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDi
|
|
|
52
42
|
this._onResponse = this._onResponse.bind(this)
|
|
53
43
|
}
|
|
54
44
|
|
|
45
|
+
init (components: Components): void {
|
|
46
|
+
this.components = components
|
|
47
|
+
}
|
|
48
|
+
|
|
55
49
|
isStarted () {
|
|
56
50
|
return Boolean(this._handle)
|
|
57
51
|
}
|
|
@@ -83,76 +77,31 @@ export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDi
|
|
|
83
77
|
}
|
|
84
78
|
}
|
|
85
79
|
}, {
|
|
86
|
-
period: this.
|
|
87
|
-
interval: this.
|
|
80
|
+
period: this._init.queryPeriod,
|
|
81
|
+
interval: this._init.queryInterval
|
|
88
82
|
})
|
|
89
83
|
}
|
|
90
84
|
|
|
91
85
|
_onResponse (event: ResponsePacket, info: RemoteInfo) {
|
|
86
|
+
log.trace('received mDNS query response')
|
|
92
87
|
const answers = event.answers ?? []
|
|
93
|
-
const ptrRecord = answers.find(a => a.type === 'PTR' && a.name === SERVICE_TAG_LOCAL)
|
|
94
|
-
|
|
95
|
-
// Only deal with responses for our service tag
|
|
96
|
-
if (ptrRecord == null) return
|
|
97
|
-
|
|
98
|
-
log('got response', event, info)
|
|
99
|
-
|
|
100
|
-
const txtRecord = answers.find(a => a.type === 'TXT')
|
|
101
|
-
if (txtRecord == null || txtRecord.type !== 'TXT') {
|
|
102
|
-
return log('missing TXT record in response')
|
|
103
|
-
}
|
|
104
88
|
|
|
105
|
-
|
|
106
|
-
try {
|
|
107
|
-
peerIdStr = txtRecord.data[0].toString()
|
|
108
|
-
} catch (err) {
|
|
109
|
-
return log('failed to extract peer ID from TXT record data', txtRecord, err)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (this._peerIdStr === peerIdStr) {
|
|
113
|
-
return log('ignoring reply to myself')
|
|
114
|
-
}
|
|
89
|
+
const peerData = findPeerDataInAnswers(answers, this.components.getPeerId())
|
|
115
90
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
} catch (err) {
|
|
120
|
-
return log('failed to create peer ID from TXT record data', peerIdStr, err)
|
|
91
|
+
if (peerData == null) {
|
|
92
|
+
log('could not read peer data from query response')
|
|
93
|
+
return
|
|
121
94
|
}
|
|
122
95
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return
|
|
96
|
+
if (peerData.multiaddrs.length === 0) {
|
|
97
|
+
log('could not parse multiaddrs from mDNS response')
|
|
98
|
+
return
|
|
126
99
|
}
|
|
127
100
|
|
|
128
|
-
log('peer
|
|
129
|
-
|
|
130
|
-
const { port } = srvRecord.data ?? {}
|
|
131
|
-
const protos = { A: 'ip4', AAAA: 'ip6' }
|
|
132
|
-
|
|
133
|
-
const multiaddrs = answers
|
|
134
|
-
.filter(a => ['A', 'AAAA'].includes(a.type))
|
|
135
|
-
.reduce<Multiaddr[]>((addrs, a) => {
|
|
136
|
-
if (a.type !== 'A' && a.type !== 'AAAA') {
|
|
137
|
-
return addrs
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const maStr = `/${protos[a.type]}/${a.data}/tcp/${port}`
|
|
141
|
-
try {
|
|
142
|
-
addrs.push(new Multiaddr(maStr))
|
|
143
|
-
log(maStr)
|
|
144
|
-
} catch (err) {
|
|
145
|
-
log(`failed to create multiaddr from ${a.type} record data`, maStr, port, err)
|
|
146
|
-
}
|
|
147
|
-
return addrs
|
|
148
|
-
}, [])
|
|
101
|
+
log('discovered peer in mDNS qeury response %p', peerData.id)
|
|
149
102
|
|
|
150
103
|
this.dispatchEvent(new CustomEvent('peer', {
|
|
151
|
-
detail:
|
|
152
|
-
id: peerId,
|
|
153
|
-
multiaddrs,
|
|
154
|
-
protcols: []
|
|
155
|
-
}
|
|
104
|
+
detail: peerData
|
|
156
105
|
}))
|
|
157
106
|
}
|
|
158
107
|
|
package/src/compat/responder.ts
CHANGED
|
@@ -2,51 +2,44 @@ import OS from 'os'
|
|
|
2
2
|
import MDNS, { QueryPacket } from 'multicast-dns'
|
|
3
3
|
import { logger } from '@libp2p/logger'
|
|
4
4
|
import { SERVICE_TAG_LOCAL } from './constants.js'
|
|
5
|
-
import
|
|
6
|
-
import type { Multiaddr, MultiaddrObject } from '@multiformats/multiaddr'
|
|
7
|
-
import { base58btc } from 'multiformats/bases/base58'
|
|
5
|
+
import { MultiaddrObject, protocols } from '@multiformats/multiaddr'
|
|
8
6
|
import type { RemoteInfo } from 'dgram'
|
|
9
7
|
import type { Answer } from 'dns-packet'
|
|
8
|
+
import { Components, Initializable } from '@libp2p/interfaces/components'
|
|
10
9
|
|
|
11
10
|
const log = logger('libp2p:mdns:compat:responder')
|
|
12
11
|
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
multiaddrs: Multiaddr[]
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export class Responder {
|
|
19
|
-
private readonly _peerIdStr: string
|
|
20
|
-
private readonly _multiaddrs: Multiaddr[]
|
|
12
|
+
export class Responder implements Initializable {
|
|
13
|
+
private components: Components = new Components()
|
|
21
14
|
private _mdns?: MDNS.MulticastDNS
|
|
22
15
|
|
|
23
|
-
constructor (
|
|
24
|
-
const { peerId, multiaddrs } = options
|
|
25
|
-
|
|
26
|
-
if (peerId == null) {
|
|
27
|
-
throw new Error('missing peerId parameter')
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
this._peerIdStr = peerId.toString(base58btc)
|
|
31
|
-
this._multiaddrs = multiaddrs
|
|
16
|
+
constructor () {
|
|
32
17
|
this._onQuery = this._onQuery.bind(this)
|
|
33
18
|
}
|
|
34
19
|
|
|
20
|
+
init (components: Components): void {
|
|
21
|
+
this.components = components
|
|
22
|
+
}
|
|
23
|
+
|
|
35
24
|
start () {
|
|
36
25
|
this._mdns = MDNS()
|
|
37
26
|
this._mdns.on('query', this._onQuery)
|
|
38
27
|
}
|
|
39
28
|
|
|
40
29
|
_onQuery (event: QueryPacket, info: RemoteInfo) {
|
|
41
|
-
const addresses = this.
|
|
30
|
+
const addresses = this.components.getAddressManager().getAddresses().reduce<MultiaddrObject[]>((acc, addr) => {
|
|
31
|
+
addr = addr.decapsulateCode(protocols('p2p').code)
|
|
32
|
+
|
|
42
33
|
if (addr.isThinWaistAddress()) {
|
|
43
34
|
acc.push(addr.toOptions())
|
|
44
35
|
}
|
|
36
|
+
|
|
45
37
|
return acc
|
|
46
38
|
}, [])
|
|
47
39
|
|
|
48
40
|
// Only announce TCP for now
|
|
49
41
|
if (addresses.length === 0) {
|
|
42
|
+
log('no tcp addresses configured so cannot respond to mDNS query')
|
|
50
43
|
return
|
|
51
44
|
}
|
|
52
45
|
|
|
@@ -55,10 +48,10 @@ export class Responder {
|
|
|
55
48
|
// Only respond to queries for our service tag
|
|
56
49
|
if (!questions.some(q => q.name === SERVICE_TAG_LOCAL)) return
|
|
57
50
|
|
|
58
|
-
log('got query', event, info)
|
|
51
|
+
log.trace('got query', event, info)
|
|
59
52
|
|
|
60
53
|
const answers: Answer[] = []
|
|
61
|
-
const peerServiceTagLocal = `${this.
|
|
54
|
+
const peerServiceTagLocal = `${this.components.getPeerId().toString()}.${SERVICE_TAG_LOCAL}`
|
|
62
55
|
|
|
63
56
|
answers.push({
|
|
64
57
|
name: SERVICE_TAG_LOCAL,
|
|
@@ -68,44 +61,45 @@ export class Responder {
|
|
|
68
61
|
data: peerServiceTagLocal
|
|
69
62
|
})
|
|
70
63
|
|
|
71
|
-
// Only announce TCP multiaddrs for now
|
|
72
|
-
const port = addresses[0].port
|
|
73
|
-
|
|
74
|
-
answers.push({
|
|
75
|
-
name: peerServiceTagLocal,
|
|
76
|
-
type: 'SRV',
|
|
77
|
-
class: 'IN',
|
|
78
|
-
ttl: 120,
|
|
79
|
-
data: {
|
|
80
|
-
priority: 10,
|
|
81
|
-
weight: 1,
|
|
82
|
-
port,
|
|
83
|
-
target: OS.hostname()
|
|
84
|
-
}
|
|
85
|
-
})
|
|
86
|
-
|
|
87
64
|
answers.push({
|
|
88
65
|
name: peerServiceTagLocal,
|
|
89
66
|
type: 'TXT',
|
|
90
67
|
class: 'IN',
|
|
91
68
|
ttl: 120,
|
|
92
|
-
data: [Buffer.from(this.
|
|
69
|
+
data: [Buffer.from(this.components.getPeerId().toString())]
|
|
93
70
|
})
|
|
94
71
|
|
|
95
|
-
addresses.forEach(
|
|
96
|
-
if ([4, 6].includes(ma.family)) {
|
|
97
|
-
|
|
98
|
-
name: OS.hostname(),
|
|
99
|
-
type: ma.family === 4 ? 'A' : 'AAAA',
|
|
100
|
-
class: 'IN',
|
|
101
|
-
ttl: 120,
|
|
102
|
-
data: ma.host
|
|
103
|
-
})
|
|
72
|
+
addresses.forEach(ma => {
|
|
73
|
+
if (![4, 6].includes(ma.family)) {
|
|
74
|
+
return
|
|
104
75
|
}
|
|
76
|
+
|
|
77
|
+
answers.push({
|
|
78
|
+
name: peerServiceTagLocal,
|
|
79
|
+
type: 'SRV',
|
|
80
|
+
class: 'IN',
|
|
81
|
+
ttl: 120,
|
|
82
|
+
data: {
|
|
83
|
+
priority: 10,
|
|
84
|
+
weight: 1,
|
|
85
|
+
port: ma.port,
|
|
86
|
+
target: OS.hostname()
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
answers.push({
|
|
91
|
+
name: OS.hostname(),
|
|
92
|
+
type: ma.family === 4 ? 'A' : 'AAAA',
|
|
93
|
+
class: 'IN',
|
|
94
|
+
ttl: 120,
|
|
95
|
+
data: ma.host
|
|
96
|
+
})
|
|
105
97
|
})
|
|
106
98
|
|
|
107
99
|
if (this._mdns != null) {
|
|
108
|
-
log('responding to query'
|
|
100
|
+
log.trace('responding to query')
|
|
101
|
+
log.trace('query answers', answers)
|
|
102
|
+
|
|
109
103
|
this._mdns.respond(answers, info)
|
|
110
104
|
}
|
|
111
105
|
}
|