@libp2p/mplex 2.0.0 → 4.0.1
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 -1
- package/dist/src/alloc-unsafe-browser.d.ts +2 -0
- package/dist/src/alloc-unsafe-browser.d.ts.map +1 -0
- package/dist/src/alloc-unsafe-browser.js +4 -0
- package/dist/src/alloc-unsafe-browser.js.map +1 -0
- package/dist/src/alloc-unsafe.d.ts +3 -0
- package/dist/src/alloc-unsafe.d.ts.map +1 -0
- package/dist/src/alloc-unsafe.js +4 -0
- package/dist/src/alloc-unsafe.js.map +1 -0
- package/dist/src/encode.d.ts +1 -1
- package/dist/src/encode.d.ts.map +1 -1
- package/dist/src/encode.js +1 -6
- package/dist/src/encode.js.map +1 -1
- package/dist/src/index.d.ts +8 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mplex.d.ts +5 -0
- package/dist/src/mplex.d.ts.map +1 -1
- package/dist/src/mplex.js +45 -31
- package/dist/src/mplex.js.map +1 -1
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +6 -2
- package/dist/src/stream.js.map +1 -1
- package/package.json +13 -9
- package/src/alloc-unsafe-browser.ts +3 -0
- package/src/alloc-unsafe.ts +3 -0
- package/src/encode.ts +2 -9
- package/src/index.ts +10 -4
- package/src/mplex.ts +52 -33
- package/src/stream.ts +9 -4
package/README.md
CHANGED
@@ -70,7 +70,8 @@ Creates a factory that can be used to create new muxers.
|
|
70
70
|
`options` is an optional `Object` that may have the following properties:
|
71
71
|
|
72
72
|
- `maxMsgSize` - a number that defines how large mplex data messages can be in bytes, if messages are larger than this they will be sent as multiple messages (default: 1048576 - e.g. 1MB)
|
73
|
-
- `
|
73
|
+
- `maxInboundStreams` - a number that defines how many incoming streams are allowed per connection (default: 1024)
|
74
|
+
- `maxOutboundStreams` - a number that defines how many outgoing streams are allowed per connection (default: 1024)
|
74
75
|
- `maxStreamBufferSize` - a number that defines how large the message buffer is allowed to grow (default: 1024 \* 1024 \* 4 - e.g. 4MB)
|
75
76
|
|
76
77
|
### `const muxer = factory.createStreamMuxer(components, [options])`
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"alloc-unsafe-browser.d.ts","sourceRoot":"","sources":["../../src/alloc-unsafe-browser.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAE,IAAI,EAAE,MAAM,cAExC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"alloc-unsafe-browser.js","sourceRoot":"","sources":["../../src/alloc-unsafe-browser.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAE,IAAY;IACvC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"alloc-unsafe.d.ts","sourceRoot":"","sources":["../../src/alloc-unsafe.ts"],"names":[],"mappings":";AAAA,wBAAgB,WAAW,CAAE,IAAI,EAAE,MAAM,UAExC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"alloc-unsafe.js","sourceRoot":"","sources":["../../src/alloc-unsafe.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAE,IAAY;IACvC,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC"}
|
package/dist/src/encode.d.ts
CHANGED
package/dist/src/encode.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAG7C,OAAO,EAAE,OAAO,EAAgB,MAAM,oBAAoB,CAAA;AAuD1D;;GAEG;AACH,wBAAwB,MAAM,CAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC,+CAUlE"}
|
package/dist/src/encode.js
CHANGED
@@ -1,12 +1,7 @@
|
|
1
1
|
import varint from 'varint';
|
2
|
+
import { allocUnsafe } from './alloc-unsafe.js';
|
2
3
|
import { MessageTypes } from './message-types.js';
|
3
4
|
const POOL_SIZE = 10 * 1024;
|
4
|
-
function allocUnsafe(size) {
|
5
|
-
if (globalThis.Buffer != null) {
|
6
|
-
return Buffer.allocUnsafe(size);
|
7
|
-
}
|
8
|
-
return new Uint8Array(size);
|
9
|
-
}
|
10
5
|
class Encoder {
|
11
6
|
constructor() {
|
12
7
|
this._pool = allocUnsafe(POOL_SIZE);
|
package/dist/src/encode.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAW,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAA;AAE3B,MAAM,OAAO;IAIX;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAE,GAAY;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QAE7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA;QAE7B,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;YAC3J,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAC7C;aAAM;YACL,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SAC/B;QAED,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAEnD,IAAI,SAAS,GAAG,MAAM,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;YACnC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;SACrB;aAAM;YACL,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;SAC1B;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;YAC3J,OAAO;gBACL,MAAM;gBACN,GAAG,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;aAC7D,CAAA;SACF;QAED,OAAO;YACL,MAAM;SACP,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B;;GAEG;AACH,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,MAAM,CAAE,MAAmC;IACjE,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;gBACnB,KAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACzB;SACF;aAAM;YACL,KAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SAC3B;KACF;AACH,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { Components, Initializable } from '@libp2p/components';
|
2
|
-
import type { StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer';
|
3
|
-
import { MplexStreamMuxer } from './mplex.js';
|
2
|
+
import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer';
|
4
3
|
export interface MplexInit {
|
5
4
|
/**
|
6
5
|
* The maximum size of message that can be sent in one go in bytes.
|
@@ -12,7 +11,12 @@ export interface MplexInit {
|
|
12
11
|
* The maximum number of multiplexed streams that can be open at any
|
13
12
|
* one time. An attempt to open more than this will throw.
|
14
13
|
*/
|
15
|
-
|
14
|
+
maxInboundStreams?: number;
|
15
|
+
/**
|
16
|
+
* The maximum number of multiplexed streams that can be open at any
|
17
|
+
* one time. An attempt to open more than this will throw.
|
18
|
+
*/
|
19
|
+
maxOutboundStreams?: number;
|
16
20
|
/**
|
17
21
|
* Incoming stream messages are buffered until processed by the stream
|
18
22
|
* handler. If the buffer reaches this size in bytes the stream will
|
@@ -26,6 +30,6 @@ export declare class Mplex implements StreamMuxerFactory, Initializable {
|
|
26
30
|
private components;
|
27
31
|
constructor(init?: MplexInit);
|
28
32
|
init(components: Components): void;
|
29
|
-
createStreamMuxer(init?: StreamMuxerInit):
|
33
|
+
createStreamMuxer(init?: StreamMuxerInit): StreamMuxer;
|
30
34
|
}
|
31
35
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAGtG,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,qBAAa,KAAM,YAAW,kBAAkB,EAAE,aAAa;IACtD,QAAQ,SAAiB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,UAAU,CAA+B;gBAEpC,IAAI,GAAE,SAAc;IAIjC,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAInC,iBAAiB,CAAE,IAAI,GAAE,eAAoB,GAAG,WAAW;CAM5D"}
|
package/dist/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AA8B7C,MAAM,OAAO,KAAK;IAKhB,YAAa,OAAkB,EAAE;QAJ1B,aAAQ,GAAG,cAAc,CAAA;QAExB,eAAU,GAAe,IAAI,UAAU,EAAE,CAAA;QAG/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,IAAI,CAAE,UAAsB;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,iBAAiB,CAAE,OAAwB,EAAE;QAC3C,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE;YAC3C,GAAG,IAAI;YACP,GAAG,IAAI,CAAC,KAAK;SACd,CAAC,CAAA;IACJ,CAAC;CACF"}
|
package/dist/src/mplex.d.ts
CHANGED
@@ -18,6 +18,7 @@ export declare class MplexStreamMuxer implements StreamMuxer {
|
|
18
18
|
private readonly _streams;
|
19
19
|
private readonly _init;
|
20
20
|
private readonly _source;
|
21
|
+
private readonly closeController;
|
21
22
|
constructor(components: Components, init?: MplexStreamMuxerInit);
|
22
23
|
init(components: Components): void;
|
23
24
|
/**
|
@@ -29,6 +30,10 @@ export declare class MplexStreamMuxer implements StreamMuxer {
|
|
29
30
|
* provided, the id of the stream will be used.
|
30
31
|
*/
|
31
32
|
newStream(name?: string): Stream;
|
33
|
+
/**
|
34
|
+
* Close or abort all tracked streams and stop the muxer
|
35
|
+
*/
|
36
|
+
close(err?: Error | undefined): void;
|
32
37
|
/**
|
33
38
|
* Called whenever an inbound stream is created
|
34
39
|
*/
|
package/dist/src/mplex.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mplex.d.ts","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAA;AAKjD,OAAO,EAAkC,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAM5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"mplex.d.ts","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAA;AAKjD,OAAO,EAAkC,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAM5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA0B3C,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;CAC7B;AAED,UAAU,oBAAqB,SAAQ,SAAS,EAAE,eAAe;CAAG;AAEpE,qBAAa,gBAAiB,YAAW,WAAW;IAC3C,QAAQ,SAAiB;IAEzB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACtB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAExC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+E;IACxG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8D;IACtF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;gBAEpC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,oBAAoB;IAkChE,IAAI,CAAE,UAAU,EAAE,UAAU;IAE5B;;OAEG;IACH,IAAI,OAAO,aAUV;IAED;;;OAGG;IACH,SAAS,CAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAUjC;;OAEG;IACH,KAAK,CAAE,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI;IAWrC;;OAEG;IACH,kBAAkB,CAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAMzD,UAAU,CAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;KAAE;IAuCrH;;;OAGG;IACH,WAAW;IA+BX;;;OAGG;IACH,aAAa;;;;;;;IAgBb,eAAe,CAAE,OAAO,EAAE,OAAO;CA6ElC"}
|
package/dist/src/mplex.js
CHANGED
@@ -10,8 +10,10 @@ import { toString as uint8ArrayToString } from 'uint8arrays';
|
|
10
10
|
import { trackedMap } from '@libp2p/tracked-map';
|
11
11
|
import { logger } from '@libp2p/logger';
|
12
12
|
import errCode from 'err-code';
|
13
|
+
import anySignal from 'any-signal';
|
13
14
|
const log = logger('libp2p:mplex');
|
14
|
-
const
|
15
|
+
const MAX_STREAMS_INBOUND_STREAMS_PER_CONNECTION = 1024;
|
16
|
+
const MAX_STREAMS_OUTBOUND_STREAMS_PER_CONNECTION = 1024;
|
15
17
|
const MAX_STREAM_BUFFER_SIZE = 1024 * 1024 * 4; // 4MB
|
16
18
|
function printMessage(msg) {
|
17
19
|
const output = {
|
@@ -52,9 +54,12 @@ export class MplexStreamMuxer {
|
|
52
54
|
const source = this._createSource();
|
53
55
|
this._source = source;
|
54
56
|
this.source = source;
|
57
|
+
/**
|
58
|
+
* Close controller
|
59
|
+
*/
|
60
|
+
this.closeController = new AbortController();
|
55
61
|
}
|
56
|
-
init(components) {
|
57
|
-
}
|
62
|
+
init(components) { }
|
58
63
|
/**
|
59
64
|
* Returns a Map of streams and their ids
|
60
65
|
*/
|
@@ -74,11 +79,28 @@ export class MplexStreamMuxer {
|
|
74
79
|
* provided, the id of the stream will be used.
|
75
80
|
*/
|
76
81
|
newStream(name) {
|
82
|
+
if (this.closeController.signal.aborted) {
|
83
|
+
throw new Error('Muxer already closed');
|
84
|
+
}
|
77
85
|
const id = this._streamId++;
|
78
86
|
name = name == null ? id.toString() : name.toString();
|
79
87
|
const registry = this._streams.initiators;
|
80
88
|
return this._newStream({ id, name, type: 'initiator', registry });
|
81
89
|
}
|
90
|
+
/**
|
91
|
+
* Close or abort all tracked streams and stop the muxer
|
92
|
+
*/
|
93
|
+
close(err) {
|
94
|
+
if (this.closeController.signal.aborted)
|
95
|
+
return;
|
96
|
+
if (err != null) {
|
97
|
+
this.streams.forEach(s => s.abort(err));
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
this.streams.forEach(s => s.close());
|
101
|
+
}
|
102
|
+
this.closeController.abort();
|
103
|
+
}
|
82
104
|
/**
|
83
105
|
* Called whenever an inbound stream is created
|
84
106
|
*/
|
@@ -88,19 +110,15 @@ export class MplexStreamMuxer {
|
|
88
110
|
return this._newStream({ id, name, type: 'receiver', registry });
|
89
111
|
}
|
90
112
|
_newStream(options) {
|
91
|
-
const maxStreams = this._init.maxStreamsPerConnection ?? MAX_STREAMS_PER_CONNECTION;
|
92
|
-
if ((this._streams.initiators.size + this._streams.receivers.size) === maxStreams) {
|
93
|
-
throw errCode(new Error('To many streams open'), 'ERR_TOO_MANY_STREAMS');
|
94
|
-
}
|
95
113
|
const { id, name, type, registry } = options;
|
96
114
|
log('new %s stream %s %s', type, id, name);
|
115
|
+
if (type === 'initiator' && this._streams.initiators.size === (this._init.maxOutboundStreams ?? MAX_STREAMS_OUTBOUND_STREAMS_PER_CONNECTION)) {
|
116
|
+
throw errCode(new Error('Too many outbound streams open'), 'ERR_TOO_MANY_OUTBOUND_STREAMS');
|
117
|
+
}
|
97
118
|
if (registry.has(id)) {
|
98
119
|
throw new Error(`${type} stream ${id} already exists!`);
|
99
120
|
}
|
100
121
|
const send = (msg) => {
|
101
|
-
if (!registry.has(id)) {
|
102
|
-
throw errCode(new Error('the stream is not in the muxer registry, it may have already been closed'), 'ERR_STREAM_DOESNT_EXIST');
|
103
|
-
}
|
104
122
|
if (log.enabled) {
|
105
123
|
log.trace('%s stream %s send', type, id, printMessage(msg));
|
106
124
|
}
|
@@ -110,7 +128,7 @@ export class MplexStreamMuxer {
|
|
110
128
|
this._source.push(msg);
|
111
129
|
};
|
112
130
|
const onEnd = () => {
|
113
|
-
log('%s stream %s
|
131
|
+
log('%s stream %s ended', type, id, name);
|
114
132
|
registry.delete(id);
|
115
133
|
if (this._init.onStreamEnd != null) {
|
116
134
|
this._init.onStreamEnd(stream);
|
@@ -126,9 +144,12 @@ export class MplexStreamMuxer {
|
|
126
144
|
*/
|
127
145
|
_createSink() {
|
128
146
|
const sink = async (source) => {
|
147
|
+
// see: https://github.com/jacobheun/any-signal/pull/18
|
148
|
+
const abortSignals = [this.closeController.signal];
|
129
149
|
if (this._init.signal != null) {
|
130
|
-
|
150
|
+
abortSignals.push(this._init.signal);
|
131
151
|
}
|
152
|
+
source = abortableSource(source, anySignal(abortSignals));
|
132
153
|
try {
|
133
154
|
await pipe(source, decode, restrictSize(this._init.maxMsgSize), async (source) => {
|
134
155
|
for await (const msg of source) {
|
@@ -150,24 +171,7 @@ export class MplexStreamMuxer {
|
|
150
171
|
*/
|
151
172
|
_createSource() {
|
152
173
|
const onEnd = (err) => {
|
153
|
-
|
154
|
-
// Abort all the things!
|
155
|
-
for (const s of initiators.values()) {
|
156
|
-
if (err != null) {
|
157
|
-
s.abort(err);
|
158
|
-
}
|
159
|
-
else {
|
160
|
-
s.close();
|
161
|
-
}
|
162
|
-
}
|
163
|
-
for (const s of receivers.values()) {
|
164
|
-
if (err != null) {
|
165
|
-
s.abort(err);
|
166
|
-
}
|
167
|
-
else {
|
168
|
-
s.close();
|
169
|
-
}
|
170
|
-
}
|
174
|
+
this.close(err);
|
171
175
|
};
|
172
176
|
const source = pushableV({
|
173
177
|
objectMode: true,
|
@@ -186,6 +190,16 @@ export class MplexStreamMuxer {
|
|
186
190
|
}
|
187
191
|
// Create a new stream?
|
188
192
|
if (message.type === MessageTypes.NEW_STREAM) {
|
193
|
+
if (this._streams.receivers.size === (this._init.maxInboundStreams ?? MAX_STREAMS_INBOUND_STREAMS_PER_CONNECTION)) {
|
194
|
+
log.error('Too many inbound streams open');
|
195
|
+
// not going to allow this stream, send the reset message manually
|
196
|
+
// instead of setting it up just to tear it down
|
197
|
+
this._source.push({
|
198
|
+
id,
|
199
|
+
type: MessageTypes.RESET_RECEIVER
|
200
|
+
});
|
201
|
+
return;
|
202
|
+
}
|
189
203
|
const stream = this._newReceiverStream({ id, name: uint8ArrayToString(message.data instanceof Uint8Array ? message.data : message.data.slice()) });
|
190
204
|
if (this._init.onIncomingStream != null) {
|
191
205
|
this._init.onIncomingStream(stream);
|
@@ -209,7 +223,7 @@ export class MplexStreamMuxer {
|
|
209
223
|
type: type === MessageTypes.MESSAGE_INITIATOR ? MessageTypes.RESET_RECEIVER : MessageTypes.RESET_INITIATOR
|
210
224
|
});
|
211
225
|
// Inform the stream consumer they are not fast enough
|
212
|
-
const error = errCode(new Error('Input buffer full - increase Mplex maxBufferSize to
|
226
|
+
const error = errCode(new Error('Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers'), 'ERR_STREAM_INPUT_BUFFER_FULL');
|
213
227
|
stream.abort(error);
|
214
228
|
return;
|
215
229
|
}
|
package/dist/src/mplex.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mplex.js","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAY,SAAS,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAW,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,OAAO,MAAM,UAAU,CAAA;
|
1
|
+
{"version":3,"file":"mplex.js","sourceRoot":"","sources":["../../src/mplex.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stream.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAQ7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,OAAO,GAAG,WAAW,
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAQ7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CA+M3D"}
|
package/dist/src/stream.js
CHANGED
@@ -35,7 +35,7 @@ export function createStream(options) {
|
|
35
35
|
endErr = err;
|
36
36
|
}
|
37
37
|
if (sinkEnded) {
|
38
|
-
stream.timeline.close = Date.now();
|
38
|
+
stream.stat.timeline.close = Date.now();
|
39
39
|
if (onEnd != null) {
|
40
40
|
onEnd(endErr);
|
41
41
|
}
|
@@ -172,7 +172,11 @@ export function createStream(options) {
|
|
172
172
|
source: pushable({
|
173
173
|
onEnd: onSourceEnd
|
174
174
|
}),
|
175
|
-
|
175
|
+
stat: {
|
176
|
+
direction: type === 'initiator' ? 'outbound' : 'inbound',
|
177
|
+
timeline
|
178
|
+
},
|
179
|
+
metadata: {},
|
176
180
|
id: externalId
|
177
181
|
};
|
178
182
|
return stream;
|
package/dist/src/stream.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAMvC,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAEzC,MAAM,sBAAsB,GAAG,wBAAwB,CAAA;AACvD,MAAM,sBAAsB,GAAG,wBAAwB,CAAA;AACvD,MAAM,oBAAoB,GAAG,sBAAsB,CAAA;AAWnD,MAAM,UAAU,YAAY,CAAE,OAAgB;IAC5C,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,UAAU,GAAG,YAAY,EAAE,GAAG,OAAO,CAAA;IAExF,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7C,MAAM,KAAK,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,CAAA;IACjF,MAAM,UAAU,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;IAC/D,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAEhD,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,MAAyB,CAAA;IAE7B,MAAM,QAAQ,
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@libp2p/mplex",
|
3
|
-
"version": "
|
3
|
+
"version": "4.0.1",
|
4
4
|
"description": "JavaScript implementation of https://github.com/libp2p/mplex",
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-mplex#readme",
|
@@ -35,7 +35,7 @@
|
|
35
35
|
],
|
36
36
|
"exports": {
|
37
37
|
".": {
|
38
|
-
"types": "./src/index.d.ts",
|
38
|
+
"types": "./dist/src/index.d.ts",
|
39
39
|
"import": "./dist/src/index.js"
|
40
40
|
}
|
41
41
|
},
|
@@ -141,11 +141,11 @@
|
|
141
141
|
"release": "aegir release"
|
142
142
|
},
|
143
143
|
"dependencies": {
|
144
|
-
"@libp2p/components": "^
|
145
|
-
"@libp2p/interface-connection": "^
|
146
|
-
"@libp2p/interface-stream-muxer": "^
|
147
|
-
"@libp2p/logger": "^
|
148
|
-
"@libp2p/tracked-map": "^
|
144
|
+
"@libp2p/components": "^2.0.0",
|
145
|
+
"@libp2p/interface-connection": "^2.0.0",
|
146
|
+
"@libp2p/interface-stream-muxer": "^2.0.0",
|
147
|
+
"@libp2p/logger": "^2.0.0",
|
148
|
+
"@libp2p/tracked-map": "^2.0.0",
|
149
149
|
"abortable-iterator": "^4.0.2",
|
150
150
|
"any-signal": "^3.0.0",
|
151
151
|
"err-code": "^3.0.1",
|
@@ -157,7 +157,7 @@
|
|
157
157
|
"varint": "^6.0.0"
|
158
158
|
},
|
159
159
|
"devDependencies": {
|
160
|
-
"@libp2p/interface-stream-muxer-compliance-tests": "^
|
160
|
+
"@libp2p/interface-stream-muxer-compliance-tests": "^3.0.1",
|
161
161
|
"@types/varint": "^6.0.0",
|
162
162
|
"aegir": "^37.2.0",
|
163
163
|
"cborg": "^1.8.1",
|
@@ -168,6 +168,10 @@
|
|
168
168
|
"it-foreach": "^0.1.1",
|
169
169
|
"it-map": "^1.0.6",
|
170
170
|
"p-defer": "^4.0.0",
|
171
|
-
"random-int": "^3.0.0"
|
171
|
+
"random-int": "^3.0.0",
|
172
|
+
"typescript": "^4.7.4"
|
173
|
+
},
|
174
|
+
"browser": {
|
175
|
+
"./dist/src/alloc-unsafe.js": "./dist/src/alloc-unsafe-browser.js"
|
172
176
|
}
|
173
177
|
}
|
package/src/encode.ts
CHANGED
@@ -1,17 +1,10 @@
|
|
1
|
+
import type { Source } from 'it-stream-types'
|
1
2
|
import varint from 'varint'
|
3
|
+
import { allocUnsafe } from './alloc-unsafe.js'
|
2
4
|
import { Message, MessageTypes } from './message-types.js'
|
3
|
-
import type { Source } from 'it-stream-types'
|
4
5
|
|
5
6
|
const POOL_SIZE = 10 * 1024
|
6
7
|
|
7
|
-
function allocUnsafe (size: number) {
|
8
|
-
if (globalThis.Buffer != null) {
|
9
|
-
return Buffer.allocUnsafe(size)
|
10
|
-
}
|
11
|
-
|
12
|
-
return new Uint8Array(size)
|
13
|
-
}
|
14
|
-
|
15
8
|
class Encoder {
|
16
9
|
private _pool: Uint8Array
|
17
10
|
private _poolOffset: number
|
package/src/index.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Components, Initializable } from '@libp2p/components'
|
2
|
-
import type { StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer'
|
2
|
+
import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer'
|
3
3
|
import { MplexStreamMuxer } from './mplex.js'
|
4
4
|
|
5
5
|
export interface MplexInit {
|
@@ -14,7 +14,13 @@ export interface MplexInit {
|
|
14
14
|
* The maximum number of multiplexed streams that can be open at any
|
15
15
|
* one time. An attempt to open more than this will throw.
|
16
16
|
*/
|
17
|
-
|
17
|
+
maxInboundStreams?: number
|
18
|
+
|
19
|
+
/**
|
20
|
+
* The maximum number of multiplexed streams that can be open at any
|
21
|
+
* one time. An attempt to open more than this will throw.
|
22
|
+
*/
|
23
|
+
maxOutboundStreams?: number
|
18
24
|
|
19
25
|
/**
|
20
26
|
* Incoming stream messages are buffered until processed by the stream
|
@@ -33,11 +39,11 @@ export class Mplex implements StreamMuxerFactory, Initializable {
|
|
33
39
|
this._init = init
|
34
40
|
}
|
35
41
|
|
36
|
-
init (components: Components) {
|
42
|
+
init (components: Components): void {
|
37
43
|
this.components = components
|
38
44
|
}
|
39
45
|
|
40
|
-
createStreamMuxer (init: StreamMuxerInit = {}) {
|
46
|
+
createStreamMuxer (init: StreamMuxerInit = {}): StreamMuxer {
|
41
47
|
return new MplexStreamMuxer(this.components, {
|
42
48
|
...init,
|
43
49
|
...this._init
|
package/src/mplex.ts
CHANGED
@@ -15,10 +15,12 @@ import type { Sink } from 'it-stream-types'
|
|
15
15
|
import type { StreamMuxer, StreamMuxerInit } from '@libp2p/interface-stream-muxer'
|
16
16
|
import type { Stream } from '@libp2p/interface-connection'
|
17
17
|
import type { MplexInit } from './index.js'
|
18
|
+
import anySignal from 'any-signal'
|
18
19
|
|
19
20
|
const log = logger('libp2p:mplex')
|
20
21
|
|
21
|
-
const
|
22
|
+
const MAX_STREAMS_INBOUND_STREAMS_PER_CONNECTION = 1024
|
23
|
+
const MAX_STREAMS_OUTBOUND_STREAMS_PER_CONNECTION = 1024
|
22
24
|
const MAX_STREAM_BUFFER_SIZE = 1024 * 1024 * 4 // 4MB
|
23
25
|
|
24
26
|
function printMessage (msg: Message) {
|
@@ -54,6 +56,7 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
54
56
|
private readonly _streams: { initiators: Map<number, MplexStream>, receivers: Map<number, MplexStream> }
|
55
57
|
private readonly _init: MplexStreamMuxerInit
|
56
58
|
private readonly _source: { push: (val: Message) => void, end: (err?: Error) => void }
|
59
|
+
private readonly closeController: AbortController
|
57
60
|
|
58
61
|
constructor (components: Components, init?: MplexStreamMuxerInit) {
|
59
62
|
init = init ?? {}
|
@@ -82,12 +85,15 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
82
85
|
const source = this._createSource()
|
83
86
|
this._source = source
|
84
87
|
this.source = source
|
85
|
-
}
|
86
|
-
|
87
|
-
init (components: Components) {
|
88
88
|
|
89
|
+
/**
|
90
|
+
* Close controller
|
91
|
+
*/
|
92
|
+
this.closeController = new AbortController()
|
89
93
|
}
|
90
94
|
|
95
|
+
init (components: Components) {}
|
96
|
+
|
91
97
|
/**
|
92
98
|
* Returns a Map of streams and their ids
|
93
99
|
*/
|
@@ -108,12 +114,29 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
108
114
|
* provided, the id of the stream will be used.
|
109
115
|
*/
|
110
116
|
newStream (name?: string): Stream {
|
117
|
+
if (this.closeController.signal.aborted) {
|
118
|
+
throw new Error('Muxer already closed')
|
119
|
+
}
|
111
120
|
const id = this._streamId++
|
112
121
|
name = name == null ? id.toString() : name.toString()
|
113
122
|
const registry = this._streams.initiators
|
114
123
|
return this._newStream({ id, name, type: 'initiator', registry })
|
115
124
|
}
|
116
125
|
|
126
|
+
/**
|
127
|
+
* Close or abort all tracked streams and stop the muxer
|
128
|
+
*/
|
129
|
+
close (err?: Error | undefined): void {
|
130
|
+
if (this.closeController.signal.aborted) return
|
131
|
+
|
132
|
+
if (err != null) {
|
133
|
+
this.streams.forEach(s => s.abort(err))
|
134
|
+
} else {
|
135
|
+
this.streams.forEach(s => s.close())
|
136
|
+
}
|
137
|
+
this.closeController.abort()
|
138
|
+
}
|
139
|
+
|
117
140
|
/**
|
118
141
|
* Called whenever an inbound stream is created
|
119
142
|
*/
|
@@ -124,25 +147,19 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
124
147
|
}
|
125
148
|
|
126
149
|
_newStream (options: { id: number, name: string, type: 'initiator' | 'receiver', registry: Map<number, MplexStream> }) {
|
127
|
-
const maxStreams = this._init.maxStreamsPerConnection ?? MAX_STREAMS_PER_CONNECTION
|
128
|
-
|
129
|
-
if ((this._streams.initiators.size + this._streams.receivers.size) === maxStreams) {
|
130
|
-
throw errCode(new Error('To many streams open'), 'ERR_TOO_MANY_STREAMS')
|
131
|
-
}
|
132
|
-
|
133
150
|
const { id, name, type, registry } = options
|
134
151
|
|
135
152
|
log('new %s stream %s %s', type, id, name)
|
136
153
|
|
154
|
+
if (type === 'initiator' && this._streams.initiators.size === (this._init.maxOutboundStreams ?? MAX_STREAMS_OUTBOUND_STREAMS_PER_CONNECTION)) {
|
155
|
+
throw errCode(new Error('Too many outbound streams open'), 'ERR_TOO_MANY_OUTBOUND_STREAMS')
|
156
|
+
}
|
157
|
+
|
137
158
|
if (registry.has(id)) {
|
138
159
|
throw new Error(`${type} stream ${id} already exists!`)
|
139
160
|
}
|
140
161
|
|
141
162
|
const send = (msg: Message) => {
|
142
|
-
if (!registry.has(id)) {
|
143
|
-
throw errCode(new Error('the stream is not in the muxer registry, it may have already been closed'), 'ERR_STREAM_DOESNT_EXIST')
|
144
|
-
}
|
145
|
-
|
146
163
|
if (log.enabled) {
|
147
164
|
log.trace('%s stream %s send', type, id, printMessage(msg))
|
148
165
|
}
|
@@ -155,7 +172,7 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
155
172
|
}
|
156
173
|
|
157
174
|
const onEnd = () => {
|
158
|
-
log('%s stream %s
|
175
|
+
log('%s stream %s ended', type, id, name)
|
159
176
|
registry.delete(id)
|
160
177
|
|
161
178
|
if (this._init.onStreamEnd != null) {
|
@@ -174,9 +191,12 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
174
191
|
*/
|
175
192
|
_createSink () {
|
176
193
|
const sink: Sink<Uint8Array> = async source => {
|
194
|
+
// see: https://github.com/jacobheun/any-signal/pull/18
|
195
|
+
const abortSignals = [this.closeController.signal]
|
177
196
|
if (this._init.signal != null) {
|
178
|
-
|
197
|
+
abortSignals.push(this._init.signal)
|
179
198
|
}
|
199
|
+
source = abortableSource(source, anySignal(abortSignals))
|
180
200
|
|
181
201
|
try {
|
182
202
|
await pipe(
|
@@ -206,22 +226,7 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
206
226
|
*/
|
207
227
|
_createSource () {
|
208
228
|
const onEnd = (err?: Error) => {
|
209
|
-
|
210
|
-
// Abort all the things!
|
211
|
-
for (const s of initiators.values()) {
|
212
|
-
if (err != null) {
|
213
|
-
s.abort(err)
|
214
|
-
} else {
|
215
|
-
s.close()
|
216
|
-
}
|
217
|
-
}
|
218
|
-
for (const s of receivers.values()) {
|
219
|
-
if (err != null) {
|
220
|
-
s.abort(err)
|
221
|
-
} else {
|
222
|
-
s.close()
|
223
|
-
}
|
224
|
-
}
|
229
|
+
this.close(err)
|
225
230
|
}
|
226
231
|
const source = pushableV<Message>({
|
227
232
|
objectMode: true,
|
@@ -244,6 +249,20 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
244
249
|
|
245
250
|
// Create a new stream?
|
246
251
|
if (message.type === MessageTypes.NEW_STREAM) {
|
252
|
+
if (this._streams.receivers.size === (this._init.maxInboundStreams ?? MAX_STREAMS_INBOUND_STREAMS_PER_CONNECTION)) {
|
253
|
+
log.error('Too many inbound streams open')
|
254
|
+
|
255
|
+
// not going to allow this stream, send the reset message manually
|
256
|
+
// instead of setting it up just to tear it down
|
257
|
+
|
258
|
+
this._source.push({
|
259
|
+
id,
|
260
|
+
type: MessageTypes.RESET_RECEIVER
|
261
|
+
})
|
262
|
+
|
263
|
+
return
|
264
|
+
}
|
265
|
+
|
247
266
|
const stream = this._newReceiverStream({ id, name: uint8ArrayToString(message.data instanceof Uint8Array ? message.data : message.data.slice()) })
|
248
267
|
|
249
268
|
if (this._init.onIncomingStream != null) {
|
@@ -275,7 +294,7 @@ export class MplexStreamMuxer implements StreamMuxer {
|
|
275
294
|
})
|
276
295
|
|
277
296
|
// Inform the stream consumer they are not fast enough
|
278
|
-
const error = errCode(new Error('Input buffer full - increase Mplex maxBufferSize to
|
297
|
+
const error = errCode(new Error('Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers'), 'ERR_STREAM_INPUT_BUFFER_FULL')
|
279
298
|
stream.abort(error)
|
280
299
|
|
281
300
|
return
|
package/src/stream.ts
CHANGED
@@ -8,7 +8,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
8
8
|
import { Uint8ArrayList } from 'uint8arraylist'
|
9
9
|
import { logger } from '@libp2p/logger'
|
10
10
|
import type { Message } from './message-types.js'
|
11
|
-
import type {
|
11
|
+
import type { StreamTimeline } from '@libp2p/interface-connection'
|
12
12
|
import type { Source } from 'it-stream-types'
|
13
13
|
import type { MplexStream } from './mplex.js'
|
14
14
|
|
@@ -41,7 +41,7 @@ export function createStream (options: Options): MplexStream {
|
|
41
41
|
let sinkEnded = false
|
42
42
|
let endErr: Error | undefined
|
43
43
|
|
44
|
-
const timeline:
|
44
|
+
const timeline: StreamTimeline = {
|
45
45
|
open: Date.now()
|
46
46
|
}
|
47
47
|
|
@@ -58,7 +58,7 @@ export function createStream (options: Options): MplexStream {
|
|
58
58
|
}
|
59
59
|
|
60
60
|
if (sinkEnded) {
|
61
|
-
stream.timeline.close = Date.now()
|
61
|
+
stream.stat.timeline.close = Date.now()
|
62
62
|
|
63
63
|
if (onEnd != null) {
|
64
64
|
onEnd(endErr)
|
@@ -223,7 +223,12 @@ export function createStream (options: Options): MplexStream {
|
|
223
223
|
onEnd: onSourceEnd
|
224
224
|
}),
|
225
225
|
|
226
|
-
|
226
|
+
stat: {
|
227
|
+
direction: type === 'initiator' ? 'outbound' : 'inbound',
|
228
|
+
timeline
|
229
|
+
},
|
230
|
+
|
231
|
+
metadata: {},
|
227
232
|
|
228
233
|
id: externalId
|
229
234
|
}
|