@libp2p/dcutr 2.0.37 → 2.0.38-a02cb0461
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 +43 -55
- package/dist/src/dcutr.js.map +1 -1
- package/dist/src/utils.js +1 -1
- package/dist/src/utils.js.map +1 -1
- package/package.json +10 -11
- package/src/dcutr.ts +47 -56
- package/src/utils.ts +1 -1
- package/dist/typedoc-urls.json +0 -10
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;IAiBvE,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;IAoCvB,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;IA6D1F;;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 { pbStream } from '@libp2p/utils';
|
|
2
3
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
3
4
|
import { Circuit } from '@multiformats/multiaddr-matcher';
|
|
4
5
|
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,6 +43,7 @@ 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);
|
|
46
47
|
}
|
|
47
48
|
[Symbol.toStringTag] = '@libp2p/dcutr';
|
|
48
49
|
[serviceDependencies] = [
|
|
@@ -74,12 +75,7 @@ export class DefaultDCUtRService {
|
|
|
74
75
|
});
|
|
75
76
|
}
|
|
76
77
|
});
|
|
77
|
-
await this.registrar.handle(multicodec,
|
|
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
|
-
}, {
|
|
78
|
+
await this.registrar.handle(multicodec, this.handleIncomingUpgrade, {
|
|
83
79
|
maxInboundStreams: this.maxInboundStreams,
|
|
84
80
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
85
81
|
runOnLimitedConnection: true
|
|
@@ -244,57 +240,49 @@ export class DefaultDCUtRService {
|
|
|
244
240
|
const options = {
|
|
245
241
|
signal: AbortSignal.timeout(this.timeout)
|
|
246
242
|
};
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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);
|
|
243
|
+
const pb = pbStream(stream, {
|
|
244
|
+
maxDataLength: MAX_DCUTR_MESSAGE_SIZE
|
|
245
|
+
}).pb(HolePunch);
|
|
246
|
+
this.log('A receiving connect');
|
|
247
|
+
// 3. Upon receiving the Connect, A responds back with a Connect message
|
|
248
|
+
// containing its observed (and possibly predicted) addresses.
|
|
249
|
+
const connect = await pb.read(options);
|
|
250
|
+
if (connect.type !== HolePunch.Type.CONNECT) {
|
|
251
|
+
this.log('B sent wrong message type');
|
|
252
|
+
throw new InvalidMessageError('DCUtR message type was incorrect');
|
|
290
253
|
}
|
|
291
|
-
|
|
292
|
-
this.log
|
|
293
|
-
|
|
254
|
+
if (connect.observedAddresses.length === 0) {
|
|
255
|
+
this.log('B sent no multiaddrs');
|
|
256
|
+
throw new InvalidMessageError('DCUtR connect message had no multiaddrs');
|
|
294
257
|
}
|
|
295
|
-
|
|
296
|
-
|
|
258
|
+
const multiaddrs = this.getDialableMultiaddrs(connect.observedAddresses);
|
|
259
|
+
if (multiaddrs.length === 0) {
|
|
260
|
+
this.log('B had no dialable multiaddrs');
|
|
261
|
+
throw new InvalidMessageError('DCUtR connect message had no dialable multiaddrs');
|
|
297
262
|
}
|
|
263
|
+
this.log('A sending connect');
|
|
264
|
+
await pb.write({
|
|
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');
|
|
272
|
+
}
|
|
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);
|
|
298
286
|
}
|
|
299
287
|
/**
|
|
300
288
|
* 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,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AACzD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,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
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,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,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.
|
|
3
|
+
"version": "2.0.38-a02cb0461",
|
|
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,20 +45,19 @@
|
|
|
45
45
|
"doc-check": "aegir doc-check"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@libp2p/interface": "
|
|
49
|
-
"@libp2p/interface-internal": "
|
|
50
|
-
"@libp2p/utils": "
|
|
51
|
-
"@multiformats/multiaddr": "^12.
|
|
52
|
-
"@multiformats/multiaddr-matcher": "^2.0.
|
|
48
|
+
"@libp2p/interface": "2.11.0-a02cb0461",
|
|
49
|
+
"@libp2p/interface-internal": "2.3.19-a02cb0461",
|
|
50
|
+
"@libp2p/utils": "6.7.2-a02cb0461",
|
|
51
|
+
"@multiformats/multiaddr": "^12.5.1",
|
|
52
|
+
"@multiformats/multiaddr-matcher": "^2.0.2",
|
|
53
53
|
"delay": "^6.0.0",
|
|
54
|
-
"
|
|
55
|
-
"protons-runtime": "^5.5.0",
|
|
54
|
+
"protons-runtime": "^5.6.0",
|
|
56
55
|
"uint8arraylist": "^2.4.8"
|
|
57
56
|
},
|
|
58
57
|
"devDependencies": {
|
|
59
|
-
"aegir": "^47.0.
|
|
60
|
-
"protons": "^7.
|
|
61
|
-
"sinon": "^
|
|
58
|
+
"aegir": "^47.0.21",
|
|
59
|
+
"protons": "^7.7.0",
|
|
60
|
+
"sinon": "^21.0.0",
|
|
62
61
|
"sinon-ts": "^2.0.0"
|
|
63
62
|
},
|
|
64
63
|
"sideEffects": false
|
package/src/dcutr.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { InvalidMessageError, serviceDependencies } from '@libp2p/interface'
|
|
2
|
+
import { pbStream } from '@libp2p/utils'
|
|
2
3
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
3
4
|
import { Circuit } from '@multiformats/multiaddr-matcher'
|
|
4
5
|
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,6 +52,8 @@ 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)
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
readonly [Symbol.toStringTag] = '@libp2p/dcutr'
|
|
@@ -91,12 +93,7 @@ export class DefaultDCUtRService implements Startable {
|
|
|
91
93
|
}
|
|
92
94
|
})
|
|
93
95
|
|
|
94
|
-
await this.registrar.handle(multicodec,
|
|
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
|
-
}, {
|
|
96
|
+
await this.registrar.handle(multicodec, this.handleIncomingUpgrade, {
|
|
100
97
|
maxInboundStreams: this.maxInboundStreams,
|
|
101
98
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
102
99
|
runOnLimitedConnection: true
|
|
@@ -293,66 +290,60 @@ export class DefaultDCUtRService implements Startable {
|
|
|
293
290
|
signal: AbortSignal.timeout(this.timeout)
|
|
294
291
|
}
|
|
295
292
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}).pb(HolePunch)
|
|
293
|
+
const pb = pbStream(stream, {
|
|
294
|
+
maxDataLength: MAX_DCUTR_MESSAGE_SIZE
|
|
295
|
+
}).pb(HolePunch)
|
|
300
296
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
297
|
+
this.log('A receiving connect')
|
|
298
|
+
// 3. Upon receiving the Connect, A responds back with a Connect message
|
|
299
|
+
// containing its observed (and possibly predicted) addresses.
|
|
300
|
+
const connect = await pb.read(options)
|
|
305
301
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
302
|
+
if (connect.type !== HolePunch.Type.CONNECT) {
|
|
303
|
+
this.log('B sent wrong message type')
|
|
304
|
+
throw new InvalidMessageError('DCUtR message type was incorrect')
|
|
305
|
+
}
|
|
310
306
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
307
|
+
if (connect.observedAddresses.length === 0) {
|
|
308
|
+
this.log('B sent no multiaddrs')
|
|
309
|
+
throw new InvalidMessageError('DCUtR connect message had no multiaddrs')
|
|
310
|
+
}
|
|
315
311
|
|
|
316
|
-
|
|
312
|
+
const multiaddrs = this.getDialableMultiaddrs(connect.observedAddresses)
|
|
317
313
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
314
|
+
if (multiaddrs.length === 0) {
|
|
315
|
+
this.log('B had no dialable multiaddrs')
|
|
316
|
+
throw new InvalidMessageError('DCUtR connect message had no dialable multiaddrs')
|
|
317
|
+
}
|
|
322
318
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
319
|
+
this.log('A sending connect')
|
|
320
|
+
await pb.write({
|
|
321
|
+
type: HolePunch.Type.CONNECT,
|
|
322
|
+
observedAddresses: this.addressManager.getAddresses().map(ma => ma.bytes)
|
|
323
|
+
})
|
|
328
324
|
|
|
329
|
-
|
|
330
|
-
|
|
325
|
+
this.log('A receiving sync')
|
|
326
|
+
const sync = await pb.read(options)
|
|
331
327
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
328
|
+
if (sync.type !== HolePunch.Type.SYNC) {
|
|
329
|
+
throw new InvalidMessageError('DCUtR message type was incorrect')
|
|
330
|
+
}
|
|
335
331
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
332
|
+
// TODO: when we have a QUIC transport, the dial step is different - for
|
|
333
|
+
// now we only have tcp support
|
|
334
|
+
// https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol
|
|
339
335
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
336
|
+
// Upon receiving the Sync, A immediately dials the address to B
|
|
337
|
+
this.log('A dialing', multiaddrs)
|
|
338
|
+
const connection = await this.connectionManager.openConnection(multiaddrs, {
|
|
339
|
+
signal: options.signal,
|
|
340
|
+
priority: DCUTR_DIAL_PRIORITY,
|
|
341
|
+
force: true
|
|
342
|
+
})
|
|
347
343
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
this.log.error('incoming DCUtR from %p failed', relayedConnection.remotePeer, err)
|
|
352
|
-
stream.abort(err)
|
|
353
|
-
} finally {
|
|
354
|
-
await stream.close(options)
|
|
355
|
-
}
|
|
344
|
+
this.log('DCUtR to %p succeeded via %a, closing relayed connection', relayedConnection.remotePeer, connection.remoteAddr)
|
|
345
|
+
await relayedConnection.close(options)
|
|
346
|
+
await stream.close(options)
|
|
356
347
|
}
|
|
357
348
|
|
|
358
349
|
/**
|
package/src/utils.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isPrivateIp } from '@libp2p/utils
|
|
1
|
+
import { isPrivateIp } from '@libp2p/utils'
|
|
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'
|
package/dist/typedoc-urls.json
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"DCUtRServiceComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_dcutr.DCUtRServiceComponents.html",
|
|
3
|
-
".:DCUtRServiceComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_dcutr.DCUtRServiceComponents.html",
|
|
4
|
-
"DCUtRServiceInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_dcutr.DCUtRServiceInit.html",
|
|
5
|
-
".:DCUtRServiceInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_dcutr.DCUtRServiceInit.html",
|
|
6
|
-
"multicodec": "https://libp2p.github.io/js-libp2p/variables/_libp2p_dcutr.multicodec.html",
|
|
7
|
-
".:multicodec": "https://libp2p.github.io/js-libp2p/variables/_libp2p_dcutr.multicodec.html",
|
|
8
|
-
"dcutr": "https://libp2p.github.io/js-libp2p/functions/_libp2p_dcutr.dcutr.html",
|
|
9
|
-
".:dcutr": "https://libp2p.github.io/js-libp2p/functions/_libp2p_dcutr.dcutr.html"
|
|
10
|
-
}
|