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