From 9dd45558ec17da6824ad17c46dcfe4645e3e3d88 Mon Sep 17 00:00:00 2001 From: Tau Date: Thu, 23 May 2019 13:54:29 -0400 Subject: [PATCH] aimedb: Stub a FeliCa lookup response --- src/aimedb/decoder.ts | 10 ++++++++++ src/aimedb/encoder.ts | 10 ++++++++++ src/aimedb/handler.ts | 17 +++++++++++++++++ src/aimedb/request.ts | 7 +++++++ src/aimedb/response.ts | 6 ++++++ 5 files changed, 50 insertions(+) diff --git a/src/aimedb/decoder.ts b/src/aimedb/decoder.ts index e6ae581..d0776a1 100644 --- a/src/aimedb/decoder.ts +++ b/src/aimedb/decoder.ts @@ -19,6 +19,15 @@ function readRegisterRequest(msg: Buffer): Request.RegisterRequest { }; } +function readFeliCaLookupRequest(msg: Buffer): Request.FeliCaLookupRequest { + return { + ...begin(msg), + type: "felica_lookup", + idm: msg.slice(0x0020, 0x0028).toString("hex"), + pmm: msg.slice(0x0028, 0x0030).toString("hex"), + }; +} + function readLogRequest(msg: Buffer): Request.LogRequest { // idk what any of this stuff means yet // field20 and field28 appear to be an aime id but that is all. @@ -79,6 +88,7 @@ function readGoodbyeRequest(msg: Buffer): Request.GoodbyeRequest { const readers = new Map Request.AimeRequest>(); +readers.set(0x0001, readFeliCaLookupRequest); readers.set(0x0004, readLookupRequest); readers.set(0x0005, readRegisterRequest); readers.set(0x0009, readLogRequest); diff --git a/src/aimedb/encoder.ts b/src/aimedb/encoder.ts index 21b849a..42599b3 100644 --- a/src/aimedb/encoder.ts +++ b/src/aimedb/encoder.ts @@ -32,6 +32,14 @@ export class Encoder extends Transform { let buf: Buffer; switch (msg.type) { + case "felica_lookup": + buf = begin(0x0030); + buf.writeUInt16LE(0x0003, 0x0004); // cmd code + buf.writeUInt16LE(msg.status, 0x0008); + buf.write(msg.accessCode, 0x0024, "hex"); + + break; + case "hello": buf = begin(0x0020); buf.writeUInt16LE(0x0065, 0x0004); // cmd code @@ -92,6 +100,8 @@ export class Encoder extends Transform { break; default: + const exhaust: never = msg; + return callback(new Error("Unimplemented response type")); } diff --git a/src/aimedb/handler.ts b/src/aimedb/handler.ts index 9eee352..938d41c 100644 --- a/src/aimedb/handler.ts +++ b/src/aimedb/handler.ts @@ -22,6 +22,18 @@ function campaign( return { type: req.type, status: 1 }; } +function feliCaLookup( + rep: Repositories, + req: Req.FeliCaLookupRequest, + now: Date +): Res.FeliCaLookupResponse { + console.log("Aimedb: FeliCa access code lookup"); + + // Well, this access code transformation is the million dollar question eh + + return { type: req.type, status: 1, accessCode: "00010203040506070809" }; +} + async function lookup( rep: Repositories, req: Req.LookupRequest, @@ -88,6 +100,9 @@ export async function dispatch( case "campaign": return campaign(rep, req, now); + case "felica_lookup": + return feliCaLookup(rep, req, now); + case "lookup": return lookup(rep, req, now); @@ -106,6 +121,8 @@ export async function dispatch( return undefined; default: + const exhaust: never = req; + throw new Error("Aimedb: Handler not implemented!"); } } diff --git a/src/aimedb/request.ts b/src/aimedb/request.ts index 79deef3..8d2072d 100644 --- a/src/aimedb/request.ts +++ b/src/aimedb/request.ts @@ -3,6 +3,12 @@ export interface AimeRequestBase { keychipId: string; } +export interface FeliCaLookupRequest extends AimeRequestBase { + type: "felica_lookup"; + idm: string; + pmm: string; +} + export interface RegisterRequest extends AimeRequestBase { type: "register"; luid: string; @@ -43,6 +49,7 @@ export interface GoodbyeRequest { } export type AimeRequest = + | FeliCaLookupRequest | CampaignRequest | GoodbyeRequest | HelloRequest diff --git a/src/aimedb/response.ts b/src/aimedb/response.ts index c201f98..9863cb5 100644 --- a/src/aimedb/response.ts +++ b/src/aimedb/response.ts @@ -6,6 +6,11 @@ export interface AimeResponseBase { status: number; } +export interface FeliCaLookupResponse extends AimeResponseBase { + type: "felica_lookup"; + accessCode: string; +} + export interface CampaignResponse extends AimeResponseBase { type: "campaign"; } @@ -38,6 +43,7 @@ export interface RegisterResponse extends AimeResponseBase { } export type AimeResponse = + | FeliCaLookupResponse | CampaignResponse | HelloResponse | LogResponse