mirror of
https://github.com/jwetzell/psn-js.git
synced 2026-08-13 19:33:51 +00:00
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { Decoders } from '..';
|
|
import { Constants } from '../../constants';
|
|
import { DataPacketChunk } from '../../models/data/data-packet-chunk';
|
|
|
|
function decodeDataPacketChunk(dataPacketChunk: DataPacketChunk) {
|
|
if (dataPacketChunk.has_subchunks && dataPacketChunk.chunk_data && dataPacketChunk.data_len) {
|
|
let offset = 0;
|
|
while (offset < dataPacketChunk.data_len) {
|
|
const view = new DataView(
|
|
dataPacketChunk.chunk_data.buffer,
|
|
dataPacketChunk.chunk_data.byteOffset,
|
|
dataPacketChunk.chunk_data.byteLength
|
|
);
|
|
const chunkId = view.getUint16(offset, true);
|
|
switch (chunkId) {
|
|
case 0x0000:
|
|
dataPacketChunk.packet_header = Decoders.PacketHeaderChunk(dataPacketChunk.chunk_data.slice(offset));
|
|
offset += Constants.CHUNK_HEADER_SIZE;
|
|
if (dataPacketChunk.packet_header?.data_len) {
|
|
offset += dataPacketChunk.packet_header.data_len;
|
|
}
|
|
break;
|
|
case 0x0001:
|
|
dataPacketChunk.tracker_list = Decoders.DataTrackerListChunk(dataPacketChunk.chunk_data.slice(offset));
|
|
offset += Constants.CHUNK_HEADER_SIZE;
|
|
if (dataPacketChunk.tracker_list.data_len) {
|
|
offset += dataPacketChunk.tracker_list.data_len;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export default (buffer: Uint8Array): DataPacketChunk =>
|
|
Decoders.Chunk(buffer, decodeDataPacketChunk) as DataPacketChunk;
|