From 21b90ee323be60c1a15632216d7ce2914e6b3cbb Mon Sep 17 00:00:00 2001 From: Tau Date: Mon, 26 Nov 2018 19:02:30 -0500 Subject: [PATCH] Add lookup cmd decoder --- src/aimedb/cmd.js | 12 ++++++++++++ src/aimedb/cmd.test.js | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/aimedb/cmd.js b/src/aimedb/cmd.js index 0c26021..289d477 100644 --- a/src/aimedb/cmd.js +++ b/src/aimedb/cmd.js @@ -16,10 +16,22 @@ class Decoder extends Transform { return { gameId, keychipId } } + static lookup(payload) { + const luid = payload.slice(0x0020, 0x002A) + + return { luid, ...Decoder.ident(payload) } + } + _transform(chunk, encoding, callback) { const cmd = chunk.readUInt16LE(0x04) switch (cmd) { + case 0x000F: + return callback(null, { + cmd: 'lookup', + ...Decoder.lookup(chunk), + }) + case 0x0064: return callback(null, { cmd: 'hello', diff --git a/src/aimedb/cmd.test.js b/src/aimedb/cmd.test.js index 8773dc9..031cb56 100644 --- a/src/aimedb/cmd.test.js +++ b/src/aimedb/cmd.test.js @@ -18,6 +18,30 @@ test('decode hello', () => { const obj = decode(req) + expect(obj.cmd).toBe('hello') expect(obj.gameId).toBe('SDBT') expect(obj.keychipId).toBe('A69E01A9999') }) + +test('decode lookup', () => { + const req = Buffer.from([ + 0x3e, 0xa1, 0x87, 0x30, 0x0f, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x53, 0x44, 0x42, 0x54, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x36, 0x39, 0x45, + 0x30, 0x31, 0x41, 0x39, 0x39, 0x39, 0x39, 0x00, + 0x01, 0x03, 0x64, 0x95, 0x85, 0x05, 0x23, 0x03, + 0x06, 0x76, 0x01, 0x02, 0x22, 0xc6, 0x4e, 0x00, + ]) + + const obj = decode(req) + + expect(obj.cmd).toBe('lookup') + expect(obj.gameId).toBe('SDBT') + expect(obj.keychipId).toBe('A69E01A9999') + expect(obj.luid).toEqual( + Buffer.from([ + 0x01, 0x03, 0x64, 0x95, 0x85, 0x05, 0x23, 0x03, + 0x06, 0x76, + ]) + ) +})