@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
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { AsyncObservable, Channel, Environment, Environmental, MatterError } from "#general";
|
|
7
7
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { MessageChannel } from "#protocol/MessageChannel.js";
|
|
9
|
+
import { Session } from "#session/Session.js";
|
|
10
10
|
export declare class NoChannelError extends MatterError {
|
|
11
11
|
}
|
|
12
12
|
export declare class ChannelManager {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelManager.d.ts","sourceRoot":"","sources":["../../../src/protocol/ChannelManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAU,WAAW,EAAE,MAAM,UAAU,CAAC;AACrG,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChannelManager.d.ts","sourceRoot":"","sources":["../../../src/protocol/ChannelManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAU,WAAW,EAAE,MAAM,UAAU,CAAC;AACrG,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI9C,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAElD,qBAAa,cAAc;;gBAOX,4BAA4B,SAAI;IAI5C,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAM9C,IAAI,KAAK,2EAER;IAED,IAAI,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAE7C;IAYK,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc;IAmB9D,UAAU,CAAC,OAAO,EAAE,WAAW;IAM/B,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO;IAalD;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAY/B,qBAAqB,CAAC,OAAO,EAAE,WAAW;IAO1C,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO;IAiB1D,OAAO,CAAC,wBAAwB;IAc1B,kBAAkB,CAAC,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO;IA2B1E,KAAK;CAYd"}
|
|
@@ -24,8 +24,8 @@ __export(ChannelManager_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(ChannelManager_exports);
|
|
25
25
|
var import_general = require("#general");
|
|
26
26
|
var import_PeerAddress = require("#peer/PeerAddress.js");
|
|
27
|
-
var
|
|
28
|
-
var
|
|
27
|
+
var import_MessageChannel = require("#protocol/MessageChannel.js");
|
|
28
|
+
var import_NodeSession = require("#session/NodeSession.js");
|
|
29
29
|
/**
|
|
30
30
|
* @license
|
|
31
31
|
* Copyright 2022-2025 Matter.js Authors
|
|
@@ -130,7 +130,7 @@ class ChannelManager {
|
|
|
130
130
|
this.#channels.set(address, fabricChannels);
|
|
131
131
|
}
|
|
132
132
|
getOrCreateAsPaseChannel(byteArrayChannel, session) {
|
|
133
|
-
const msgChannel = new
|
|
133
|
+
const msgChannel = new import_MessageChannel.MessageChannel(
|
|
134
134
|
byteArrayChannel,
|
|
135
135
|
session,
|
|
136
136
|
async () => void this.#paseChannels.delete(session)
|
|
@@ -156,7 +156,7 @@ class ChannelManager {
|
|
|
156
156
|
} catch (e) {
|
|
157
157
|
NoChannelError.accept(e);
|
|
158
158
|
}
|
|
159
|
-
const msgChannel = new
|
|
159
|
+
const msgChannel = new import_MessageChannel.MessageChannel(
|
|
160
160
|
byteArrayChannel,
|
|
161
161
|
session,
|
|
162
162
|
async () => this.removeChannel(address, session)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/protocol/ChannelManager.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAA0F;AAC1F,yBAA4C;AAC5C,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -3,35 +3,15 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { Crypto, Environment, Environmental, MatterError, TransportInterfaceSet } from "#general";
|
|
7
7
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { SessionManager } from "../session/SessionManager.js";
|
|
8
|
+
import { MessageChannel } from "#protocol/MessageChannel.js";
|
|
9
|
+
import { SessionManager } from "#session/SessionManager.js";
|
|
11
10
|
import { ChannelManager } from "./ChannelManager.js";
|
|
12
|
-
import {
|
|
11
|
+
import { MessageExchange } from "./MessageExchange.js";
|
|
13
12
|
import { ProtocolHandler } from "./ProtocolHandler.js";
|
|
14
13
|
export declare class ChannelNotConnectedError extends MatterError {
|
|
15
14
|
}
|
|
16
|
-
export declare class MessageChannel implements Channel<Message> {
|
|
17
|
-
#private;
|
|
18
|
-
readonly channel: Channel<Uint8Array>;
|
|
19
|
-
readonly session: Session;
|
|
20
|
-
closed: boolean;
|
|
21
|
-
constructor(channel: Channel<Uint8Array>, session: Session, closeCallback?: () => Promise<void>);
|
|
22
|
-
set closeCallback(callback: () => Promise<void>);
|
|
23
|
-
/** Is the underlying transport reliable? */
|
|
24
|
-
get isReliable(): boolean;
|
|
25
|
-
get type(): import("#general").ChannelType;
|
|
26
|
-
/**
|
|
27
|
-
* Max Payload size of the exchange which bases on the maximum payload size of the channel. The full encoded matter
|
|
28
|
-
* message payload sent here can be as huge as allowed by the channel.
|
|
29
|
-
*/
|
|
30
|
-
get maxPayloadSize(): number;
|
|
31
|
-
send(message: Message, logContext?: ExchangeLogContext): Promise<void>;
|
|
32
|
-
get name(): string;
|
|
33
|
-
close(): Promise<void>;
|
|
34
|
-
}
|
|
35
15
|
/**
|
|
36
16
|
* Interfaces {@link ExchangeManager} with other components.
|
|
37
17
|
*/
|
|
@@ -54,6 +34,7 @@ export declare class ExchangeManager {
|
|
|
54
34
|
close(): Promise<void>;
|
|
55
35
|
private onMessage;
|
|
56
36
|
deleteExchange(exchangeIndex: number): Promise<void>;
|
|
37
|
+
calculateMaximumPeerResponseTimeMsFor(channel: MessageChannel, expectedProcessingTimeMs?: number): number;
|
|
57
38
|
}
|
|
58
39
|
export declare class ExchangeCounter {
|
|
59
40
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExchangeManager.d.ts","sourceRoot":"","sources":["../../../src/protocol/ExchangeManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ExchangeManager.d.ts","sourceRoot":"","sources":["../../../src/protocol/ExchangeManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAEH,MAAM,EAEN,WAAW,EACX,aAAa,EAIb,WAAW,EAIX,qBAAqB,EAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D,OAAO,EAAE,cAAc,EAA+B,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAuC,eAAe,EAA0B,MAAM,sBAAsB,CAAC;AAEpH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,qBAAa,wBAAyB,SAAQ,WAAW;CAAG;AAE5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,qBAAqB,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;CAClC;AAED,qBAAa,eAAe;;gBAYZ,OAAO,EAAE,sBAAsB;IAqB3C,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAW9C,IAAI,QAAQ,mBAEX;IAED,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAIrC,kBAAkB,CAAC,QAAQ,EAAE,eAAe;IAO5C,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;IAIzD,2BAA2B,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM;IAQjE,KAAK;YAkBG,SAAS;IA8KjB,cAAc,CAAC,aAAa,EAAE,MAAM;IAwF1C,qCAAqC,CACjC,OAAO,EAAE,cAAc,EACvB,wBAAwB,SAAsC;CA0DrE;AAED,qBAAa,eAAe;;gBAGZ,MAAM,EAAE,MAAM;IAI1B,qBAAqB;CAOxB"}
|
|
@@ -20,17 +20,16 @@ var ExchangeManager_exports = {};
|
|
|
20
20
|
__export(ExchangeManager_exports, {
|
|
21
21
|
ChannelNotConnectedError: () => ChannelNotConnectedError,
|
|
22
22
|
ExchangeCounter: () => ExchangeCounter,
|
|
23
|
-
ExchangeManager: () => ExchangeManager
|
|
24
|
-
MessageChannel: () => MessageChannel
|
|
23
|
+
ExchangeManager: () => ExchangeManager
|
|
25
24
|
});
|
|
26
25
|
module.exports = __toCommonJS(ExchangeManager_exports);
|
|
26
|
+
var import_MessageCodec = require("#codec/MessageCodec.js");
|
|
27
27
|
var import_general = require("#general");
|
|
28
|
+
var import_SecureChannelMessenger = require("#securechannel/SecureChannelMessenger.js");
|
|
29
|
+
var import_SecureChannelProtocol = require("#securechannel/SecureChannelProtocol.js");
|
|
30
|
+
var import_NodeSession = require("#session/NodeSession.js");
|
|
31
|
+
var import_SessionManager = require("#session/SessionManager.js");
|
|
28
32
|
var import_types = require("#types");
|
|
29
|
-
var import_MessageCodec = require("../codec/MessageCodec.js");
|
|
30
|
-
var import_SecureChannelMessenger = require("../securechannel/SecureChannelMessenger.js");
|
|
31
|
-
var import_SecureChannelProtocol = require("../securechannel/SecureChannelProtocol.js");
|
|
32
|
-
var import_NodeSession = require("../session/NodeSession.js");
|
|
33
|
-
var import_SessionManager = require("../session/SessionManager.js");
|
|
34
33
|
var import_ChannelManager = require("./ChannelManager.js");
|
|
35
34
|
var import_MessageExchange = require("./MessageExchange.js");
|
|
36
35
|
var import_MessageReceptionState = require("./MessageReceptionState.js");
|
|
@@ -43,54 +42,6 @@ const logger = import_general.Logger.get("ExchangeManager");
|
|
|
43
42
|
const MAXIMUM_CONCURRENT_EXCHANGES_PER_SESSION = 5;
|
|
44
43
|
class ChannelNotConnectedError extends import_general.MatterError {
|
|
45
44
|
}
|
|
46
|
-
class MessageChannel {
|
|
47
|
-
constructor(channel, session, closeCallback) {
|
|
48
|
-
this.channel = channel;
|
|
49
|
-
this.session = session;
|
|
50
|
-
this.#closeCallback = closeCallback;
|
|
51
|
-
}
|
|
52
|
-
closed = false;
|
|
53
|
-
#closeCallback;
|
|
54
|
-
set closeCallback(callback) {
|
|
55
|
-
this.#closeCallback = callback;
|
|
56
|
-
}
|
|
57
|
-
/** Is the underlying transport reliable? */
|
|
58
|
-
get isReliable() {
|
|
59
|
-
return this.channel.isReliable;
|
|
60
|
-
}
|
|
61
|
-
get type() {
|
|
62
|
-
return this.channel.type;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Max Payload size of the exchange which bases on the maximum payload size of the channel. The full encoded matter
|
|
66
|
-
* message payload sent here can be as huge as allowed by the channel.
|
|
67
|
-
*/
|
|
68
|
-
get maxPayloadSize() {
|
|
69
|
-
return this.channel.maxPayloadSize;
|
|
70
|
-
}
|
|
71
|
-
async send(message, logContext) {
|
|
72
|
-
logger.debug("Message \xBB", import_MessageCodec.MessageCodec.messageDiagnostics(message, logContext));
|
|
73
|
-
const packet = this.session.encode(message);
|
|
74
|
-
const bytes = import_MessageCodec.MessageCodec.encodePacket(packet);
|
|
75
|
-
if (bytes.length > this.maxPayloadSize) {
|
|
76
|
-
logger.warn(
|
|
77
|
-
`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.`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return await this.channel.send(bytes);
|
|
81
|
-
}
|
|
82
|
-
get name() {
|
|
83
|
-
return `${this.channel.name} on session ${this.session.name}`;
|
|
84
|
-
}
|
|
85
|
-
async close() {
|
|
86
|
-
const wasAlreadyClosed = this.closed;
|
|
87
|
-
this.closed = true;
|
|
88
|
-
await this.channel.close();
|
|
89
|
-
if (!wasAlreadyClosed) {
|
|
90
|
-
await this.#closeCallback?.();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
45
|
class ExchangeManager {
|
|
95
46
|
#transportInterfaces;
|
|
96
47
|
#sessionManager;
|
|
@@ -372,6 +323,12 @@ class ExchangeManager {
|
|
|
372
323
|
logger.debug(`Closing oldest exchange ${exchangeToClose.id} for session ${sessionId}`);
|
|
373
324
|
exchangeToClose.close().catch((error) => logger.error("Error closing exchange", error));
|
|
374
325
|
}
|
|
326
|
+
calculateMaximumPeerResponseTimeMsFor(channel, expectedProcessingTimeMs = import_MessageExchange.DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
327
|
+
return channel.calculateMaximumPeerResponseTimeMs(
|
|
328
|
+
this.#sessionManager.sessionParameters,
|
|
329
|
+
expectedProcessingTimeMs
|
|
330
|
+
);
|
|
331
|
+
}
|
|
375
332
|
#messageExchangeContextFor(channel) {
|
|
376
333
|
return {
|
|
377
334
|
channel,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/protocol/ExchangeManager.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
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"}
|
|
@@ -24,8 +24,9 @@ __export(ExchangeProvider_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(ExchangeProvider_exports);
|
|
26
26
|
var import_general = require("#general");
|
|
27
|
+
var import_ExchangeManager = require("#protocol/ExchangeManager.js");
|
|
28
|
+
var import_MessageExchange = require("#protocol/MessageExchange.js");
|
|
27
29
|
var import_types = require("#types");
|
|
28
|
-
var import_ExchangeManager = require("../protocol/ExchangeManager.js");
|
|
29
30
|
/**
|
|
30
31
|
* @license
|
|
31
32
|
* Copyright 2022-2025 Matter.js Authors
|
|
@@ -64,6 +65,9 @@ class DedicatedChannelExchangeProvider extends ExchangeProvider {
|
|
|
64
65
|
get channelType() {
|
|
65
66
|
return this.#channel.type;
|
|
66
67
|
}
|
|
68
|
+
maximumPeerResponseTimeMs(expectedProcessingTimeMs = import_MessageExchange.DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
69
|
+
return this.exchangeManager.calculateMaximumPeerResponseTimeMsFor(this.#channel, expectedProcessingTimeMs);
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
72
|
class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
69
73
|
constructor(exchangeManager, channelManager, address, reconnectChannelFunc) {
|
|
@@ -110,5 +114,12 @@ class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
|
110
114
|
}
|
|
111
115
|
return this.channelManager.getChannel(this.#address).type;
|
|
112
116
|
}
|
|
117
|
+
maximumPeerResponseTimeMs(expectedProcessingTimeMs = import_MessageExchange.DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
118
|
+
const channel = this.channelManager.getChannel(this.#address);
|
|
119
|
+
if (!channel) {
|
|
120
|
+
throw new import_ExchangeManager.ChannelNotConnectedError("Channel not connected");
|
|
121
|
+
}
|
|
122
|
+
return this.exchangeManager.calculateMaximumPeerResponseTimeMsFor(channel, expectedProcessingTimeMs);
|
|
123
|
+
}
|
|
113
124
|
}
|
|
114
125
|
//# sourceMappingURL=ExchangeProvider.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/protocol/ExchangeProvider.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,qBAAwC;
|
|
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,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var MessageChannel_exports = {};
|
|
20
|
+
__export(MessageChannel_exports, {
|
|
21
|
+
MRP: () => MRP,
|
|
22
|
+
MessageChannel: () => MessageChannel
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(MessageChannel_exports);
|
|
25
|
+
var import_codec = require("#codec/index.js");
|
|
26
|
+
var import_general = require("#general");
|
|
27
|
+
var import_MessageExchange = require("#protocol/MessageExchange.js");
|
|
28
|
+
const logger = new import_general.Logger("MessageChannel");
|
|
29
|
+
const PEER_RESPONSE_TIME_BUFFER_MS = 5e3;
|
|
30
|
+
var MRP;
|
|
31
|
+
((MRP2) => {
|
|
32
|
+
MRP2.MAX_TRANSMISSIONS = 5;
|
|
33
|
+
MRP2.BACKOFF_BASE = 1.6;
|
|
34
|
+
MRP2.BACKOFF_JITTER = 0.25;
|
|
35
|
+
MRP2.BACKOFF_MARGIN = 1.1;
|
|
36
|
+
MRP2.BACKOFF_THRESHOLD = 1;
|
|
37
|
+
MRP2.STANDALONE_ACK_TIMEOUT_MS = 200;
|
|
38
|
+
})(MRP || (MRP = {}));
|
|
39
|
+
class MessageChannel {
|
|
40
|
+
// When the session is supporting MRP and the channel is not reliable, use MRP handling
|
|
41
|
+
constructor(channel, session, closeCallback) {
|
|
42
|
+
this.channel = channel;
|
|
43
|
+
this.session = session;
|
|
44
|
+
this.#closeCallback = closeCallback;
|
|
45
|
+
}
|
|
46
|
+
closed = false;
|
|
47
|
+
#closeCallback;
|
|
48
|
+
set closeCallback(callback) {
|
|
49
|
+
this.#closeCallback = callback;
|
|
50
|
+
}
|
|
51
|
+
get usesMrp() {
|
|
52
|
+
return this.session.supportsMRP && !this.channel.isReliable;
|
|
53
|
+
}
|
|
54
|
+
/** Is the underlying transport reliable? */
|
|
55
|
+
get isReliable() {
|
|
56
|
+
return this.channel.isReliable;
|
|
57
|
+
}
|
|
58
|
+
get type() {
|
|
59
|
+
return this.channel.type;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Max Payload size of the exchange which bases on the maximum payload size of the channel. The full encoded matter
|
|
63
|
+
* message payload sent here can be as huge as allowed by the channel.
|
|
64
|
+
*/
|
|
65
|
+
get maxPayloadSize() {
|
|
66
|
+
return this.channel.maxPayloadSize;
|
|
67
|
+
}
|
|
68
|
+
async send(message, logContext) {
|
|
69
|
+
logger.debug("Message \xBB", import_codec.MessageCodec.messageDiagnostics(message, logContext));
|
|
70
|
+
const packet = this.session.encode(message);
|
|
71
|
+
const bytes = import_codec.MessageCodec.encodePacket(packet);
|
|
72
|
+
if (bytes.length > this.maxPayloadSize) {
|
|
73
|
+
logger.warn(
|
|
74
|
+
`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.`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
return await this.channel.send(bytes);
|
|
78
|
+
}
|
|
79
|
+
get name() {
|
|
80
|
+
return `${this.channel.name} on session ${this.session.name}`;
|
|
81
|
+
}
|
|
82
|
+
async close() {
|
|
83
|
+
const wasAlreadyClosed = this.closed;
|
|
84
|
+
this.closed = true;
|
|
85
|
+
await this.channel.close();
|
|
86
|
+
if (!wasAlreadyClosed) {
|
|
87
|
+
await this.#closeCallback?.();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
calculateMaximumPeerResponseTimeMs(sessionParameters, expectedProcessingTimeMs = import_MessageExchange.DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
91
|
+
switch (this.channel.type) {
|
|
92
|
+
case "tcp":
|
|
93
|
+
return 3e4 + PEER_RESPONSE_TIME_BUFFER_MS;
|
|
94
|
+
case "udp":
|
|
95
|
+
if (!this.usesMrp) {
|
|
96
|
+
throw new import_general.MatterFlowError("No response expected for this message exchange because UDP and no MRP.");
|
|
97
|
+
}
|
|
98
|
+
return this.#calculateMrpMaximumPeerResponseTime(sessionParameters, expectedProcessingTimeMs) + PEER_RESPONSE_TIME_BUFFER_MS;
|
|
99
|
+
case "ble":
|
|
100
|
+
return 3e4 + PEER_RESPONSE_TIME_BUFFER_MS;
|
|
101
|
+
default:
|
|
102
|
+
throw new import_general.MatterFlowError(
|
|
103
|
+
`Can not calculate expected timeout for unknown channel type: ${this.channel.type}`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Calculates the backoff time for a resubmission based on the current retransmission count.
|
|
109
|
+
* If no session parameters are provided, the parameters of the current session are used.
|
|
110
|
+
* If session parameters are provided, the method can be used to calculate the maximum backoff time for the other
|
|
111
|
+
* side of the exchange.
|
|
112
|
+
*
|
|
113
|
+
* @see {@link MatterSpecification.v10.Core}, section 4.11.2.1
|
|
114
|
+
*/
|
|
115
|
+
getMrpResubmissionBackOffTime(retransmissionCount, sessionParameters) {
|
|
116
|
+
const { activeIntervalMs, idleIntervalMs } = sessionParameters ?? this.session.parameters;
|
|
117
|
+
const baseInterval = sessionParameters !== void 0 || this.session.isPeerActive() ? activeIntervalMs : idleIntervalMs;
|
|
118
|
+
return Math.floor(
|
|
119
|
+
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)
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
#calculateMrpMaximumPeerResponseTime(sessionParameters, expectedProcessingTimeMs = import_MessageExchange.DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
|
|
123
|
+
let finalWaitTime = expectedProcessingTimeMs;
|
|
124
|
+
for (let i = 0; i < MRP.MAX_TRANSMISSIONS; i++) {
|
|
125
|
+
finalWaitTime += this.getMrpResubmissionBackOffTime(i, sessionParameters);
|
|
126
|
+
}
|
|
127
|
+
return finalWaitTime;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# 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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"}
|