@matter/protocol 0.15.0-alpha.0-20250625-4a4b1be1b → 0.15.0-alpha.0-20250626-fc3a84ce9
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/cjs/cluster/client/ClusterClient.d.ts.map +1 -1
- package/dist/cjs/cluster/client/ClusterClient.js +7 -1
- package/dist/cjs/cluster/client/ClusterClient.js.map +1 -1
- package/dist/cjs/cluster/client/ClusterClientTypes.d.ts +10 -0
- package/dist/cjs/cluster/client/ClusterClientTypes.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.d.ts +8 -1
- package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.js +15 -10
- package/dist/cjs/interaction/InteractionClient.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +0 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +0 -3
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.d.ts +1 -1
- package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.js +1 -1
- package/dist/cjs/peer/ControllerCommissioner.d.ts +3 -2
- package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +6 -5
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +81 -52
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts +4 -3
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +9 -8
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/protocol/ChannelManager.d.ts +2 -2
- package/dist/cjs/protocol/ChannelManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ChannelManager.js +4 -4
- package/dist/cjs/protocol/ChannelManager.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts +5 -24
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +12 -55
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.d.ts +10 -6
- package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.js +12 -1
- package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
- package/dist/cjs/protocol/MessageChannel.d.ts +52 -0
- package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -0
- package/dist/cjs/protocol/MessageChannel.js +130 -0
- package/dist/cjs/protocol/MessageChannel.js.map +6 -0
- package/dist/cjs/protocol/MessageExchange.d.ts +5 -5
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +34 -78
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/cjs/protocol/index.d.ts +1 -0
- package/dist/cjs/protocol/index.d.ts.map +1 -1
- package/dist/cjs/protocol/index.js +1 -0
- package/dist/cjs/protocol/index.js.map +1 -1
- package/dist/esm/cluster/client/ClusterClient.d.ts.map +1 -1
- package/dist/esm/cluster/client/ClusterClient.js +7 -1
- package/dist/esm/cluster/client/ClusterClient.js.map +1 -1
- package/dist/esm/cluster/client/ClusterClientTypes.d.ts +10 -0
- package/dist/esm/cluster/client/ClusterClientTypes.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.d.ts +8 -1
- package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.js +15 -10
- package/dist/esm/interaction/InteractionClient.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +0 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +0 -3
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.d.ts +1 -1
- package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.js +1 -1
- package/dist/esm/peer/ControllerCommissioner.d.ts +3 -2
- package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +4 -3
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +81 -52
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts +4 -3
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +5 -4
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/protocol/ChannelManager.d.ts +2 -2
- package/dist/esm/protocol/ChannelManager.d.ts.map +1 -1
- package/dist/esm/protocol/ChannelManager.js +2 -2
- package/dist/esm/protocol/ChannelManager.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts +5 -24
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +13 -56
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.d.ts +10 -6
- package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.js +12 -1
- package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
- package/dist/esm/protocol/MessageChannel.d.ts +52 -0
- package/dist/esm/protocol/MessageChannel.d.ts.map +1 -0
- package/dist/esm/protocol/MessageChannel.js +110 -0
- package/dist/esm/protocol/MessageChannel.js.map +6 -0
- package/dist/esm/protocol/MessageExchange.d.ts +5 -5
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +39 -83
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/protocol/index.d.ts +1 -0
- package/dist/esm/protocol/index.d.ts.map +1 -1
- package/dist/esm/protocol/index.js +1 -0
- package/dist/esm/protocol/index.js.map +1 -1
- package/package.json +6 -6
- package/src/cluster/client/ClusterClient.ts +8 -1
- package/src/cluster/client/ClusterClientTypes.ts +12 -0
- package/src/interaction/InteractionClient.ts +29 -16
- package/src/interaction/InteractionMessenger.ts +0 -4
- package/src/interaction/SubscriptionClient.ts +2 -2
- package/src/peer/ControllerCommissioner.ts +4 -3
- package/src/peer/ControllerCommissioningFlow.ts +96 -57
- package/src/peer/PeerSet.ts +5 -4
- package/src/protocol/ChannelManager.ts +3 -3
- package/src/protocol/ExchangeManager.ts +18 -67
- package/src/protocol/ExchangeProvider.ts +20 -6
- package/src/protocol/MessageChannel.ts +163 -0
- package/src/protocol/MessageExchange.ts +40 -119
- package/src/protocol/index.ts +1 -0
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { MessageCodec, SessionType } from "#codec/MessageCodec.js";
|
|
6
7
|
import {
|
|
7
8
|
Crypto,
|
|
8
9
|
Diagnostic,
|
|
@@ -17,67 +18,18 @@ import {
|
|
|
17
18
|
UdpInterface,
|
|
18
19
|
UnexpectedDataError
|
|
19
20
|
} from "#general";
|
|
21
|
+
import { SecureChannelMessenger } from "#securechannel/SecureChannelMessenger.js";
|
|
22
|
+
import { SecureChannelProtocol } from "#securechannel/SecureChannelProtocol.js";
|
|
23
|
+
import { NodeSession } from "#session/NodeSession.js";
|
|
24
|
+
import { SessionManager, UNICAST_UNSECURE_SESSION_ID } from "#session/SessionManager.js";
|
|
20
25
|
import { NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureMessageType } from "#types";
|
|
21
|
-
import { MessageCodec, SessionType } from "../codec/MessageCodec.js";
|
|
22
|
-
import { SecureChannelMessenger } from "../securechannel/SecureChannelMessenger.js";
|
|
23
|
-
import { SecureChannelProtocol } from "../securechannel/SecureChannelProtocol.js";
|
|
24
|
-
import { NodeSession } from "../session/NodeSession.js";
|
|
25
|
-
import { SessionManager, UNICAST_UNSECURE_SESSION_ID } from "../session/SessionManager.js";
|
|
26
26
|
import { ChannelManager } from "./ChannelManager.js";
|
|
27
|
-
import { MessageExchange } from "./MessageExchange.js";
|
|
27
|
+
import { DEFAULT_EXPECTED_PROCESSING_TIME_MS, MessageExchange } from "./MessageExchange.js";
|
|
28
28
|
import { DuplicateMessageError } from "./MessageReceptionState.js";
|
|
29
29
|
const logger = Logger.get("ExchangeManager");
|
|
30
30
|
const MAXIMUM_CONCURRENT_EXCHANGES_PER_SESSION = 5;
|
|
31
31
|
class ChannelNotConnectedError extends MatterError {
|
|
32
32
|
}
|
|
33
|
-
class MessageChannel {
|
|
34
|
-
constructor(channel, session, closeCallback) {
|
|
35
|
-
this.channel = channel;
|
|
36
|
-
this.session = session;
|
|
37
|
-
this.#closeCallback = closeCallback;
|
|
38
|
-
}
|
|
39
|
-
closed = false;
|
|
40
|
-
#closeCallback;
|
|
41
|
-
set closeCallback(callback) {
|
|
42
|
-
this.#closeCallback = callback;
|
|
43
|
-
}
|
|
44
|
-
/** Is the underlying transport reliable? */
|
|
45
|
-
get isReliable() {
|
|
46
|
-
return this.channel.isReliable;
|
|
47
|
-
}
|
|
48
|
-
get type() {
|
|
49
|
-
return this.channel.type;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Max Payload size of the exchange which bases on the maximum payload size of the channel. The full encoded matter
|
|
53
|
-
* message payload sent here can be as huge as allowed by the channel.
|
|
54
|
-
*/
|
|
55
|
-
get maxPayloadSize() {
|
|
56
|
-
return this.channel.maxPayloadSize;
|
|
57
|
-
}
|
|
58
|
-
async send(message, logContext) {
|
|
59
|
-
logger.debug("Message \xBB", MessageCodec.messageDiagnostics(message, logContext));
|
|
60
|
-
const packet = this.session.encode(message);
|
|
61
|
-
const bytes = MessageCodec.encodePacket(packet);
|
|
62
|
-
if (bytes.length > this.maxPayloadSize) {
|
|
63
|
-
logger.warn(
|
|
64
|
-
`Matter message to send to ${this.name} is ${bytes.length}bytes long, which is larger than the maximum allowed size of ${this.maxPayloadSize}. This only works if both nodes support it.`
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
return await this.channel.send(bytes);
|
|
68
|
-
}
|
|
69
|
-
get name() {
|
|
70
|
-
return `${this.channel.name} on session ${this.session.name}`;
|
|
71
|
-
}
|
|
72
|
-
async close() {
|
|
73
|
-
const wasAlreadyClosed = this.closed;
|
|
74
|
-
this.closed = true;
|
|
75
|
-
await this.channel.close();
|
|
76
|
-
if (!wasAlreadyClosed) {
|
|
77
|
-
await this.#closeCallback?.();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
33
|
class ExchangeManager {
|
|
82
34
|
#transportInterfaces;
|
|
83
35
|
#sessionManager;
|
|
@@ -359,6 +311,12 @@ class ExchangeManager {
|
|
|
359
311
|
logger.debug(`Closing oldest exchange ${exchangeToClose.id} for session ${sessionId}`);
|
|
360
312
|
exchangeToClose.close().catch((error) => logger.error("Error closing exchange", error));
|
|
361
313
|
}
|
|
314
|
+
calculateMaximumPeerResponseTimeMsFor(channel, expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
315
|
+
return channel.calculateMaximumPeerResponseTimeMs(
|
|
316
|
+
this.#sessionManager.sessionParameters,
|
|
317
|
+
expectedProcessingTimeMs
|
|
318
|
+
);
|
|
319
|
+
}
|
|
362
320
|
#messageExchangeContextFor(channel) {
|
|
363
321
|
return {
|
|
364
322
|
channel,
|
|
@@ -419,7 +377,6 @@ class ExchangeCounter {
|
|
|
419
377
|
export {
|
|
420
378
|
ChannelNotConnectedError,
|
|
421
379
|
ExchangeCounter,
|
|
422
|
-
ExchangeManager
|
|
423
|
-
MessageChannel
|
|
380
|
+
ExchangeManager
|
|
424
381
|
};
|
|
425
382
|
//# sourceMappingURL=ExchangeManager.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/protocol/ExchangeManager.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EAEI;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACG;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["exchange"]
|
|
6
6
|
}
|
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { ChannelType, Observable } from "#general";
|
|
7
|
-
import { PeerAddress } from "
|
|
8
|
-
import { ChannelManager } from "
|
|
9
|
-
import { ExchangeManager
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
7
|
+
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
8
|
+
import { ChannelManager } from "#protocol/ChannelManager.js";
|
|
9
|
+
import { ExchangeManager } from "#protocol/ExchangeManager.js";
|
|
10
|
+
import { MessageChannel } from "#protocol/MessageChannel.js";
|
|
11
|
+
import { MessageExchange } from "#protocol/MessageExchange.js";
|
|
12
|
+
import { ProtocolHandler } from "#protocol/ProtocolHandler.js";
|
|
13
|
+
import { Session } from "#session/Session.js";
|
|
13
14
|
/**
|
|
14
15
|
* Interface for obtaining an exchange with a specific peer.
|
|
15
16
|
*/
|
|
@@ -20,6 +21,7 @@ export declare abstract class ExchangeProvider {
|
|
|
20
21
|
hasProtocolHandler(protocolId: number): boolean;
|
|
21
22
|
getProtocolHandler(protocolId: number): ProtocolHandler | undefined;
|
|
22
23
|
addProtocolHandler(handler: ProtocolHandler): void;
|
|
24
|
+
abstract maximumPeerResponseTimeMs(expectedProcessingTimeMs?: number): number;
|
|
23
25
|
abstract initiateExchange(): Promise<MessageExchange>;
|
|
24
26
|
abstract reconnectChannel(): Promise<boolean>;
|
|
25
27
|
abstract session: Session;
|
|
@@ -36,6 +38,7 @@ export declare class DedicatedChannelExchangeProvider extends ExchangeProvider {
|
|
|
36
38
|
reconnectChannel(): Promise<boolean>;
|
|
37
39
|
get session(): Session;
|
|
38
40
|
get channelType(): ChannelType;
|
|
41
|
+
maximumPeerResponseTimeMs(expectedProcessingTimeMs?: number): number;
|
|
39
42
|
}
|
|
40
43
|
/**
|
|
41
44
|
* Manages peer exchange that will reestablish automatically in the case of communication failure.
|
|
@@ -50,5 +53,6 @@ export declare class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
|
50
53
|
reconnectChannel(): Promise<boolean>;
|
|
51
54
|
get session(): Session;
|
|
52
55
|
get channelType(): ChannelType;
|
|
56
|
+
maximumPeerResponseTimeMs(expectedProcessingTimeMs?: number): number;
|
|
53
57
|
}
|
|
54
58
|
//# sourceMappingURL=ExchangeProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExchangeProvider.d.ts","sourceRoot":"","sources":["../../../src/protocol/ExchangeProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ExchangeProvider.d.ts","sourceRoot":"","sources":["../../../src/protocol/ExchangeProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAA4B,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C;;GAEG;AACH,8BAAsB,gBAAgB;IAGtB,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe;IAF/D,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;gBAEd,eAAe,EAAE,eAAe;IAE/D,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,kBAAkB,CAAC,OAAO,EAAE,eAAe;IAI3C,QAAQ,CAAC,yBAAyB,CAAC,wBAAwB,CAAC,EAAE,MAAM,GAAG,MAAM;IAC7E,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IACrD,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,gBAAgB;;IAElE,QAAQ,CAAC,iBAAiB,SAAS;gBAEvB,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc;IAK/D,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IAI5C,gBAAgB;IAItB,IAAI,OAAO,YAEV;IAED,IAAI,WAAW,gBAEd;IAED,yBAAyB,CAAC,wBAAwB,SAAsC;CAG3F;AAED;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,gBAAgB;;IAQ3D,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc;IAPrD,QAAQ,CAAC,iBAAiB,QAAQ;gBAM9B,eAAe,EAAE,eAAe,EACb,cAAc,EAAE,cAAc,EACjD,OAAO,EAAE,WAAW,EACpB,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAY7C,IAAI,cAAc,6BAEjB;IAEK,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IAU5C,gBAAgB;IAMtB,IAAI,OAAO,YAKV;IAED,IAAI,WAAW,gBAKd;IAED,yBAAyB,CAAC,wBAAwB,SAAsC;CAO3F"}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Observable } from "#general";
|
|
7
|
+
import { ChannelNotConnectedError } from "#protocol/ExchangeManager.js";
|
|
8
|
+
import { DEFAULT_EXPECTED_PROCESSING_TIME_MS } from "#protocol/MessageExchange.js";
|
|
7
9
|
import { INTERACTION_PROTOCOL_ID } from "#types";
|
|
8
|
-
import { ChannelNotConnectedError } from "../protocol/ExchangeManager.js";
|
|
9
10
|
class ExchangeProvider {
|
|
10
11
|
constructor(exchangeManager) {
|
|
11
12
|
this.exchangeManager = exchangeManager;
|
|
@@ -39,6 +40,9 @@ class DedicatedChannelExchangeProvider extends ExchangeProvider {
|
|
|
39
40
|
get channelType() {
|
|
40
41
|
return this.#channel.type;
|
|
41
42
|
}
|
|
43
|
+
maximumPeerResponseTimeMs(expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
44
|
+
return this.exchangeManager.calculateMaximumPeerResponseTimeMsFor(this.#channel, expectedProcessingTimeMs);
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
47
|
class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
44
48
|
constructor(exchangeManager, channelManager, address, reconnectChannelFunc) {
|
|
@@ -85,6 +89,13 @@ class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
|
85
89
|
}
|
|
86
90
|
return this.channelManager.getChannel(this.#address).type;
|
|
87
91
|
}
|
|
92
|
+
maximumPeerResponseTimeMs(expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
93
|
+
const channel = this.channelManager.getChannel(this.#address);
|
|
94
|
+
if (!channel) {
|
|
95
|
+
throw new ChannelNotConnectedError("Channel not connected");
|
|
96
|
+
}
|
|
97
|
+
return this.exchangeManager.calculateMaximumPeerResponseTimeMsFor(channel, expectedProcessingTimeMs);
|
|
98
|
+
}
|
|
88
99
|
}
|
|
89
100
|
export {
|
|
90
101
|
DedicatedChannelExchangeProvider,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/protocol/ExchangeProvider.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAsB,kBAAkB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["address"]
|
|
6
6
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Message } from "#codec/index.js";
|
|
2
|
+
import { Channel } from "#general";
|
|
3
|
+
import { ExchangeLogContext } from "#protocol/MessageExchange.js";
|
|
4
|
+
import { Session, SessionParameters } from "#session/index.js";
|
|
5
|
+
export declare namespace MRP {
|
|
6
|
+
/**
|
|
7
|
+
* The maximum number of transmission attempts for a given reliable message. The sender MAY choose this value as it
|
|
8
|
+
* sees fit.
|
|
9
|
+
*/
|
|
10
|
+
const MAX_TRANSMISSIONS = 5;
|
|
11
|
+
/** The base number for the exponential backoff equation. */
|
|
12
|
+
const BACKOFF_BASE = 1.6;
|
|
13
|
+
/** The scaler for random jitter in the backoff equation. */
|
|
14
|
+
const BACKOFF_JITTER = 0.25;
|
|
15
|
+
/** The scaler margin increase to backoff over the peer sleepy interval. */
|
|
16
|
+
const BACKOFF_MARGIN = 1.1;
|
|
17
|
+
/** The number of retransmissions before transitioning from linear to exponential backoff. */
|
|
18
|
+
const BACKOFF_THRESHOLD = 1;
|
|
19
|
+
/** @see {@link MatterSpecification.v12.Core}, section 4.11.8 */
|
|
20
|
+
const STANDALONE_ACK_TIMEOUT_MS = 200;
|
|
21
|
+
}
|
|
22
|
+
export declare class MessageChannel implements Channel<Message> {
|
|
23
|
+
#private;
|
|
24
|
+
readonly channel: Channel<Uint8Array>;
|
|
25
|
+
readonly session: Session;
|
|
26
|
+
closed: boolean;
|
|
27
|
+
constructor(channel: Channel<Uint8Array>, session: Session, closeCallback?: () => Promise<void>);
|
|
28
|
+
set closeCallback(callback: () => Promise<void>);
|
|
29
|
+
get usesMrp(): boolean;
|
|
30
|
+
/** Is the underlying transport reliable? */
|
|
31
|
+
get isReliable(): boolean;
|
|
32
|
+
get type(): import("#general").ChannelType;
|
|
33
|
+
/**
|
|
34
|
+
* Max Payload size of the exchange which bases on the maximum payload size of the channel. The full encoded matter
|
|
35
|
+
* message payload sent here can be as huge as allowed by the channel.
|
|
36
|
+
*/
|
|
37
|
+
get maxPayloadSize(): number;
|
|
38
|
+
send(message: Message, logContext?: ExchangeLogContext): Promise<void>;
|
|
39
|
+
get name(): string;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
calculateMaximumPeerResponseTimeMs(sessionParameters: SessionParameters, expectedProcessingTimeMs?: number): number;
|
|
42
|
+
/**
|
|
43
|
+
* Calculates the backoff time for a resubmission based on the current retransmission count.
|
|
44
|
+
* If no session parameters are provided, the parameters of the current session are used.
|
|
45
|
+
* If session parameters are provided, the method can be used to calculate the maximum backoff time for the other
|
|
46
|
+
* side of the exchange.
|
|
47
|
+
*
|
|
48
|
+
* @see {@link MatterSpecification.v10.Core}, section 4.11.2.1
|
|
49
|
+
*/
|
|
50
|
+
getMrpResubmissionBackOffTime(retransmissionCount: number, sessionParameters?: SessionParameters): number;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=MessageChannel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageChannel.d.ts","sourceRoot":"","sources":["../../../src/protocol/MessageChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,EAA2B,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAuC,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAU/D,yBAAiB,GAAG,CAAC;IACjB;;;OAGG;IACI,MAAM,iBAAiB,IAAI,CAAC;IAEnC,4DAA4D;IACrD,MAAM,YAAY,MAAM,CAAC;IAEhC,4DAA4D;IACrD,MAAM,cAAc,OAAO,CAAC;IAEnC,2EAA2E;IACpE,MAAM,cAAc,MAAM,CAAC;IAElC,6FAA6F;IACtF,MAAM,iBAAiB,IAAI,CAAC;IAEnC,gEAAgE;IACzD,MAAM,yBAAyB,MAAM,CAAC;CAChD;AAED,qBAAa,cAAe,YAAW,OAAO,CAAC,OAAO,CAAC;;IAM/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO;IANtB,MAAM,UAAS;gBAKT,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAC5B,OAAO,EAAE,OAAO,EACzB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAKvC,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAE9C;IAED,IAAI,OAAO,YAEV;IAED,4CAA4C;IAC5C,IAAI,UAAU,YAEb;IAED,IAAI,IAAI,mCAEP;IAED;;;OAGG;IACH,IAAI,cAAc,WAEjB;IAEK,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,kBAAkB;IAa5D,IAAI,IAAI,WAEP;IAEK,KAAK;IASX,kCAAkC,CAC9B,iBAAiB,EAAE,iBAAiB,EACpC,wBAAwB,SAAsC;IAyBlE;;;;;;;OAOG;IACH,6BAA6B,CAAC,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;CA2BnG"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { MessageCodec } from "#codec/index.js";
|
|
2
|
+
import { Logger, MatterFlowError } from "#general";
|
|
3
|
+
import { DEFAULT_EXPECTED_PROCESSING_TIME_MS } from "#protocol/MessageExchange.js";
|
|
4
|
+
const logger = new Logger("MessageChannel");
|
|
5
|
+
const PEER_RESPONSE_TIME_BUFFER_MS = 5e3;
|
|
6
|
+
var MRP;
|
|
7
|
+
((MRP2) => {
|
|
8
|
+
MRP2.MAX_TRANSMISSIONS = 5;
|
|
9
|
+
MRP2.BACKOFF_BASE = 1.6;
|
|
10
|
+
MRP2.BACKOFF_JITTER = 0.25;
|
|
11
|
+
MRP2.BACKOFF_MARGIN = 1.1;
|
|
12
|
+
MRP2.BACKOFF_THRESHOLD = 1;
|
|
13
|
+
MRP2.STANDALONE_ACK_TIMEOUT_MS = 200;
|
|
14
|
+
})(MRP || (MRP = {}));
|
|
15
|
+
class MessageChannel {
|
|
16
|
+
// When the session is supporting MRP and the channel is not reliable, use MRP handling
|
|
17
|
+
constructor(channel, session, closeCallback) {
|
|
18
|
+
this.channel = channel;
|
|
19
|
+
this.session = session;
|
|
20
|
+
this.#closeCallback = closeCallback;
|
|
21
|
+
}
|
|
22
|
+
closed = false;
|
|
23
|
+
#closeCallback;
|
|
24
|
+
set closeCallback(callback) {
|
|
25
|
+
this.#closeCallback = callback;
|
|
26
|
+
}
|
|
27
|
+
get usesMrp() {
|
|
28
|
+
return this.session.supportsMRP && !this.channel.isReliable;
|
|
29
|
+
}
|
|
30
|
+
/** Is the underlying transport reliable? */
|
|
31
|
+
get isReliable() {
|
|
32
|
+
return this.channel.isReliable;
|
|
33
|
+
}
|
|
34
|
+
get type() {
|
|
35
|
+
return this.channel.type;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Max Payload size of the exchange which bases on the maximum payload size of the channel. The full encoded matter
|
|
39
|
+
* message payload sent here can be as huge as allowed by the channel.
|
|
40
|
+
*/
|
|
41
|
+
get maxPayloadSize() {
|
|
42
|
+
return this.channel.maxPayloadSize;
|
|
43
|
+
}
|
|
44
|
+
async send(message, logContext) {
|
|
45
|
+
logger.debug("Message \xBB", MessageCodec.messageDiagnostics(message, logContext));
|
|
46
|
+
const packet = this.session.encode(message);
|
|
47
|
+
const bytes = MessageCodec.encodePacket(packet);
|
|
48
|
+
if (bytes.length > this.maxPayloadSize) {
|
|
49
|
+
logger.warn(
|
|
50
|
+
`Matter message to send to ${this.name} is ${bytes.length}bytes long, which is larger than the maximum allowed size of ${this.maxPayloadSize}. This only works if both nodes support it.`
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
return await this.channel.send(bytes);
|
|
54
|
+
}
|
|
55
|
+
get name() {
|
|
56
|
+
return `${this.channel.name} on session ${this.session.name}`;
|
|
57
|
+
}
|
|
58
|
+
async close() {
|
|
59
|
+
const wasAlreadyClosed = this.closed;
|
|
60
|
+
this.closed = true;
|
|
61
|
+
await this.channel.close();
|
|
62
|
+
if (!wasAlreadyClosed) {
|
|
63
|
+
await this.#closeCallback?.();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
calculateMaximumPeerResponseTimeMs(sessionParameters, expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
67
|
+
switch (this.channel.type) {
|
|
68
|
+
case "tcp":
|
|
69
|
+
return 3e4 + PEER_RESPONSE_TIME_BUFFER_MS;
|
|
70
|
+
case "udp":
|
|
71
|
+
if (!this.usesMrp) {
|
|
72
|
+
throw new MatterFlowError("No response expected for this message exchange because UDP and no MRP.");
|
|
73
|
+
}
|
|
74
|
+
return this.#calculateMrpMaximumPeerResponseTime(sessionParameters, expectedProcessingTimeMs) + PEER_RESPONSE_TIME_BUFFER_MS;
|
|
75
|
+
case "ble":
|
|
76
|
+
return 3e4 + PEER_RESPONSE_TIME_BUFFER_MS;
|
|
77
|
+
default:
|
|
78
|
+
throw new MatterFlowError(
|
|
79
|
+
`Can not calculate expected timeout for unknown channel type: ${this.channel.type}`
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Calculates the backoff time for a resubmission based on the current retransmission count.
|
|
85
|
+
* If no session parameters are provided, the parameters of the current session are used.
|
|
86
|
+
* If session parameters are provided, the method can be used to calculate the maximum backoff time for the other
|
|
87
|
+
* side of the exchange.
|
|
88
|
+
*
|
|
89
|
+
* @see {@link MatterSpecification.v10.Core}, section 4.11.2.1
|
|
90
|
+
*/
|
|
91
|
+
getMrpResubmissionBackOffTime(retransmissionCount, sessionParameters) {
|
|
92
|
+
const { activeIntervalMs, idleIntervalMs } = sessionParameters ?? this.session.parameters;
|
|
93
|
+
const baseInterval = sessionParameters !== void 0 || this.session.isPeerActive() ? activeIntervalMs : idleIntervalMs;
|
|
94
|
+
return Math.floor(
|
|
95
|
+
MRP.BACKOFF_MARGIN * baseInterval * Math.pow(MRP.BACKOFF_BASE, Math.max(0, retransmissionCount - MRP.BACKOFF_THRESHOLD)) * (1 + (sessionParameters !== void 0 ? 1 : Math.random()) * MRP.BACKOFF_JITTER)
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
#calculateMrpMaximumPeerResponseTime(sessionParameters, expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
99
|
+
let finalWaitTime = expectedProcessingTimeMs;
|
|
100
|
+
for (let i = 0; i < MRP.MAX_TRANSMISSIONS; i++) {
|
|
101
|
+
finalWaitTime += this.getMrpResubmissionBackOffTime(i, sessionParameters);
|
|
102
|
+
}
|
|
103
|
+
return finalWaitTime;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
MRP,
|
|
108
|
+
MessageChannel
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=MessageChannel.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/protocol/MessageChannel.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["MRP"]
|
|
6
|
+
}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Message } from "#codec/MessageCodec.js";
|
|
6
7
|
import { AsyncObservable, MatterError, NoResponseTimeoutError } from "#general";
|
|
8
|
+
import { MessageChannel } from "#protocol/MessageChannel.js";
|
|
9
|
+
import { SessionParameters } from "#session/Session.js";
|
|
7
10
|
import { NodeId } from "#types";
|
|
8
|
-
import { Message } from "../codec/MessageCodec.js";
|
|
9
|
-
import { SessionParameters } from "../session/Session.js";
|
|
10
|
-
import { MessageChannel } from "./ExchangeManager.js";
|
|
11
11
|
export declare class RetransmissionLimitReachedError extends NoResponseTimeoutError {
|
|
12
12
|
}
|
|
13
13
|
export declare class UnexpectedMessageError extends MatterError {
|
|
@@ -81,7 +81,7 @@ export declare class MessageExchange {
|
|
|
81
81
|
get isClosing(): boolean;
|
|
82
82
|
get id(): number;
|
|
83
83
|
get channel(): MessageChannel;
|
|
84
|
-
get session(): import("#session/
|
|
84
|
+
get session(): import("#session/Session.js").Session;
|
|
85
85
|
/**
|
|
86
86
|
* Max Payload size of the exchange which bases on the maximum payload size of the channel reduced by Matter
|
|
87
87
|
* protocol overhead.
|
|
@@ -94,7 +94,7 @@ export declare class MessageExchange {
|
|
|
94
94
|
expectedProcessingTimeMs?: number;
|
|
95
95
|
timeoutMs?: number;
|
|
96
96
|
}): Promise<Message>;
|
|
97
|
-
|
|
97
|
+
calculateMaximumPeerResponseTimeMs(expectedProcessingTimeMs?: number): number;
|
|
98
98
|
destroy(): Promise<void>;
|
|
99
99
|
startTimedInteraction(timeoutMs: number): void;
|
|
100
100
|
clearTimedInteraction(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageExchange.d.ts","sourceRoot":"","sources":["../../../src/protocol/MessageExchange.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"MessageExchange.d.ts","sourceRoot":"","sources":["../../../src/protocol/MessageExchange.ts"],"names":[],"mappings":"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"}
|