From ed6a4675af2a37d298daa0e99da29a6a33be9146 Mon Sep 17 00:00:00 2001 From: Tau Date: Mon, 26 Nov 2018 19:10:35 -0500 Subject: [PATCH] Eliminate Framer --- src/aimedb/cmd.js | 23 +++++++++++++++++++---- src/aimedb/frame.js | 29 ----------------------------- src/aimedb/pipeline.js | 3 +-- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/aimedb/cmd.js b/src/aimedb/cmd.js index 289d477..6b37e80 100644 --- a/src/aimedb/cmd.js +++ b/src/aimedb/cmd.js @@ -58,21 +58,36 @@ class Encoder extends Transform { }) } + static init(length) { + const buf = Buffer.alloc(length) + + buf.writeUInt16LE(0xA13E, 0x0000) // Magic? + buf.writeUInt16LE(0x3087, 0x0002) // ??? + buf.writeUInt16LE(length, 0x0006) + + return buf + } + _transform(chunk, encoding, callback) { console.log('Aimedb: Encode', chunk) - let payload + let buf switch (chunk.cmd) { case 'hello': - payload = Buffer.alloc(24) - payload.writeInt16LE(chunk.status) + buf = Encoder.init(32) + buf.writeInt16LE(0x0065, 0x0004) // cmd code + buf.writeInt16LE(chunk.status, 0x0008) - return callback(null, { cmd: 0x0065, payload }) + break default: return callback(newError(`Unimplemented response: ${cmd}`)) } + + console.log('Aimedb: Send', buf) + + return callback(null, buf) } } diff --git a/src/aimedb/frame.js b/src/aimedb/frame.js index dd4aad3..67227a2 100644 --- a/src/aimedb/frame.js +++ b/src/aimedb/frame.js @@ -39,35 +39,6 @@ class Deframer extends Transform { } } -class Framer extends Transform { - constructor(options) { - super({ - writableObjectMode: true, - ...options - }) - } - - _transform(chunk, encoding, callback) { - const { cmd, payload } = chunk - - // Message size must be rounded up to a multiple of 16 - - const len = 8 + payload.length - const buf = Buffer.alloc((len + 15) & ~15) - - buf.writeUInt16LE(0xA13E, 0) // Magic? - buf.writeUInt16LE(0x3087, 2) // ??? - buf.writeUInt16LE(cmd, 4) - buf.writeUInt16LE(buf.length, 6) - payload.copy(buf, 8) - - console.log('Aimedb: Send', buf) - - callback(null, buf) - } -} - module.exports = { Deframer, - Framer, } diff --git a/src/aimedb/pipeline.js b/src/aimedb/pipeline.js index 1e97a4c..a737644 100644 --- a/src/aimedb/pipeline.js +++ b/src/aimedb/pipeline.js @@ -1,7 +1,7 @@ const crypto = require('crypto') const { pipeline } = require('stream') -const { Deframer, Framer } = require('./frame') +const { Deframer } = require('./frame') const { Decoder, Encoder } = require('./cmd') const K = Buffer.from('Copyright(C)SEGA', 'utf8') @@ -20,7 +20,6 @@ function setup(socket) { pipeline( output, - new Framer(), crypto .createCipheriv('aes-128-ecb', K, null) .setAutoPadding(false),