From 26888c8fcf8f1280478317caa3ab3f18abd7b18c Mon Sep 17 00:00:00 2001 From: liamcottle Date: Mon, 10 Mar 2025 14:05:05 +1300 Subject: [PATCH] parse extra packet types --- src/advert.js | 13 ++++----- src/buffer_utils.js | 6 +++++ src/index.js | 4 +++ src/packet.js | 64 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/advert.js b/src/advert.js index f4c1525..babb212 100644 --- a/src/advert.js +++ b/src/advert.js @@ -1,4 +1,3 @@ -import {ed25519} from "@noble/curves/ed25519"; import BufferReader from "./buffer_reader.js"; import BufferWriter from "./buffer_writer.js"; @@ -41,14 +40,16 @@ class Advert { getTypeString() { const flags = this.getFlags(); - if(flags & Advert.ADV_TYPE_NONE) return "ADV_TYPE_NONE"; - if(flags & Advert.ADV_TYPE_CHAT) return "ADV_TYPE_CHAT"; - if(flags & Advert.ADV_TYPE_REPEATER) return "ADV_TYPE_REPEATER"; - if(flags & Advert.ADV_TYPE_ROOM) return "ADV_TYPE_ROOM"; + if(flags & Advert.ADV_TYPE_NONE) return "NONE"; + if(flags & Advert.ADV_TYPE_CHAT) return "CHAT"; + if(flags & Advert.ADV_TYPE_REPEATER) return "REPEATER"; + if(flags & Advert.ADV_TYPE_ROOM) return "ROOM"; return null; } - isVerified() { + async isVerified() { + + const ed25519 = await import("@noble/curves/ed25519"); // build signed data const bufferWriter = new BufferWriter(); diff --git a/src/buffer_utils.js b/src/buffer_utils.js index fdb029d..ee8b932 100644 --- a/src/buffer_utils.js +++ b/src/buffer_utils.js @@ -1,5 +1,11 @@ class BufferUtils { + static bytesToHex(uint8Array) { + return Array.from(uint8Array).map(byte => { + return byte.toString(16).padStart(2, '0'); + }).join(''); + } + static areBuffersEqual(byteArray1, byteArray2) { // ensure length is the same diff --git a/src/index.js b/src/index.js index 2e02005..e3bb8c8 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,9 @@ import BleConnection from "./connection/ble_connection.js"; import SerialConnection from "./connection/serial_connection.js"; import TCPConnection from "./connection/tcp_connection.js"; import Constants from "./constants.js"; +import Advert from "./advert.js"; import Packet from "./packet.js"; +import BufferUtils from "./buffer_utils.js"; export { Connection, @@ -11,5 +13,7 @@ export { SerialConnection, TCPConnection, Constants, + Advert, Packet, + BufferUtils, }; diff --git a/src/packet.js b/src/packet.js index c225583..afd3e2c 100644 --- a/src/packet.js +++ b/src/packet.js @@ -105,12 +105,31 @@ class Packet { parsePayload() { switch(this.getPayloadType()){ + case Packet.PAYLOAD_TYPE_PATH: return this.parsePayloadTypePath(); case Packet.PAYLOAD_TYPE_REQ: return this.parsePayloadTypeReq(); + case Packet.PAYLOAD_TYPE_RESPONSE: return this.parsePayloadTypeResponse(); + case Packet.PAYLOAD_TYPE_TXT_MSG: return this.parsePayloadTypeTxtMsg(); case Packet.PAYLOAD_TYPE_ACK: return this.parsePayloadTypeAck(); + case Packet.PAYLOAD_TYPE_ANON_REQ: return this.parsePayloadTypeAnonReq(); default: return null; } } + parsePayloadTypePath() { + + // parse bytes + const bufferReader = new BufferReader(this.payload); + const dest = bufferReader.readByte(); + const src = bufferReader.readByte(); + // todo other fields + + return { + src: src, + dest: dest, + }; + + } + parsePayloadTypeReq() { // parse bytes @@ -127,12 +146,57 @@ class Packet { } + parsePayloadTypeResponse() { + + // parse bytes + const bufferReader = new BufferReader(this.payload); + const dest = bufferReader.readByte(); + const src = bufferReader.readByte(); + // todo other fields + + return { + src: src, + dest: dest, + }; + + } + + parsePayloadTypeTxtMsg() { + + // parse bytes + const bufferReader = new BufferReader(this.payload); + const dest = bufferReader.readByte(); + const src = bufferReader.readByte(); + // todo other fields + + return { + src: src, + dest: dest, + }; + + } + parsePayloadTypeAck() { return { ack_code: this.payload, }; } + parsePayloadTypeAnonReq() { + + // parse bytes + const bufferReader = new BufferReader(this.payload); + const dest = bufferReader.readByte(); + const srcPublicKey = bufferReader.readBytes(32); + // todo other fields + + return { + src: srcPublicKey, + dest: dest, + }; + + } + } export default Packet;