@matter/protocol 0.17.6-alpha.0-20260715-312da87ed → 0.17.6
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/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +1 -0
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts +6 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptions.js +20 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +1 -1
- package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +2 -0
- package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/PeerSubscription.js +2 -0
- package/dist/cjs/action/client/subscription/PeerSubscription.js.map +1 -1
- package/dist/cjs/peer/Peer.d.ts.map +1 -1
- package/dist/cjs/peer/Peer.js +1 -1
- package/dist/cjs/peer/Peer.js.map +1 -1
- package/dist/cjs/peer/RebootResubscribeArmer.d.ts +24 -0
- package/dist/cjs/peer/RebootResubscribeArmer.d.ts.map +1 -0
- package/dist/cjs/peer/RebootResubscribeArmer.js +144 -0
- package/dist/cjs/peer/RebootResubscribeArmer.js.map +6 -0
- package/dist/cjs/peer/index.d.ts +1 -0
- package/dist/cjs/peer/index.d.ts.map +1 -1
- package/dist/cjs/peer/index.js +1 -0
- package/dist/cjs/peer/index.js.map +1 -1
- package/dist/cjs/protocol/MessageReceptionState.d.ts +11 -0
- package/dist/cjs/protocol/MessageReceptionState.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageReceptionState.js +17 -3
- package/dist/cjs/protocol/MessageReceptionState.js.map +1 -1
- package/dist/cjs/session/SessionManager.js +1 -1
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +2 -1
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts +6 -1
- package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptions.js +20 -1
- package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +1 -1
- package/dist/esm/action/client/subscription/PeerSubscription.d.ts +2 -0
- package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/PeerSubscription.js +2 -0
- package/dist/esm/action/client/subscription/PeerSubscription.js.map +1 -1
- package/dist/esm/peer/Peer.d.ts.map +1 -1
- package/dist/esm/peer/Peer.js +1 -1
- package/dist/esm/peer/Peer.js.map +1 -1
- package/dist/esm/peer/RebootResubscribeArmer.d.ts +24 -0
- package/dist/esm/peer/RebootResubscribeArmer.d.ts.map +1 -0
- package/dist/esm/peer/RebootResubscribeArmer.js +124 -0
- package/dist/esm/peer/RebootResubscribeArmer.js.map +6 -0
- package/dist/esm/peer/index.d.ts +1 -0
- package/dist/esm/peer/index.d.ts.map +1 -1
- package/dist/esm/peer/index.js +1 -0
- package/dist/esm/peer/index.js.map +1 -1
- package/dist/esm/protocol/MessageReceptionState.d.ts +11 -0
- package/dist/esm/protocol/MessageReceptionState.d.ts.map +1 -1
- package/dist/esm/protocol/MessageReceptionState.js +17 -3
- package/dist/esm/protocol/MessageReceptionState.js.map +1 -1
- package/dist/esm/session/SessionManager.js +1 -1
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/package.json +5 -5
- package/src/action/client/subscription/ClientSubscriptionHandler.ts +5 -1
- package/src/action/client/subscription/ClientSubscriptions.ts +21 -2
- package/src/action/client/subscription/PeerSubscription.ts +3 -0
- package/src/peer/Peer.ts +3 -2
- package/src/peer/RebootResubscribeArmer.ts +174 -0
- package/src/peer/index.ts +1 -0
- package/src/protocol/MessageReceptionState.ts +19 -2
- package/src/session/SessionManager.ts +1 -1
|
@@ -331,7 +331,7 @@ class SessionManager {
|
|
|
331
331
|
this.#construction.assert();
|
|
332
332
|
let found;
|
|
333
333
|
for (const session of this.#sessions) {
|
|
334
|
-
if (!session.peerIs(address) || session.isClosing) {
|
|
334
|
+
if (!session.peerIs(address) || session.isClosing || session.isPeerLost) {
|
|
335
335
|
continue;
|
|
336
336
|
}
|
|
337
337
|
if (!found || found.activeTimestamp < session.activeTimestamp) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/session/SessionManager.ts"],
|
|
4
|
-
"mappings": "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",
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,iCAAiC;AAC1C,SAAS,qBAAqB;AAE9B,SAAS,aAAa,sBAAsB;AAC5C,SAAS,yBAAyB;AAElC,SAAS,0BAA0B;AACnC,SAAS,cAAc,yBAAyB,8BAA8B;AAC9E;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,OACG;AACP,SAAiF,SAAS,cAAc;AACxG,SAAS,iBAAiB;AAE1B,SAAS,gBAAgB,+BAA+B;AACxD,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAE9B,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AAEjC,MAAM,SAAS,OAAO,IAAI,gBAAgB;AAM1C,SAAS,sBAAsB,iBAA2B;AACtD,MAAI,kBAAkB,iBAAiB,oBAAoB;AACvD,UAAM,IAAI;AAAA,MACN,4BAA4B,eAAe,6BAA6B,iBAAiB,kBAAkB;AAAA,IAC/G;AAAA,EACJ;AACJ;AAyFA,MAAM,uBAAuB;AAG7B,MAAM,yBAAyB;AAO/B,MAAM,6BAA6B;AAK5B,MAAM,sBAAsB,YAAY;AAAA,EAC3C,YAAY,UAAU,uBAAuB,SAAwB;AACjE,UAAM,SAAS,OAAO;AAAA,EAC1B;AACJ;AAKO,MAAM,eAAe;AAAA,EACf;AAAA,EACA,qBAAqB,oBAAI,IAA8B;AAAA,EACvD,YAAY,IAAI,SAAsB;AAAA,EACtC,iBAAiB,oBAAI,IAAoC;AAAA,EAClE;AAAA,EACA,qBAAqB,IAAI,eAAyC;AAAA,EACzD;AAAA,EACT;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,0BAAoC,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5C,uBAAiC,OAAO,CAAC;AAAA,EAChC;AAAA,EACA,aAAa,IAAI,cAAc;AAAA,EAC/B,2BAA2B,IAAI,MAAM,IAAI;AAAA,EAClD,gBAAgB;AAAA,EAEP,wBAAwB,WAA+D;AAAA,EACvF,SAAS,WAA+C;AAAA,EACxD,kBAAkB,WAA0C;AAAA,EAErE,YAAY,SAAgC;AACxC,SAAK,WAAW;AAChB,UAAM;AAAA,MACF,SAAS,EAAE,OAAO;AAAA,IACtB,IAAI;AACJ,SAAK,qBAAqB,kBAAkB,EAAE,GAAG,kBAAkB,UAAU,GAAG,QAAQ,WAAW,CAAC;AACpG,0BAAsB,KAAK,mBAAmB,eAAe;AAC7D,SAAK,iBAAiB,OAAO;AAC7B,SAAK,mCAAmC,IAAI,eAAe,MAAM;AAGjE,SAAK,WAAW,GAAG,QAAQ,QAAQ,OAAO,UAAU,OAAM,WAAU;AAChE,YAAM,KAAK,iCAAiC,MAAM;AAAA,IACtD,CAAC;AAGD,SAAK,UAAU,MAAM,GAAG,aAAW;AAC/B,YAAM,uBAAuB,CAAC,iBAA+B;AACzD,YAAI,QAAQ,WAAW;AACnB;AAAA,QACJ;AAEA,aAAK,sBAAsB,KAAK,SAAS,YAAY;AAAA,MACzD;AAEA,cAAQ,cAAc,MAAM,GAAG,oBAAoB;AACnD,cAAQ,cAAc,QAAQ,GAAG,oBAAoB;AAErD,cAAQ,QAAQ,GAAG,MAAM;AACrB,gBAAQ,cAAc,MAAM,IAAI,oBAAoB;AACpD,gBAAQ,cAAc,QAAQ,IAAI,oBAAoB;AAAA,MAC1D,CAAC;AAAA,IACL,CAAC;AAED,SAAK,gBAAgB,aAAa,MAAM,MAAM,KAAK,YAAY,CAAC;AAAA,EACpE;AAAA,EAEA,QAAQ,cAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,WAAW,IAAI,eAAe;AAAA,MAChC,SAAS,IAAI,IAAI,cAAc,EAAE,cAAc,UAAU;AAAA,MACzD,SAAS,IAAI,IAAI,aAAa;AAAA,IAClC,CAAC;AACD,QAAI,IAAI,gBAAgB,QAAQ;AAChC,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,SAAS,QAAQ;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,0BAA0B;AAC1B,SAAK,cAAc,OAAO;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,oBAAoB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,oBAAuC;AACvC,UAAM,EAAE,qBAAqB,kBAAkB,IAAI,KAAK;AACxD,UAAM,eAAe,oBAAoB,aAAa,oBAAoB;AAC1E,WAAO;AAAA,MACH,GAAG,KAAK;AAAA;AAAA;AAAA,MAGR,mBAAmB,eAAe,oBAAoB;AAAA,IAC1D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,kBAAkB,YAAwC;AAC1D,QAAI,WAAW,oBAAoB,QAAW;AAC1C,4BAAsB,WAAW,eAAe;AAAA,IACpD;AACA,SAAK,qBAAqB;AAAA,MACtB,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,uBAAuB;AACvB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,iBAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,SAAoC;AAC1C,WAAO,KAAK,SAAS,QAAQ,IAAI,OAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAQ;AACR,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA,EAEA,uBAAuB,SAKpB;AACC,SAAK,cAAc,OAAO;AAE1B,UAAM,EAAE,SAAS,iBAAiB,mBAAmB,YAAY,IAAI;AACrE,QAAI,oBAAoB,QAAW;AAC/B,UAAI,KAAK,mBAAmB,IAAI,eAAe,GAAG;AAC9C,cAAM,IAAI,gBAAgB,gCAAgC,eAAe,iBAAiB;AAAA,MAC9F;AAAA,IACJ;AAEA,QAAI,QAAQ;AACZ,WAAO,MAAM;AACT,YAAM,UAAU,IAAI,iBAAiB;AAAA,QACjC,QAAQ,KAAK,SAAS,QAAQ;AAAA,QAC9B,SAAS;AAAA,QACT;AAAA,QACA,gBAAgB,KAAK;AAAA,QACrB;AAAA,QACA;AAAA,QACA,aAAa,eAAe;AAAA,MAChC,CAAC;AAED,YAAM,kBAAkB,QAAQ;AAChC,UAAI,KAAK,mBAAmB,IAAI,eAAe,GAAG;AAC9C,YAAI,EAAE,QAAQ,GAAG;AACb,gBAAM,IAAI,cAAc,uEAAuE;AAAA,QACnG;AAEA;AAAA,MACJ;AAEA,WAAK,mBAAmB,IAAI,iBAAiB,OAAO;AACpD,cAAQ,SAAS;AACjB,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB,QAAwE;AAC9F,WAAO,MAAM,YAAY,OAAO;AAAA,MAC5B,QAAQ,KAAK;AAAA,MACb,GAAG;AAAA,MACH,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBAAuB,SAAsB;AAC/C,UAAM,KAAK;AAEX,UAAM,SAAS,KAAK,mBAAmB,OAAO,OAAO;AACrD,QAAI,QAAQ;AACR,YAAM,KAAK,wBAAwB;AAAA,IACvC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iCAAiC,QAAgB;AACnD,UAAM,KAAK;AAEX,QAAI,eAAe;AACnB,eAAW,WAAW,KAAK,mBAAmB,KAAK,GAAG;AAClD,UAAI,QAAQ,gBAAgB,OAAO,aAAa;AAC5C,YAAI,KAAK,mBAAmB,OAAO,OAAO,GAAG;AACzC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,eAAe,GAAG;AAClB,YAAM,KAAK,wBAAwB;AAAA,IACvC;AACA,WAAO,eAAe;AAAA,EAC1B;AAAA,EAEA,4BAA4B;AACxB,SAAK,cAAc,OAAO;AAE1B,QAAI,gBAAyC;AAC7C,eAAW,WAAW,KAAK,WAAW;AAClC,UAAI,CAAC,iBAAiB,QAAQ,YAAY,cAAc,WAAW;AAC/D,wBAAgB;AAAA,MACpB;AAAA,IACJ;AACA,QAAI,kBAAkB,QAAW;AAC7B,YAAM,IAAI,gBAAgB,0DAA0D;AAAA,IACxF;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,4BAA4B;AAC9B,UAAM,KAAK;AAEX,aAAS,IAAI,GAAG,IAAI,KAAK,eAAe,KAAK;AACzC,YAAM,KAAK,KAAK;AAChB,WAAK,iBAAkB,KAAK,iBAAiB,IAAK,KAAK;AACvD,UAAI,KAAK,mBAAmB,EAAG,MAAK;AAEpC,UAAI,KAAK,WAAW,EAAE,MAAM,QAAW;AACnC,eAAO;AAAA,MACX;AAAA,IACJ;AAGA,UAAM,gBAAgB,KAAK,0BAA0B;AAErD,UAAM,cAAc,cAAc,YAAY;AAC1C,YAAM,cAAc,mBAAmB,IAAI;AAAA,IAC/C,CAAC;AACD,SAAK,iBAAiB,cAAc;AACpC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAW,WAAmB;AAC1B,SAAK,cAAc,OAAO;AAE1B,WAAO,KAAK,UAAU,IAAI,MAAM,SAAS;AAAA,EAC7C;AAAA,EAEA,iBAAiB;AACb,SAAK,cAAc,OAAO;AAE1B,WAAO,CAAC,GAAG,KAAK,SAAS,EAAE,KAAK,aAAW,YAAY,GAAG,OAAO,KAAK,QAAQ,UAAU,CAAC,QAAQ,SAAS;AAAA,EAC9G;AAAA,EAEA,UAAU,QAAgB;AACtB,SAAK,cAAc,OAAO;AAE1B,WAAO,CAAC,GAAG,KAAK,SAAS,EAAE;AAAA,MACvB,aACI,YAAY,GAAG,OAAO,KAAK,QAAQ,YAAY,QAAQ,QAAQ,gBAAgB,OAAO;AAAA,IAC9F;AAAA,EACJ;AAAA,EAEA,WAAW,MAAmB;AAC1B,UAAM,UAAU,KAAK,gBAAgB,IAAI;AACzC,QAAI,SAAS;AACT,aAAO;AAAA,IACX;AAEA,UAAM,IAAI,mBAAmB,8BAA8B,YAAY,IAAI,CAAC,EAAE;AAAA,EAClF;AAAA,EAEA,gBAAgB,SAAsB;AAClC,SAAK,cAAc,OAAO;AAI1B,QAAI;AACJ,eAAW,WAAW,KAAK,WAAW;AAClC,UAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,QAAQ,aAAa,QAAQ,YAAY;AACrE;AAAA,MACJ;AAEA,UAAI,CAAC,SAAS,MAAM,kBAAkB,QAAQ,iBAAiB;AAC3D,gBAAQ;AAAA,MACZ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,SAAsB;AAC9B,cAAU,YAAY,OAAO;AAC7B,WAAO,KAAK,UAAU,OAAO,aAAW,QAAQ,gBAAgB,WAAW,CAAC,QAAQ,SAAS;AAAA,EACjG;AAAA,EAEA,uBAAuB,aAA0B;AAC7C,WAAO,KAAK,UAAU,OAAO,aAAW,QAAQ,QAAQ,gBAAgB,WAAW;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,SAAsB,MAAkB;AACvD,WAAO,KAAK,gBAAgB;AAAA,MACxB;AAAA,MACA,OAAO,IAAI,kBAAkB;AAAA,MAC7B,MAAM,QAAQ,KAAK;AAAA,MACnB,mBAAmB;AAAA,IACvB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,SAAsB,OAAc,MAAkB;AACvE,WAAO,MAAM,KAAK,gBAAgB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,MAAM,CAAC;AAAA,EAClF;AAAA,EAEA,MAAM,gBACF,SAGF;AACE,UAAM,KAAK;AAEX,UAAM,EAAE,SAAS,KAAK,IAAI;AAC1B,eAAW,WAAW,KAAK,WAAW;AAClC,UAAI,CAAC,QAAQ,OAAO,OAAO,GAAG;AAC1B;AAAA,MACJ;AAEA,UAAI,SAAS,UAAa,QAAQ,aAAa,MAAM;AACjD;AAAA,MACJ;AAEA,YAAM,QAAQ,eAAe,OAAO;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,oBAAoB,cAAuB;AACvC,SAAK,cAAc,OAAO;AAE1B,QAAI,iBAAiB,QAAW;AAC5B,aAAO,KAAK,mBAAmB,IAAI,OAAO,mBAAmB;AAAA,IACjE;AACA,WAAO,KAAK,mBAAmB,IAAI,YAAY;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,uBAAuB,SAAsB,YAAgC;AAC/E,SAAK,cAAc,OAAO;AAC1B,UAAM,UAAU,QAAQ,WAAW,QAAQ,MAAM;AACjD,YAAQ,cAAc,OAAO;AAE7B,UAAM,SAAS,KAAK,UAAU,OAAO;AACrC,UAAM,EAAE,KAAK,UAAU,UAAU,IAAI,OAAO,OAAO,mBAAmB,OAAO;AAC7E,QAAI,cAAc,UAAa,QAAQ,QAAW;AAC9C,YAAM,IAAI;AAAA,QACN,yCAAyC,OAAO,cAAc,OAAO,QAAQ;AAAA,MACjF;AAAA,IACJ;AAIA,UAAM,UAAU,KAAK,eAChB,IAAI,QAAQ,MAAM,GACjB,KAAK,OAAK,EAAE,QAAQ,OAAO,aAAa,WAAW,GAAG,CAAC;AAC7D,QAAI,SAAS;AACT,aAAO;AAAA,IACX;AAEA,WAAO,MAAM,aAAa,OAAO;AAAA,MAC7B;AAAA,MACA,SAAS;AAAA,MACT,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA,qBAAqB;AAAA,MACrB,aAAa,QAAQ;AAAA,MACrB,gBAAgB,KAAK;AAAA,IACzB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,QAAuB,KAAY;AACtD,SAAK,cAAc,OAAO;AAC1B,QAAI;AACJ,QAAI;AACA,gBAAU,aAAa,OAAO,KAAK,SAAS,SAAS,QAAQ,GAAG;AAAA,IACpE,SAAS,OAAO;AAGZ,UAAI,SAAS,OAAO,sBAAsB,GAAG;AACzC,aAAK,gBAAgB,KAAK,EAAE,QAAQ,UAAU,oBAAoB,eAAe,CAAC;AAAA,MACtF,WAAW,SAAS,OAAO,uBAAuB,GAAG;AACjD,aAAK,gBAAgB,KAAK,EAAE,QAAQ,UAAU,oBAAoB,WAAW,CAAC;AAAA,MAClF;AACA,YAAM;AAAA,IACV;AAEA,UAAM,EAAE,SAAS,KAAK,YAAY,WAAW,cAAc,UAAU,OAAO,IAAI;AAGhF,UAAM,aAAa,QAAQ,aAAa;AACxC,QAAI,eAAe,QAAW;AAC1B,YAAM,IAAI,oBAAoB,mDAAmD;AAAA,IACrF;AACA,UAAM,UAAU,QAAQ,UAAU;AAClC,YAAQ,cAAc,OAAO;AAE7B,QAAI,UAAU,KAAK,eAAe,IAAI,YAAY,GAAG,KAAK,OAAK,EAAE,QAAQ,OAAO,aAAa,WAAW,GAAG,CAAC;AAC5G,QAAI,YAAY,QAAW;AACvB,gBAAU,IAAI,aAAa;AAAA,QACvB,SAAS;AAAA,QACT,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA,qBAAqB;AAAA,QACrB,uBAAuB;AAAA,QACvB,YAAY;AAAA,QACZ,kBAAkB,OAAO,OAAO,oBAAoB,OAAO;AAAA,QAC3D,gBAAgB,KAAK;AAAA,MACzB,CAAC;AAAA,IACL;AAEA,WAAO,EAAE,SAAS,SAAS,IAAI;AAAA,EACnC;AAAA;AAAA,EAGA,iBAAiB,MAA6B;AAC1C,SAAK,gBAAgB,KAAK,IAAI;AAAA,EAClC;AAAA,EAEA,qBAAqB,SAAuB;AACxC,UAAM,eAAe,QAAQ;AAC7B,UAAM,eAAe,KAAK,eAAe,IAAI,YAAY,KAAK,IAAI,SAAS;AAC3E,iBAAa,IAAI,OAAO;AACxB,SAAK,eAAe,IAAI,cAAc,YAAY;AAAA,EACtD;AAAA,EAEA,mBAAmB,SAAuB;AACtC,UAAM,eAAe,QAAQ;AAC7B,UAAM,eAAe,KAAK,eAAe,IAAI,YAAY;AACzD,QAAI,cAAc;AACd,mBAAa,OAAO,OAAO;AAC3B,UAAI,aAAa,SAAS,GAAG;AACzB,aAAK,eAAe,OAAO,YAAY;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,2BAA2B,QAAoD;AAC3E,WAAO,EAAE,GAAG,QAAQ,QAAQ,KAAK,aAAa,OAAO,UAAU,OAAO,WAAW,EAAE;AAAA,EACvF;AAAA,EAEA,yBAAyB,cAAqB;AAC1C,SAAK,cAAc,OAAO;AAC1B,UAAM,SAAS,CAAC,GAAG,KAAK,mBAAmB,OAAO,CAAC,EAAE;AAAA,MAAK,CAAAA,YACtD,MAAM,SAASA,QAAO,cAAc,YAAY;AAAA,IACpD;AACA,QAAI,WAAW,QAAW;AACtB,aAAO,KAAK,2BAA2B,MAAM;AAAA,IACjD;AAAA,EACJ;AAAA,EAEA,8BAA8B,SAAsB;AAChD,SAAK,cAAc,OAAO;AAC1B,UAAM,SAAS,KAAK,mBAAmB,IAAI,OAAO;AAClD,QAAI,WAAW,QAAW;AACtB,aAAO,KAAK,2BAA2B,MAAM;AAAA,IACjD;AAAA,EACJ;AAAA,EAEA,MAAM,qBAAqB,kBAAoC;AAC3D,UAAM,KAAK;AACX,UAAM,EAAE,QAAQ,GAAG,KAAK,IAAI;AAE5B,UAAM,SAAS;AAAA,MACX,GAAG;AAAA,MACH,UAAU,OAAO;AAAA,MACjB,aAAa,OAAO;AAAA,IACxB;AACA,SAAK,mBAAmB,IAAI,OAAO,UAAU,iBAAiB,UAAU,GAAG,MAAM;AACjF,UAAM,KAAK,wBAAwB;AAAA,EACvC;AAAA,EAEA,MAAM,0BAA0B;AAC5B,UAAM,KAAK;AACX,UAAM,KAAK,SAAS,QAAQ;AAAA,MACxB;AAAA,MACA,CAAC,GAAG,KAAK,kBAAkB,EAAE;AAAA,QACzB,CAAC;AAAA,UACG;AAAA,UACA;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,OAAgC;AAAA,UAC5B,QAAQ,QAAQ;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,mBAAmB;AAAA,YACf,GAAG;AAAA,YACH,qBAAqB,kBAAkB,sBACjC,0BAA0B,OAAO,kBAAkB,mBAAmB,IACtE;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,kBAAkB,UAAoB,aAA2B;AAC7D,WAAO,KAAK,SAAS,QAAQ;AAAA,MACzB,YACI,OAAO,aAAa;AAAA,OAEnB,gBAAgB,UAAa,OAAO,gBAAgB;AAAA,IAC7D;AAAA,EACJ;AAAA,EAEA,aAAa,UAAoB,aAA2B;AACxD,UAAM,SAAS,KAAK,kBAAkB,UAAU,WAAW;AAC3D,QAAI,WAAW,QAAW;AACtB,YAAM,IAAI,cAAc,2BAA2B,QAAQ,WAAW,WAAW,EAAE;AAAA,IACvF;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,cAAc;AAChB,UAAM,KAAK,SAAS,QAAQ;AAE5B,SAAK,2BAA2B,MAAM,KAAK,+BAA+B;AAE1E,UAAM,0BAA0B,MAAM,KAAK,SAAS,QAAQ;AAAA,MACxD;AAAA,MACA,CAAC;AAAA,IACL;AAEA,4BAAwB;AAAA,MACpB,CAAC;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,MAAM;AACF,cAAM,SAAS,KAAK,kBAAkB,UAAU,WAAW;AAC3D,YAAI,CAAC,QAAQ;AACT,iBAAO;AAAA,YACH,2CAA2C,MAAM,QAAQ,CAAC,cAAc,WAAW;AAAA,UACvF;AACA;AAAA,QACJ;AACA,eAAO;AAAA,UACH;AAAA,UACA,OAAO,UAAU,MAAM,EAAE,SAAS;AAAA,UAClC;AAAA,UACA,OAAO,UAAU,UAAU,EAAE,SAAS;AAAA,UACtC;AAAA,UACA,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,UAC3B,MAAM,MAAM,OAAO,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA,QACvD;AACA,aAAK,mBAAmB,IAAI,OAAO,UAAU,MAAM,GAAG;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa,OAAO;AAAA,UACpB;AAAA;AAAA,UAEA,mBAAmB,kBAAkB,iBAAiB;AAAA,UACtD;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iCAAiC;AACnC,UAAM,UAAU,KAAK,SAAS;AAE9B,UAAM,YAAY,CAAE,MAAM,QAAQ,IAAI,sBAAsB;AAC5D,UAAM,OAAO,YAAY,MAAM,KAAK,SAAS,QAAQ,0BAA0B,IAAI;AAEnF,UAAM,UAAU,MAAM,wBAAwB,OAAO,KAAK,QAAQ,SAAS,wBAAwB;AAAA,MAC/F,SAAS;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,yBAAyB,YAAY;AACjC,eAAO;AAAA,UACH;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,QAAI,WAAW;AACX,YAAM,KAAK,SAAS,QAAQ,6BAA6B;AAAA,IAC7D;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,8BAA0D;AACtD,SAAK,cAAc,OAAO;AAC1B,WAAO,CAAC,GAAG,KAAK,SAAS,EACpB,OAAO,aAAW,QAAQ,YAAY,CAAC,QAAQ,MAAM,EACrD,IAAI,cAAY;AAAA,MACb,MAAM,GAAG,QAAQ,GAAG;AAAA,MACpB,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,QAAQ,mBAAmB,gBAAgB,QAAQ,QAAQ,sBAAsB;AAAA,MACjF,cAAc,QAAQ;AAAA,MACtB,QAAQ,QAAQ;AAAA,MAChB,0BAA0B,mBAAmB,gBAAgB,QAAQ,YAAY;AAAA,MACjF,qBAAqB,mBAAmB,gBAAgB,QAAQ,kBAAkB;AAAA,MAClF,6BAA6B,mBAAmB,gBAAgB,QAAQ,cAAc,OAAO;AAAA,IACjG,EAAE;AAAA,EACV;AAAA,EAEA,MAAM,QAAQ;AACV,UAAM,KAAK,cAAc,MAAM,YAAY;AACvC,WAAK,WAAW,MAAM;AACtB,YAAM,KAAK,iBAAiB;AAAA,IAChC,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,QAAQ;AACV,QAAI,KAAK,cAAc,WAAW,UAAU,OAAO,cAAc;AAC7D,YAAM,KAAK;AAAA,IACf;AAEA,UAAM,KAAK,iBAAiB;AAC5B,UAAM,KAAK,SAAS,QAAQ,SAAS;AACrC,SAAK,mBAAmB,MAAM;AAC9B,SAAK,2BAA2B,MAAM,KAAK,+BAA+B;AAAA,EAC9E;AAAA,EAEA,MAAM,mBAAmB;AACrB,QAAI,KAAK,cAAc,WAAW,UAAU,OAAO,cAAc;AAC7D,YAAM,KAAK;AAAA,IACf;AAEA,UAAM,KAAK;AAEX,UAAM,UAA2B,EAAE,OAAO,IAAI,cAAc,iCAAiC,EAAE;AAE/F,UAAM,gBAAgB,KAAK,UAAU,IAAI,OAAM,YAAW;AACtD,YAAM,QAAQ,mBAAmB,IAAI;AAKrC,YAAM,QAAQ,mBAAmB,OAAO;AAExC,WAAK,UAAU,OAAO,OAAO;AAAA,IACjC,CAAC;AAED,eAAW,WAAW,KAAK,mBAAmB,OAAO,GAAG;AACpD,oBAAc,KAAK,QAAQ,mBAAmB,OAAO,CAAC;AAAA,IAC1D;AAEA,eAAW,YAAY,KAAK,eAAe,OAAO,GAAG;AACjD,iBAAW,WAAW,UAAU;AAC5B,sBAAc,KAAK,QAAQ,mBAAmB,OAAO,CAAC;AAAA,MAC1D;AAAA,IACJ;AACA,UAAM,qBAAqB,WAAW,eAAe,wBAAwB,EAAE;AAAA,MAAM,WACjF,OAAO,KAAK,2BAA2B,KAAK;AAAA,IAChD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,YAAoB;AAChC,SAAK,gBAAgB;AACrB,SAAK,iBAAiB,KAAK,SAAS,QAAQ,OAAO,eAAe;AAClE,QAAI,KAAK,mBAAmB,EAAG,MAAK;AAAA,EACxC;AACJ;",
|
|
5
5
|
"names": ["record"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/protocol",
|
|
3
|
-
"version": "0.17.6
|
|
3
|
+
"version": "0.17.6",
|
|
4
4
|
"description": "Low-level APIs for Matter interaction",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
"#*": "./src/*"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@matter/general": "0.17.6
|
|
39
|
-
"@matter/model": "0.17.6
|
|
40
|
-
"@matter/types": "0.17.6
|
|
38
|
+
"@matter/general": "0.17.6",
|
|
39
|
+
"@matter/model": "0.17.6",
|
|
40
|
+
"@matter/types": "0.17.6"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@matter/testing": "0.17.6
|
|
43
|
+
"@matter/testing": "0.17.6"
|
|
44
44
|
},
|
|
45
45
|
"files": [
|
|
46
46
|
"dist/**/*",
|
|
@@ -10,7 +10,7 @@ import { Subscription, SubscriptionId } from "#interaction/Subscription.js";
|
|
|
10
10
|
import { MessageExchange } from "#protocol/MessageExchange.js";
|
|
11
11
|
import { ProtocolHandler } from "#protocol/ProtocolHandler.js";
|
|
12
12
|
import { SecureSession } from "#session/SecureSession.js";
|
|
13
|
-
import { AbortedError, causedBy, Diagnostic, InternalError, Logger } from "@matter/general";
|
|
13
|
+
import { AbortedError, causedBy, Diagnostic, InternalError, Logger, Time } from "@matter/general";
|
|
14
14
|
import { DataReport, INTERACTION_PROTOCOL_ID, Status, TlvAttributeReport, TypeFromSchema } from "@matter/types";
|
|
15
15
|
import { InputChunk } from "../InputChunk.js";
|
|
16
16
|
import { ClientSubscriptions } from "./ClientSubscriptions.js";
|
|
@@ -107,6 +107,10 @@ export class ClientSubscriptionHandler implements ProtocolHandler {
|
|
|
107
107
|
try {
|
|
108
108
|
subscription.isReading = true;
|
|
109
109
|
|
|
110
|
+
// Stamp when the report (data or keepalive) starts arriving, not on completion — a multi-chunk report
|
|
111
|
+
// may stream for a while, and liveness is proven the moment the peer starts sending on this subscription.
|
|
112
|
+
subscription.lastReportStartedAt = Time.nowMs;
|
|
113
|
+
|
|
110
114
|
// If this is just a ping, only reset the timeout
|
|
111
115
|
if (!initialReport.attributeReports?.length && !initialReport.eventReports?.length) {
|
|
112
116
|
// An empty keepalive never reaches updated() but is still inbound peer activity, so re-arm ICD
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { ReadResult } from "#action/response/ReadResult.js";
|
|
8
8
|
import type { ActiveSubscription } from "#action/response/SubscribeResult.js";
|
|
9
9
|
import { SubscriptionId } from "#interaction/Subscription.js";
|
|
10
|
-
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
10
|
+
import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
|
|
11
11
|
import {
|
|
12
12
|
BasicSet,
|
|
13
13
|
createPromise,
|
|
@@ -29,7 +29,7 @@ import type { PeerSubscription } from "./PeerSubscription.js";
|
|
|
29
29
|
export class ClientSubscriptions implements Lifetime.Owner {
|
|
30
30
|
#lifetime: Lifetime;
|
|
31
31
|
#active = new BasicSet<ClientSubscription>();
|
|
32
|
-
#peers = new
|
|
32
|
+
#peers = new PeerAddressMap<Map<number, PeerSubscription>>();
|
|
33
33
|
#timeout?: Timer;
|
|
34
34
|
#blocked = false;
|
|
35
35
|
#inFlightCount = 0;
|
|
@@ -144,6 +144,25 @@ export class ClientSubscriptions implements Lifetime.Owner {
|
|
|
144
144
|
return this.#peers.get(address)?.get(id);
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
+
/**
|
|
148
|
+
* The most recent {@link PeerSubscription.lastReportStartedAt} across a peer's subscriptions, or `undefined` if
|
|
149
|
+
* the peer has no subscription that has yet started receiving a report.
|
|
150
|
+
*/
|
|
151
|
+
lastReportStartedAtFor(address: PeerAddress): Timestamp | undefined {
|
|
152
|
+
const forPeer = this.#peers.get(address);
|
|
153
|
+
if (forPeer === undefined) {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
let latest: Timestamp | undefined;
|
|
157
|
+
for (const subscription of forPeer.values()) {
|
|
158
|
+
const reportedAt = subscription.lastReportStartedAt;
|
|
159
|
+
if (reportedAt !== undefined && (latest === undefined || reportedAt > latest)) {
|
|
160
|
+
latest = reportedAt;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return latest;
|
|
164
|
+
}
|
|
165
|
+
|
|
147
166
|
/**
|
|
148
167
|
* Close all {@link PeerSubscription}s for a specific peer, triggering re-subscription.
|
|
149
168
|
*/
|
|
@@ -20,6 +20,9 @@ export class PeerSubscription extends ClientSubscription {
|
|
|
20
20
|
|
|
21
21
|
timeoutAt?: Timestamp;
|
|
22
22
|
|
|
23
|
+
/** Wall-clock time the most recent inbound report (data or keepalive) started arriving on this subscription. */
|
|
24
|
+
lastReportStartedAt?: Timestamp;
|
|
25
|
+
|
|
23
26
|
constructor(config: PeerSubscription.Configuration) {
|
|
24
27
|
const {
|
|
25
28
|
maxPeerResponseTime,
|
package/src/peer/Peer.ts
CHANGED
|
@@ -539,7 +539,8 @@ export class Peer {
|
|
|
539
539
|
}
|
|
540
540
|
|
|
541
541
|
newestSession(type?: ChannelType) {
|
|
542
|
-
// Prefer the
|
|
542
|
+
// Prefer the session we last heard from the peer on (highest activeTimestamp). A dead session
|
|
543
|
+
// still retransmitting keeps a high `timestamp`, so ordering by that would pick it over a fresh one.
|
|
543
544
|
let found: NodeSession | undefined;
|
|
544
545
|
|
|
545
546
|
for (const session of this.#sessions) {
|
|
@@ -551,7 +552,7 @@ export class Peer {
|
|
|
551
552
|
continue;
|
|
552
553
|
}
|
|
553
554
|
|
|
554
|
-
if (!found || found.
|
|
555
|
+
if (!found || found.activeTimestamp < session.activeTimestamp) {
|
|
555
556
|
found = session;
|
|
556
557
|
}
|
|
557
558
|
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ClientSubscriptions } from "#action/client/subscription/ClientSubscriptions.js";
|
|
8
|
+
import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
|
|
9
|
+
import { PeerUnresponsiveError } from "#peer/PeerCommunicationError.js";
|
|
10
|
+
import type { NodeSession } from "#session/NodeSession.js";
|
|
11
|
+
import { SessionManager } from "#session/SessionManager.js";
|
|
12
|
+
import { Logger, Minutes, ObserverGroup, Seconds, Time, Timer, Timestamp } from "@matter/general";
|
|
13
|
+
|
|
14
|
+
const logger = Logger.get("RebootResubscribeArmer");
|
|
15
|
+
|
|
16
|
+
/** Grace after the returning device's new session before we force re-subscription. */
|
|
17
|
+
const DEFAULT_REBOOT_RESUBSCRIBE_GRACE = Seconds(30);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* How long we wait for an armed device to re-establish a session before assuming it restarted silently and forcing
|
|
21
|
+
* recovery. A device applying an update has normally rebooted and returned within this window, so it is a backstop
|
|
22
|
+
* rather than the common path; kept short so a silently-restarted device recovers well before the full subscription
|
|
23
|
+
* liveness timeout.
|
|
24
|
+
*/
|
|
25
|
+
const EXPECTED_RETURN_TIMEOUT = Minutes(3);
|
|
26
|
+
|
|
27
|
+
interface ArmState {
|
|
28
|
+
newSessionAt?: Timestamp;
|
|
29
|
+
graceTimer?: Timer;
|
|
30
|
+
returnTimer?: Timer;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Speeds up controller re-subscription after a peer reboot for devices that do NOT persist subscriptions.
|
|
35
|
+
*
|
|
36
|
+
* Callers arm a peer when they know it is about to reboot and return (e.g. OTA reaching its apply phase). When the
|
|
37
|
+
* peer's new session appears we (A) close older sessions and (B) start a grace window: if the existing subscription
|
|
38
|
+
* receives a report within it (a persistent device fed it), we leave the subscription alone; otherwise we force
|
|
39
|
+
* re-subscription.
|
|
40
|
+
*/
|
|
41
|
+
export class RebootResubscribeArmer {
|
|
42
|
+
readonly #sessions: SessionManager;
|
|
43
|
+
readonly #subscriptions: ClientSubscriptions;
|
|
44
|
+
readonly #armed = new PeerAddressMap<ArmState>();
|
|
45
|
+
readonly #observers = new ObserverGroup();
|
|
46
|
+
|
|
47
|
+
constructor(sessions: SessionManager, subscriptions: ClientSubscriptions) {
|
|
48
|
+
this.#sessions = sessions;
|
|
49
|
+
this.#subscriptions = subscriptions;
|
|
50
|
+
this.#observers.on(sessions.sessions.added, session => this.#onSessionAdded(session));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
arm(peerAddress: PeerAddress) {
|
|
54
|
+
peerAddress = PeerAddress(peerAddress);
|
|
55
|
+
|
|
56
|
+
let state = this.#armed.get(peerAddress);
|
|
57
|
+
if (state === undefined) {
|
|
58
|
+
state = {};
|
|
59
|
+
this.#armed.set(peerAddress, state);
|
|
60
|
+
} else {
|
|
61
|
+
// Re-arming starts a fresh cycle; drop any grace timer/target from a previous arm.
|
|
62
|
+
state.graceTimer?.stop();
|
|
63
|
+
state.graceTimer = undefined;
|
|
64
|
+
state.newSessionAt = undefined;
|
|
65
|
+
state.returnTimer?.stop();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
state.returnTimer = Time.getTimer("Reboot return deadline", EXPECTED_RETURN_TIMEOUT, () =>
|
|
69
|
+
this.#onReturnTimeout(peerAddress),
|
|
70
|
+
);
|
|
71
|
+
state.returnTimer.start();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
disarm(peerAddress: PeerAddress) {
|
|
75
|
+
peerAddress = PeerAddress(peerAddress);
|
|
76
|
+
const state = this.#armed.get(peerAddress);
|
|
77
|
+
if (state === undefined) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
state.graceTimer?.stop();
|
|
81
|
+
state.returnTimer?.stop();
|
|
82
|
+
this.#armed.delete(peerAddress);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#onSessionAdded(session: NodeSession) {
|
|
86
|
+
if (session.isInitiator) {
|
|
87
|
+
// Only a device-pushed (incoming) session represents a reboot return; a session we ourselves
|
|
88
|
+
// initiated is our own connect and must not trigger the armer.
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const peerAddress = PeerAddress(session.peerAddress);
|
|
93
|
+
const state = this.#armed.get(peerAddress);
|
|
94
|
+
if (state === undefined) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// The device returned, so the return deadline no longer applies.
|
|
99
|
+
state.returnTimer?.stop();
|
|
100
|
+
state.returnTimer = undefined;
|
|
101
|
+
|
|
102
|
+
// Mechanism A — drop the dead pre-reboot sessions so probe/re-subscribe cannot pick them.
|
|
103
|
+
this.#sessions
|
|
104
|
+
.handlePeerShutdown(peerAddress, session.createdAt)
|
|
105
|
+
.catch(error => logger.warn(peerAddress, "Failed to close older sessions", error));
|
|
106
|
+
|
|
107
|
+
state.newSessionAt = session.createdAt;
|
|
108
|
+
state.graceTimer?.stop();
|
|
109
|
+
state.graceTimer = Time.getTimer("Reboot resubscribe grace", DEFAULT_REBOOT_RESUBSCRIBE_GRACE, () =>
|
|
110
|
+
this.#onGraceExpired(peerAddress),
|
|
111
|
+
);
|
|
112
|
+
state.graceTimer.start();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
#onGraceExpired(peerAddress: PeerAddress) {
|
|
116
|
+
const state = this.#armed.get(peerAddress);
|
|
117
|
+
if (state === undefined) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const lastReportStartedAt = this.#subscriptions.lastReportStartedAtFor(peerAddress);
|
|
122
|
+
const fedSinceReturn =
|
|
123
|
+
lastReportStartedAt !== undefined &&
|
|
124
|
+
state.newSessionAt !== undefined &&
|
|
125
|
+
lastReportStartedAt >= state.newSessionAt;
|
|
126
|
+
|
|
127
|
+
if (!fedSinceReturn) {
|
|
128
|
+
this.#subscriptions.closeForPeer(peerAddress);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
this.disarm(peerAddress);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#onReturnTimeout(peerAddress: PeerAddress) {
|
|
135
|
+
const state = this.#armed.get(peerAddress);
|
|
136
|
+
if (state === undefined) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
logger.info(
|
|
141
|
+
peerAddress,
|
|
142
|
+
"did not re-establish a session after the expected reboot; assuming it restarted, reconnecting",
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
this.disarm(peerAddress);
|
|
146
|
+
this.#recoverSilentPeer(peerAddress).catch(error =>
|
|
147
|
+
logger.warn(peerAddress, "Failed to recover peer after apply timeout", error),
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The device was approved to apply and reboot but never re-established a session, so assume it restarted and is
|
|
153
|
+
* silent: drop stale sessions and force re-subscription to recover before the much longer subscription timeout.
|
|
154
|
+
* Re-subscription runs even if session teardown fails — a lingering stale session self-corrects via the
|
|
155
|
+
* re-subscribe probe (which prefers the freshest session), so it cannot be reused.
|
|
156
|
+
*/
|
|
157
|
+
async #recoverSilentPeer(peerAddress: PeerAddress) {
|
|
158
|
+
try {
|
|
159
|
+
await this.#sessions.handlePeerLoss(peerAddress, new PeerUnresponsiveError());
|
|
160
|
+
} catch (error) {
|
|
161
|
+
logger.warn(peerAddress, "Failed to close sessions during apply-timeout recovery", error);
|
|
162
|
+
}
|
|
163
|
+
this.#subscriptions.closeForPeer(peerAddress);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
[Symbol.dispose]() {
|
|
167
|
+
for (const state of this.#armed.values()) {
|
|
168
|
+
state.graceTimer?.stop();
|
|
169
|
+
state.returnTimer?.stop();
|
|
170
|
+
}
|
|
171
|
+
this.#armed.clear();
|
|
172
|
+
this.#observers.close();
|
|
173
|
+
}
|
|
174
|
+
}
|
package/src/peer/index.ts
CHANGED
|
@@ -28,7 +28,7 @@ export abstract class MessageReceptionState {
|
|
|
28
28
|
*/
|
|
29
29
|
export class MessageReceptionStateEncryptedWithoutRollover extends MessageReceptionState {
|
|
30
30
|
protected maximumMessageCounter: number | undefined;
|
|
31
|
-
private messageCounterBitmap =
|
|
31
|
+
private messageCounterBitmap = this.initialBitmap;
|
|
32
32
|
|
|
33
33
|
constructor(messageCounter?: number) {
|
|
34
34
|
super();
|
|
@@ -37,10 +37,18 @@ export class MessageReceptionStateEncryptedWithoutRollover extends MessageRecept
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Bitmap seeded when the window is first anchored to a counter. All-1s for encrypted messages marks every
|
|
42
|
+
* sub-max counter as already-received (replay protection).
|
|
43
|
+
*/
|
|
44
|
+
protected get initialBitmap(): number {
|
|
45
|
+
return 0xffffffff;
|
|
46
|
+
}
|
|
47
|
+
|
|
40
48
|
/** Initialize the message counter state. */
|
|
41
49
|
private initialize(messageCounter: number) {
|
|
42
50
|
this.maximumMessageCounter = messageCounter;
|
|
43
|
-
this.messageCounterBitmap =
|
|
51
|
+
this.messageCounterBitmap = this.initialBitmap;
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
/**
|
|
@@ -173,6 +181,15 @@ export class MessageReceptionStateEncryptedWithRollover extends MessageReception
|
|
|
173
181
|
* back the window to the current location.
|
|
174
182
|
*/
|
|
175
183
|
export class MessageReceptionStateUnencryptedWithRollover extends MessageReceptionStateEncryptedWithoutRollover {
|
|
184
|
+
/**
|
|
185
|
+
* Empty window: no sub-max counters have been received yet, so legitimately reordered messages below the first
|
|
186
|
+
* observed counter stay acceptable. Unencrypted duplicate detection is not a security control, so this loses
|
|
187
|
+
* nothing; matches the CHIP reference implementation, which has never seeded a full window.
|
|
188
|
+
*/
|
|
189
|
+
protected override get initialBitmap(): number {
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
176
193
|
protected override calculateDiff(messageCounter: number) {
|
|
177
194
|
if (this.maximumMessageCounter === undefined) {
|
|
178
195
|
return 0;
|
|
@@ -518,7 +518,7 @@ export class SessionManager {
|
|
|
518
518
|
// work with broken peers (e.g. CHIP test harness).
|
|
519
519
|
let found: NodeSession | undefined;
|
|
520
520
|
for (const session of this.#sessions) {
|
|
521
|
-
if (!session.peerIs(address) || session.isClosing) {
|
|
521
|
+
if (!session.peerIs(address) || session.isClosing || session.isPeerLost) {
|
|
522
522
|
continue;
|
|
523
523
|
}
|
|
524
524
|
|