parse transport codes

This commit is contained in:
liamcottle 2026-02-11 01:05:30 +13:00
parent 9a979df471
commit 7ba63d5f54

View file

@ -10,10 +10,10 @@ class Packet {
static PH_VER_SHIFT = 6;
static PH_VER_MASK = 0x03; // 2-bits
static ROUTE_TYPE_RESERVED1 = 0x00; // FUTURE
static ROUTE_TYPE_TRANSPORT_FLOOD = 0x00; // flood mode + transport codes
static ROUTE_TYPE_FLOOD = 0x01; // flood mode, needs 'path' to be built up (max 64 bytes)
static ROUTE_TYPE_DIRECT = 0x02; // direct route, 'path' is supplied
static ROUTE_TYPE_RESERVED2 = 0x03; // FUTURE
static ROUTE_TYPE_TRANSPORT_DIRECT = 0x03; // direct route + transport codes
static PAYLOAD_TYPE_REQ = 0x00; // request (prefixed with dest/src hashes, MAC) (enc data: timestamp, blob)
static PAYLOAD_TYPE_RESPONSE = 0x01; // response to REQ or ANON_REQ (prefixed with dest/src hashes, MAC) (enc data: timestamp, blob)
@ -27,12 +27,14 @@ class Packet {
static PAYLOAD_TYPE_TRACE = 0x09; // trace a path, collecting SNR for each hop
static PAYLOAD_TYPE_RAW_CUSTOM = 0x0F; // custom packet as raw bytes, for applications with custom encryption, payloads, etc
constructor(header, path, payload) {
constructor(header, path, payload, transportCode1, transportCode2) {
this.header = header;
this.path = path;
this.payload = payload;
this.transportCode1 = transportCode1;
this.transportCode2 = transportCode2;
// parsed info
this.route_type = this.getRouteType();
@ -45,12 +47,28 @@ class Packet {
}
static fromBytes(bytes) {
const bufferReader = new BufferReader(bytes);
const header = bufferReader.readByte();
// check if packet has transport codes
const routeType = header & Packet.PH_ROUTE_MASK;
const hasTransportCodes = routeType === Packet.ROUTE_TYPE_TRANSPORT_FLOOD || routeType === Packet.ROUTE_TYPE_TRANSPORT_DIRECT;
// parse transport codes
var transportCode1 = null;
var transportCode2 = null;
if(hasTransportCodes){
transportCode1 = bufferReader.readUInt16LE();
transportCode2 = bufferReader.readUInt16LE();
}
const pathLen = bufferReader.readInt8();
const path = bufferReader.readBytes(pathLen);
const payload = bufferReader.readRemainingBytes();
return new Packet(header, path, payload);
return new Packet(header, path, payload, transportCode1, transportCode2);
}
getRouteType() {
@ -61,6 +79,8 @@ class Packet {
switch(this.getRouteType()){
case Packet.ROUTE_TYPE_FLOOD: return "FLOOD";
case Packet.ROUTE_TYPE_DIRECT: return "DIRECT";
case Packet.ROUTE_TYPE_TRANSPORT_FLOOD: return "TRANSPORT_FLOOD";
case Packet.ROUTE_TYPE_TRANSPORT_DIRECT: return "TRANSPORT_DIRECT";
default: return null;
}
}