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;