mirror of
https://github.com/jwetzell/psn-js.git
synced 2026-09-08 07:49:17 +00:00
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { Constants } from '../../constants.js';
|
|
import type {
|
|
InfoPacketChunk,
|
|
InfoPacketChunkData,
|
|
} from '../../models/info/info-packet-chunk.js';
|
|
import { Decoders } from '../index.js';
|
|
|
|
export default (buffer: Uint8Array): InfoPacketChunk => {
|
|
const chunk = Decoders.Chunk(buffer);
|
|
|
|
const data: InfoPacketChunkData = {};
|
|
|
|
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
|
|
let offset = 0;
|
|
while (offset < chunk.header.dataLen) {
|
|
const chunkId =
|
|
(chunk.chunkData.subarray(offset)[1] << 8) +
|
|
chunk.chunkData.subarray(offset)[0];
|
|
switch (chunkId) {
|
|
case 0x0000:
|
|
data.packetHeader = Decoders.PacketHeaderChunk(
|
|
chunk.chunkData.subarray(offset)
|
|
);
|
|
offset += Constants.CHUNK_HEADER_SIZE;
|
|
if (data.packetHeader?.chunk.header.dataLen) {
|
|
offset += data.packetHeader.chunk.header.dataLen;
|
|
}
|
|
break;
|
|
case 0x0001:
|
|
data.systemName = Decoders.InfoSystemNameChunk(
|
|
chunk.chunkData.subarray(offset)
|
|
);
|
|
offset += Constants.CHUNK_HEADER_SIZE;
|
|
if (data.systemName?.chunk.header.dataLen) {
|
|
offset += data.systemName?.chunk.header.dataLen;
|
|
}
|
|
break;
|
|
case 0x0002:
|
|
data.trackerList = Decoders.InfoTrackerListChunk(
|
|
chunk.chunkData.subarray(offset)
|
|
);
|
|
offset += Constants.CHUNK_HEADER_SIZE;
|
|
if (data.trackerList?.chunk.header.dataLen) {
|
|
offset += data.trackerList.chunk.header.dataLen;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
chunk,
|
|
data,
|
|
};
|
|
};
|