@libp2p/dcutr 2.0.38-8484de8a2 → 2.0.38-87bc8d4fb
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/dist/index.min.js +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/src/dcutr.d.ts.map +1 -1
- package/dist/src/dcutr.js +57 -45
- package/dist/src/dcutr.js.map +1 -1
- package/dist/src/utils.js +2 -2
- package/dist/src/utils.js.map +1 -1
- package/package.json +11 -10
- package/src/dcutr.ts +58 -49
- package/src/utils.ts +2 -2
package/dist/src/dcutr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dcutr.d.ts","sourceRoot":"","sources":["../../src/dcutr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAQ5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,EAAa,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAgBxD,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"dcutr.d.ts","sourceRoot":"","sources":["../../src/dcutr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAQ5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,EAAa,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAgBxD,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB;IAevE,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAkB;IAE/C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAEvC;IAED,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAyCvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAU5B;;;;OAIG;IACG,cAAc,CAAE,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqGnE;;;OAGG;IACG,kCAAkC,CAAE,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IA0D1F;;;;OAIG;IACG,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE1F;;OAEG;IACH,qBAAqB,CAAE,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE;CAqB1F"}
|
package/dist/src/dcutr.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { InvalidMessageError, serviceDependencies } from '@libp2p/interface';
|
|
2
|
-
import {
|
|
3
|
-
import { CODE_P2P, multiaddr } from '@multiformats/multiaddr';
|
|
2
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
4
3
|
import { Circuit } from '@multiformats/multiaddr-matcher';
|
|
5
4
|
import delay from 'delay';
|
|
5
|
+
import { pbStream } from 'it-protobuf-stream';
|
|
6
6
|
import { HolePunch } from './pb/message.js';
|
|
7
7
|
import { isPublicAndDialable } from './utils.js';
|
|
8
8
|
import { multicodec } from './index.js';
|
|
@@ -43,7 +43,6 @@ export class DefaultDCUtRService {
|
|
|
43
43
|
this.retries = init.retries ?? defaultValues.retries;
|
|
44
44
|
this.maxInboundStreams = init.maxInboundStreams ?? defaultValues.maxInboundStreams;
|
|
45
45
|
this.maxOutboundStreams = init.maxOutboundStreams ?? defaultValues.maxOutboundStreams;
|
|
46
|
-
this.handleIncomingUpgrade = this.handleIncomingUpgrade.bind(this);
|
|
47
46
|
}
|
|
48
47
|
[Symbol.toStringTag] = '@libp2p/dcutr';
|
|
49
48
|
[serviceDependencies] = [
|
|
@@ -75,7 +74,12 @@ export class DefaultDCUtRService {
|
|
|
75
74
|
});
|
|
76
75
|
}
|
|
77
76
|
});
|
|
78
|
-
await this.registrar.handle(multicodec,
|
|
77
|
+
await this.registrar.handle(multicodec, (data) => {
|
|
78
|
+
void this.handleIncomingUpgrade(data.stream, data.connection).catch(err => {
|
|
79
|
+
this.log.error('error during incoming DCUtR attempt', err);
|
|
80
|
+
data.stream.abort(err);
|
|
81
|
+
});
|
|
82
|
+
}, {
|
|
79
83
|
maxInboundStreams: this.maxInboundStreams,
|
|
80
84
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
81
85
|
runOnLimitedConnection: true
|
|
@@ -194,7 +198,7 @@ export class DefaultDCUtRService {
|
|
|
194
198
|
.map(address => {
|
|
195
199
|
const ma = address.multiaddr;
|
|
196
200
|
// ensure all multiaddrs have the peer id
|
|
197
|
-
if (ma.
|
|
201
|
+
if (ma.getPeerId() == null) {
|
|
198
202
|
return ma.encapsulate(`/p2p/${relayedConnection.remotePeer}`);
|
|
199
203
|
}
|
|
200
204
|
return ma;
|
|
@@ -240,49 +244,57 @@ export class DefaultDCUtRService {
|
|
|
240
244
|
const options = {
|
|
241
245
|
signal: AbortSignal.timeout(this.timeout)
|
|
242
246
|
};
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
247
|
+
try {
|
|
248
|
+
const pb = pbStream(stream, {
|
|
249
|
+
maxDataLength: MAX_DCUTR_MESSAGE_SIZE
|
|
250
|
+
}).pb(HolePunch);
|
|
251
|
+
this.log('A receiving connect');
|
|
252
|
+
// 3. Upon receiving the Connect, A responds back with a Connect message
|
|
253
|
+
// containing its observed (and possibly predicted) addresses.
|
|
254
|
+
const connect = await pb.read(options);
|
|
255
|
+
if (connect.type !== HolePunch.Type.CONNECT) {
|
|
256
|
+
this.log('B sent wrong message type');
|
|
257
|
+
throw new InvalidMessageError('DCUtR message type was incorrect');
|
|
258
|
+
}
|
|
259
|
+
if (connect.observedAddresses.length === 0) {
|
|
260
|
+
this.log('B sent no multiaddrs');
|
|
261
|
+
throw new InvalidMessageError('DCUtR connect message had no multiaddrs');
|
|
262
|
+
}
|
|
263
|
+
const multiaddrs = this.getDialableMultiaddrs(connect.observedAddresses);
|
|
264
|
+
if (multiaddrs.length === 0) {
|
|
265
|
+
this.log('B had no dialable multiaddrs');
|
|
266
|
+
throw new InvalidMessageError('DCUtR connect message had no dialable multiaddrs');
|
|
267
|
+
}
|
|
268
|
+
this.log('A sending connect');
|
|
269
|
+
await pb.write({
|
|
270
|
+
type: HolePunch.Type.CONNECT,
|
|
271
|
+
observedAddresses: this.addressManager.getAddresses().map(ma => ma.bytes)
|
|
272
|
+
});
|
|
273
|
+
this.log('A receiving sync');
|
|
274
|
+
const sync = await pb.read(options);
|
|
275
|
+
if (sync.type !== HolePunch.Type.SYNC) {
|
|
276
|
+
throw new InvalidMessageError('DCUtR message type was incorrect');
|
|
277
|
+
}
|
|
278
|
+
// TODO: when we have a QUIC transport, the dial step is different - for
|
|
279
|
+
// now we only have tcp support
|
|
280
|
+
// https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol
|
|
281
|
+
// Upon receiving the Sync, A immediately dials the address to B
|
|
282
|
+
this.log('A dialing', multiaddrs);
|
|
283
|
+
const connection = await this.connectionManager.openConnection(multiaddrs, {
|
|
284
|
+
signal: options.signal,
|
|
285
|
+
priority: DCUTR_DIAL_PRIORITY,
|
|
286
|
+
force: true
|
|
287
|
+
});
|
|
288
|
+
this.log('DCUtR to %p succeeded via %a, closing relayed connection', relayedConnection.remotePeer, connection.remoteAddr);
|
|
289
|
+
await relayedConnection.close(options);
|
|
257
290
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
throw new InvalidMessageError('DCUtR connect message had no dialable multiaddrs');
|
|
291
|
+
catch (err) {
|
|
292
|
+
this.log.error('incoming DCUtR from %p failed', relayedConnection.remotePeer, err);
|
|
293
|
+
stream.abort(err);
|
|
262
294
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
type: HolePunch.Type.CONNECT,
|
|
266
|
-
observedAddresses: this.addressManager.getAddresses().map(ma => ma.bytes)
|
|
267
|
-
});
|
|
268
|
-
this.log('A receiving sync');
|
|
269
|
-
const sync = await pb.read(options);
|
|
270
|
-
if (sync.type !== HolePunch.Type.SYNC) {
|
|
271
|
-
throw new InvalidMessageError('DCUtR message type was incorrect');
|
|
295
|
+
finally {
|
|
296
|
+
await stream.close(options);
|
|
272
297
|
}
|
|
273
|
-
// TODO: when we have a QUIC transport, the dial step is different - for
|
|
274
|
-
// now we only have tcp support
|
|
275
|
-
// https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol
|
|
276
|
-
// Upon receiving the Sync, A immediately dials the address to B
|
|
277
|
-
this.log('A dialing', multiaddrs);
|
|
278
|
-
const connection = await this.connectionManager.openConnection(multiaddrs, {
|
|
279
|
-
signal: options.signal,
|
|
280
|
-
priority: DCUTR_DIAL_PRIORITY,
|
|
281
|
-
force: true
|
|
282
|
-
});
|
|
283
|
-
this.log('DCUtR to %p succeeded via %a, closing relayed connection', relayedConnection.remotePeer, connection.remoteAddr);
|
|
284
|
-
await relayedConnection.close(options);
|
|
285
|
-
await stream.close(options);
|
|
286
298
|
}
|
|
287
299
|
/**
|
|
288
300
|
* Takes the `addr` and converts it to a Multiaddr if possible
|
package/dist/src/dcutr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dcutr.js","sourceRoot":"","sources":["../../src/dcutr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dcutr.js","sourceRoot":"","sources":["../../src/dcutr.ts"],"names":[],"mappings":"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"}
|
package/dist/src/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isPrivateIp } from '@libp2p/utils/private-ip';
|
|
2
2
|
import { Circuit, IP, DNS } from '@multiformats/multiaddr-matcher';
|
|
3
3
|
/**
|
|
4
4
|
* Returns true if the passed multiaddr is public, not relayed and we have a
|
|
@@ -21,6 +21,6 @@ export function isPublicAndDialable(ma, transportManager) {
|
|
|
21
21
|
if (!IP.matches(ma)) {
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
|
-
return
|
|
24
|
+
return isPrivateIp(ma.toOptions().host) === false;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAA;AAIlE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAE,EAAa,EAAE,gBAAkC;IACpF,uBAAuB;IACvB,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAA;IAEhE,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAA;AACnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/dcutr",
|
|
3
|
-
"version": "2.0.38-
|
|
3
|
+
"version": "2.0.38-87bc8d4fb",
|
|
4
4
|
"description": "Implementation of the DCUtR Protocol",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/protocol-dcutr#readme",
|
|
@@ -45,19 +45,20 @@
|
|
|
45
45
|
"doc-check": "aegir doc-check"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@libp2p/interface": "2.11.0-
|
|
49
|
-
"@libp2p/interface-internal": "2.3.19-
|
|
50
|
-
"@libp2p/utils": "6.7.2-
|
|
51
|
-
"@multiformats/multiaddr": "^
|
|
52
|
-
"@multiformats/multiaddr-matcher": "^
|
|
48
|
+
"@libp2p/interface": "2.11.0-87bc8d4fb",
|
|
49
|
+
"@libp2p/interface-internal": "2.3.19-87bc8d4fb",
|
|
50
|
+
"@libp2p/utils": "6.7.2-87bc8d4fb",
|
|
51
|
+
"@multiformats/multiaddr": "^12.4.4",
|
|
52
|
+
"@multiformats/multiaddr-matcher": "^2.0.0",
|
|
53
53
|
"delay": "^6.0.0",
|
|
54
|
-
"
|
|
54
|
+
"it-protobuf-stream": "^2.0.2",
|
|
55
|
+
"protons-runtime": "^5.5.0",
|
|
55
56
|
"uint8arraylist": "^2.4.8"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
|
-
"aegir": "^47.0.
|
|
59
|
-
"protons": "^7.
|
|
60
|
-
"sinon": "^
|
|
59
|
+
"aegir": "^47.0.14",
|
|
60
|
+
"protons": "^7.6.1",
|
|
61
|
+
"sinon": "^20.0.0",
|
|
61
62
|
"sinon-ts": "^2.0.0"
|
|
62
63
|
},
|
|
63
64
|
"sideEffects": false
|
package/src/dcutr.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { InvalidMessageError, serviceDependencies } from '@libp2p/interface'
|
|
2
|
-
import {
|
|
3
|
-
import { CODE_P2P, multiaddr } from '@multiformats/multiaddr'
|
|
2
|
+
import { multiaddr } from '@multiformats/multiaddr'
|
|
4
3
|
import { Circuit } from '@multiformats/multiaddr-matcher'
|
|
5
4
|
import delay from 'delay'
|
|
5
|
+
import { pbStream } from 'it-protobuf-stream'
|
|
6
6
|
import { HolePunch } from './pb/message.js'
|
|
7
7
|
import { isPublicAndDialable } from './utils.js'
|
|
8
8
|
import { multicodec } from './index.js'
|
|
@@ -52,8 +52,6 @@ export class DefaultDCUtRService implements Startable {
|
|
|
52
52
|
this.retries = init.retries ?? defaultValues.retries
|
|
53
53
|
this.maxInboundStreams = init.maxInboundStreams ?? defaultValues.maxInboundStreams
|
|
54
54
|
this.maxOutboundStreams = init.maxOutboundStreams ?? defaultValues.maxOutboundStreams
|
|
55
|
-
|
|
56
|
-
this.handleIncomingUpgrade = this.handleIncomingUpgrade.bind(this)
|
|
57
55
|
}
|
|
58
56
|
|
|
59
57
|
readonly [Symbol.toStringTag] = '@libp2p/dcutr'
|
|
@@ -93,7 +91,12 @@ export class DefaultDCUtRService implements Startable {
|
|
|
93
91
|
}
|
|
94
92
|
})
|
|
95
93
|
|
|
96
|
-
await this.registrar.handle(multicodec,
|
|
94
|
+
await this.registrar.handle(multicodec, (data) => {
|
|
95
|
+
void this.handleIncomingUpgrade(data.stream, data.connection).catch(err => {
|
|
96
|
+
this.log.error('error during incoming DCUtR attempt', err)
|
|
97
|
+
data.stream.abort(err)
|
|
98
|
+
})
|
|
99
|
+
}, {
|
|
97
100
|
maxInboundStreams: this.maxInboundStreams,
|
|
98
101
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
99
102
|
runOnLimitedConnection: true
|
|
@@ -235,7 +238,7 @@ export class DefaultDCUtRService implements Startable {
|
|
|
235
238
|
const ma = address.multiaddr
|
|
236
239
|
|
|
237
240
|
// ensure all multiaddrs have the peer id
|
|
238
|
-
if (ma.
|
|
241
|
+
if (ma.getPeerId() == null) {
|
|
239
242
|
return ma.encapsulate(`/p2p/${relayedConnection.remotePeer}`)
|
|
240
243
|
}
|
|
241
244
|
|
|
@@ -290,60 +293,66 @@ export class DefaultDCUtRService implements Startable {
|
|
|
290
293
|
signal: AbortSignal.timeout(this.timeout)
|
|
291
294
|
}
|
|
292
295
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
+
try {
|
|
297
|
+
const pb = pbStream(stream, {
|
|
298
|
+
maxDataLength: MAX_DCUTR_MESSAGE_SIZE
|
|
299
|
+
}).pb(HolePunch)
|
|
296
300
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
+
this.log('A receiving connect')
|
|
302
|
+
// 3. Upon receiving the Connect, A responds back with a Connect message
|
|
303
|
+
// containing its observed (and possibly predicted) addresses.
|
|
304
|
+
const connect = await pb.read(options)
|
|
301
305
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
+
if (connect.type !== HolePunch.Type.CONNECT) {
|
|
307
|
+
this.log('B sent wrong message type')
|
|
308
|
+
throw new InvalidMessageError('DCUtR message type was incorrect')
|
|
309
|
+
}
|
|
306
310
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
+
if (connect.observedAddresses.length === 0) {
|
|
312
|
+
this.log('B sent no multiaddrs')
|
|
313
|
+
throw new InvalidMessageError('DCUtR connect message had no multiaddrs')
|
|
314
|
+
}
|
|
311
315
|
|
|
312
|
-
|
|
316
|
+
const multiaddrs = this.getDialableMultiaddrs(connect.observedAddresses)
|
|
313
317
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
+
if (multiaddrs.length === 0) {
|
|
319
|
+
this.log('B had no dialable multiaddrs')
|
|
320
|
+
throw new InvalidMessageError('DCUtR connect message had no dialable multiaddrs')
|
|
321
|
+
}
|
|
318
322
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
323
|
+
this.log('A sending connect')
|
|
324
|
+
await pb.write({
|
|
325
|
+
type: HolePunch.Type.CONNECT,
|
|
326
|
+
observedAddresses: this.addressManager.getAddresses().map(ma => ma.bytes)
|
|
327
|
+
})
|
|
324
328
|
|
|
325
|
-
|
|
326
|
-
|
|
329
|
+
this.log('A receiving sync')
|
|
330
|
+
const sync = await pb.read(options)
|
|
327
331
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
332
|
+
if (sync.type !== HolePunch.Type.SYNC) {
|
|
333
|
+
throw new InvalidMessageError('DCUtR message type was incorrect')
|
|
334
|
+
}
|
|
331
335
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
336
|
+
// TODO: when we have a QUIC transport, the dial step is different - for
|
|
337
|
+
// now we only have tcp support
|
|
338
|
+
// https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol
|
|
335
339
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
340
|
+
// Upon receiving the Sync, A immediately dials the address to B
|
|
341
|
+
this.log('A dialing', multiaddrs)
|
|
342
|
+
const connection = await this.connectionManager.openConnection(multiaddrs, {
|
|
343
|
+
signal: options.signal,
|
|
344
|
+
priority: DCUTR_DIAL_PRIORITY,
|
|
345
|
+
force: true
|
|
346
|
+
})
|
|
343
347
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
348
|
+
this.log('DCUtR to %p succeeded via %a, closing relayed connection', relayedConnection.remotePeer, connection.remoteAddr)
|
|
349
|
+
await relayedConnection.close(options)
|
|
350
|
+
} catch (err: any) {
|
|
351
|
+
this.log.error('incoming DCUtR from %p failed', relayedConnection.remotePeer, err)
|
|
352
|
+
stream.abort(err)
|
|
353
|
+
} finally {
|
|
354
|
+
await stream.close(options)
|
|
355
|
+
}
|
|
347
356
|
}
|
|
348
357
|
|
|
349
358
|
/**
|
package/src/utils.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isPrivateIp } from '@libp2p/utils/private-ip'
|
|
2
2
|
import { Circuit, IP, DNS } from '@multiformats/multiaddr-matcher'
|
|
3
3
|
import type { TransportManager } from '@libp2p/interface-internal'
|
|
4
4
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
@@ -29,5 +29,5 @@ export function isPublicAndDialable (ma: Multiaddr, transportManager: TransportM
|
|
|
29
29
|
return false
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
return
|
|
32
|
+
return isPrivateIp(ma.toOptions().host) === false
|
|
33
33
|
}
|