mirror of
https://github.com/jwetzell/psn-js.git
synced 2026-08-31 03:49:16 +00:00
convert Data.TrackerListChunk to no lib
This commit is contained in:
@@ -1,22 +1,24 @@
|
|||||||
const Parser = require('binary-parser').Parser;
|
module.exports = (buffer) => {
|
||||||
|
const trackerList = {
|
||||||
|
trackers: [],
|
||||||
|
};
|
||||||
|
|
||||||
const dataTrackerParser = new Parser()
|
// TODO(jwetzell): add error handling
|
||||||
.uint16le('id')
|
let offset = 0;
|
||||||
.uint16le('data_len', {
|
while (offset < buffer.length) {
|
||||||
formatter: (item) => {
|
const trackerChunk = {};
|
||||||
const binary = item.toString(2).padStart(16, '0');
|
trackerChunk.id = buffer.readUInt16LE(offset);
|
||||||
return Number.parseInt(binary.substring(1), 2);
|
offset += 2;
|
||||||
},
|
|
||||||
})
|
|
||||||
.seek(-2)
|
|
||||||
.uint16le('has_subchunks', {
|
|
||||||
formatter: (item) => {
|
|
||||||
const binary = item.toString(2).padStart(16, '0');
|
|
||||||
return binary.charAt(0) === '1';
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.buffer('data', {
|
|
||||||
length: 'data_len',
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = new Parser().array('trackers', { type: dataTrackerParser, readUntil: 'eof' });
|
// NOTE(jwetzell): this data is split up as 1 bit for has_subchunks and 15 bits for the data_len
|
||||||
|
const tempBytesAsBinary = buffer.readUInt16LE(offset).toString(2);
|
||||||
|
trackerChunk.has_subchunks = tempBytesAsBinary.charAt(0) === '0';
|
||||||
|
trackerChunk.data_len = parseInt(tempBytesAsBinary.substring(1), 2);
|
||||||
|
offset += 2;
|
||||||
|
trackerChunk.data = buffer.subarray(offset, offset + trackerChunk.data_len);
|
||||||
|
offset += trackerChunk.data_len;
|
||||||
|
trackerList.trackers.push(trackerChunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
return trackerList;
|
||||||
|
};
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class DataPacket {
|
|||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
const dataTrackerList = Decoders.Data.TrackerListChunk.parse(subChunk.chunk_data);
|
const dataTrackerList = Decoders.Data.TrackerListChunk(subChunk.chunk_data);
|
||||||
dataTrackerList.trackers?.forEach((tracker) => {
|
dataTrackerList.trackers?.forEach((tracker) => {
|
||||||
if (tracker.data && tracker.data_len > 0) {
|
if (tracker.data && tracker.data_len > 0) {
|
||||||
const fields = new Parser()
|
const fields = new Parser()
|
||||||
|
|||||||
Reference in New Issue
Block a user