parse extra packet types

This commit is contained in:
liamcottle 2025-03-10 14:05:05 +13:00
parent 1d88787c92
commit 26888c8fcf
4 changed files with 81 additions and 6 deletions

View file

@ -1,4 +1,3 @@
import {ed25519} from "@noble/curves/ed25519";
import BufferReader from "./buffer_reader.js"; import BufferReader from "./buffer_reader.js";
import BufferWriter from "./buffer_writer.js"; import BufferWriter from "./buffer_writer.js";
@ -41,14 +40,16 @@ class Advert {
getTypeString() { getTypeString() {
const flags = this.getFlags(); const flags = this.getFlags();
if(flags & Advert.ADV_TYPE_NONE) return "ADV_TYPE_NONE"; if(flags & Advert.ADV_TYPE_NONE) return "NONE";
if(flags & Advert.ADV_TYPE_CHAT) return "ADV_TYPE_CHAT"; if(flags & Advert.ADV_TYPE_CHAT) return "CHAT";
if(flags & Advert.ADV_TYPE_REPEATER) return "ADV_TYPE_REPEATER"; if(flags & Advert.ADV_TYPE_REPEATER) return "REPEATER";
if(flags & Advert.ADV_TYPE_ROOM) return "ADV_TYPE_ROOM"; if(flags & Advert.ADV_TYPE_ROOM) return "ROOM";
return null; return null;
} }
isVerified() { async isVerified() {
const ed25519 = await import("@noble/curves/ed25519");
// build signed data // build signed data
const bufferWriter = new BufferWriter(); const bufferWriter = new BufferWriter();

View file

@ -1,5 +1,11 @@
class BufferUtils { class BufferUtils {
static bytesToHex(uint8Array) {
return Array.from(uint8Array).map(byte => {
return byte.toString(16).padStart(2, '0');
}).join('');
}
static areBuffersEqual(byteArray1, byteArray2) { static areBuffersEqual(byteArray1, byteArray2) {
// ensure length is the same // ensure length is the same

View file

@ -3,7 +3,9 @@ import BleConnection from "./connection/ble_connection.js";
import SerialConnection from "./connection/serial_connection.js"; import SerialConnection from "./connection/serial_connection.js";
import TCPConnection from "./connection/tcp_connection.js"; import TCPConnection from "./connection/tcp_connection.js";
import Constants from "./constants.js"; import Constants from "./constants.js";
import Advert from "./advert.js";
import Packet from "./packet.js"; import Packet from "./packet.js";
import BufferUtils from "./buffer_utils.js";
export { export {
Connection, Connection,
@ -11,5 +13,7 @@ export {
SerialConnection, SerialConnection,
TCPConnection, TCPConnection,
Constants, Constants,
Advert,
Packet, Packet,
BufferUtils,
}; };

View file

@ -105,12 +105,31 @@ class Packet {
parsePayload() { parsePayload() {
switch(this.getPayloadType()){ switch(this.getPayloadType()){
case Packet.PAYLOAD_TYPE_PATH: return this.parsePayloadTypePath();
case Packet.PAYLOAD_TYPE_REQ: return this.parsePayloadTypeReq(); 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_ACK: return this.parsePayloadTypeAck();
case Packet.PAYLOAD_TYPE_ANON_REQ: return this.parsePayloadTypeAnonReq();
default: return null; 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() { parsePayloadTypeReq() {
// parse bytes // 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() { parsePayloadTypeAck() {
return { return {
ack_code: this.payload, 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; export default Packet;