From 76892f6e19fe5a80cfce202fe53bf8ca18c69827 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 5 Dec 2024 23:21:58 -0600 Subject: [PATCH] add support for decoding join refuse data --- packages/acn/src/models.ts | 10 +++++++++- packages/acn/src/pdu/sdt.ts | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/acn/src/models.ts b/packages/acn/src/models.ts index 56e80e8..5b1e4bf 100644 --- a/packages/acn/src/models.ts +++ b/packages/acn/src/models.ts @@ -80,8 +80,16 @@ export type SDTJoinAcceptData = { reciprocalChannel: number; }; +export type SDTJoinRefuseData = { + leaderComponentID: string; + channelNumber: number; + memberID: number; + reliableSequenceNumber: number; + refuseCode: number; +}; + export type SessionDataTransportPDU = { vector: SessionDataTransportVectors; // TODO(jwetzell): cleanup these types - data: SDTJoinData | SDTJoinAcceptData | Uint8Array; + data: SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData| Uint8Array; }; diff --git a/packages/acn/src/pdu/sdt.ts b/packages/acn/src/pdu/sdt.ts index d231de2..27108a8 100644 --- a/packages/acn/src/pdu/sdt.ts +++ b/packages/acn/src/pdu/sdt.ts @@ -93,6 +93,20 @@ export function decode(bytes: Uint8Array): SessionDataTransportPDU { data: joinData, }; } + case SessionDataTransportVectors.JOIN_REFUSE: { + const joinData = { + leaderComponentID: toHex(bytes.subarray(dataOffset, dataOffset + 16)), + channelNumber: view.getUint16(dataOffset + 16), + memberID: view.getUint16(dataOffset + 18), + reliableSequenceNumber: view.getUint32(dataOffset + 20), + refuseCode: view.getUint8(dataOffset + 24), + }; + + return { + vector, + data: joinData, + }; + } default: console.error(`unhandled SDT vector: ${vector}`); break;