mirror of
https://github.com/jwetzell/acn-js.git
synced 2026-09-03 04:28:58 +00:00
add basic wrapper and ack data decoding
This commit is contained in:
@@ -88,8 +88,23 @@ export type SDTJoinRefuseData = {
|
|||||||
refuseCode: number;
|
refuseCode: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type SDTWrapperData = {
|
||||||
|
channelNumber: number;
|
||||||
|
totalSequenceNumber: number;
|
||||||
|
reliableSequenceNumber: number;
|
||||||
|
oldestAvailableWrapper: number;
|
||||||
|
firstMemberToAck: number;
|
||||||
|
lastMemberToAck: number;
|
||||||
|
makThreshold: number;
|
||||||
|
sdtClientBlock: Uint8Array;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type SDTAckData = {
|
||||||
|
reliableSequenceNumber: number;
|
||||||
|
};
|
||||||
|
|
||||||
export type SessionDataTransportPDU = {
|
export type SessionDataTransportPDU = {
|
||||||
vector: SessionDataTransportVectors;
|
vector: SessionDataTransportVectors;
|
||||||
// TODO(jwetzell): cleanup these types
|
// TODO(jwetzell): cleanup these types
|
||||||
data: SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData| Uint8Array;
|
data: SDTJoinData | SDTJoinAcceptData | SDTJoinRefuseData | SDTWrapperData | SDTAckData | Uint8Array;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { SessionDataTransportPDU, SessionDataTransportVectors, TransportLayerAddress } from '../models';
|
import { SDTWrapperData, SessionDataTransportPDU, SessionDataTransportVectors, TransportLayerAddress } from '../models';
|
||||||
import { toHex } from '../utils';
|
import { toHex } from '../utils';
|
||||||
|
|
||||||
// TODO(jwetzell): work out flag inheritance, will need previous PDU
|
// TODO(jwetzell): work out flag inheritance, will need previous PDU
|
||||||
@@ -25,7 +25,6 @@ export function decode(bytes: Uint8Array): SessionDataTransportPDU {
|
|||||||
const lengthL = view.getUint8(lengthOffset);
|
const lengthL = view.getUint8(lengthOffset);
|
||||||
|
|
||||||
let length = (lengthH << 8) + lengthL;
|
let length = (lengthH << 8) + lengthL;
|
||||||
console.log('length', length);
|
|
||||||
if (lengthFlag) {
|
if (lengthFlag) {
|
||||||
lengthOffset += 1;
|
lengthOffset += 1;
|
||||||
const lengthX = view.getUint8(lengthOffset);
|
const lengthX = view.getUint8(lengthOffset);
|
||||||
@@ -107,6 +106,32 @@ export function decode(bytes: Uint8Array): SessionDataTransportPDU {
|
|||||||
data: joinData,
|
data: joinData,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
case SessionDataTransportVectors.REL_WRAP:
|
||||||
|
case SessionDataTransportVectors.UNREL_WRAP: {
|
||||||
|
const wrapperData: SDTWrapperData = {
|
||||||
|
channelNumber: view.getUint16(dataOffset),
|
||||||
|
totalSequenceNumber: view.getUint32(dataOffset + 2),
|
||||||
|
reliableSequenceNumber: view.getUint32(dataOffset + 6),
|
||||||
|
oldestAvailableWrapper: view.getUint32(dataOffset + 10),
|
||||||
|
firstMemberToAck: view.getUint16(dataOffset + 14),
|
||||||
|
lastMemberToAck: view.getUint16(dataOffset + 16),
|
||||||
|
makThreshold: view.getUint16(dataOffset + 18),
|
||||||
|
// TODO(jwetzell): actually decode client block
|
||||||
|
sdtClientBlock: bytes.subarray(dataOffset + 20),
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
vector,
|
||||||
|
data: wrapperData,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
case SessionDataTransportVectors.ACK: {
|
||||||
|
return {
|
||||||
|
vector,
|
||||||
|
data: {
|
||||||
|
reliableSequenceNumber: view.getUint32(dataOffset),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
console.error(`unhandled SDT vector: ${vector}`);
|
console.error(`unhandled SDT vector: ${vector}`);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user