add sdt leaving data decoding

This commit is contained in:
2024-12-07 10:34:36 -06:00
parent c1a5fb08a9
commit 03df8fec56
2 changed files with 20 additions and 3 deletions
+9 -1
View File
@@ -88,6 +88,14 @@ export type SDTJoinRefuseData = {
refuseCode: number;
};
export type SDTLeavingData = {
leaderComponentID: string;
channelNumber: number;
memberID: number;
reliableSequenceNumber: number;
reasonCode: number;
};
export type SDTWrapperData = {
channelNumber: number;
totalSequenceNumber: number;
@@ -106,7 +114,7 @@ export type SDTAckData = {
export type SessionDataTransportPDU = {
vector: SessionDataTransportVectors;
// TODO(jwetzell): cleanup these types
data: SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData | SDTWrapperData | SDTAckData | Uint8Array;
data: SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData | SDTWrapperData | SDTAckData | SDTLeavingData| Uint8Array;
};
export type SDTClientBlock = {
+11 -2
View File
@@ -1,4 +1,4 @@
import { Protocols, SDTAckData, SDTJoinAcceptData, SDTJoinData, SDTJoinRefuseData, SDTWrapperData, SessionDataTransportPDU, SessionDataTransportVectors, TransportLayerAddress } from '../models';
import { Protocols, SDTAckData, SDTJoinAcceptData, SDTJoinData, SDTJoinRefuseData, SDTLeavingData, SDTWrapperData, SessionDataTransportPDU, SessionDataTransportVectors, TransportLayerAddress } from '../models';
import { toHex } from '../utils';
// TODO(jwetzell): work out flag inheritance, will need previous PDU
@@ -114,7 +114,7 @@ function decodeClientBlock(bytes: Uint8Array) {
}
function decodeData(vector: SessionDataTransportVectors, bytes: Uint8Array): SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData | SDTWrapperData | SDTAckData | Uint8Array {
function decodeData(vector: SessionDataTransportVectors, bytes: Uint8Array): SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData | SDTWrapperData | SDTAckData | SDTLeavingData | Uint8Array {
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)
switch (vector) {
case SessionDataTransportVectors.JOIN: {
@@ -190,6 +190,15 @@ function decodeData(vector: SessionDataTransportVectors, bytes: Uint8Array): SDT
reliableSequenceNumber: view.getUint32(0),
};
}
case SessionDataTransportVectors.LEAVING: {
return {
leaderComponentID: toHex(bytes.subarray(0, 16)),
channelNumber: view.getUint16(16),
memberID: view.getUint16(18),
reliableSequenceNumber: view.getUint32(20),
reasonCode: view.getUint8(24),
};
}
default:
console.error(`unhandled SDT vector: ${vector}`);
return bytes;