mirror of
https://github.com/meshcore-dev/meshcore.js.git
synced 2026-04-20 22:13:49 +00:00
Merge branch 'meshcore-dev:master' into master
This commit is contained in:
commit
3f8e11c0ab
4 changed files with 43 additions and 9 deletions
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "@liamcottle/meshcore.js",
|
||||
"version": "1.10.0",
|
||||
"version": "1.11.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@liamcottle/meshcore.js",
|
||||
"version": "1.10.0",
|
||||
"version": "1.11.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@noble/curves": "^1.8.1",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@liamcottle/meshcore.js",
|
||||
"version": "1.10.0",
|
||||
"version": "1.11.0",
|
||||
"description": "",
|
||||
"main": "src/index.js",
|
||||
"types": "index.d.ts",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ class Advert {
|
|||
static ADV_TYPE_ROOM = 3;
|
||||
|
||||
static ADV_LATLON_MASK = 0x10;
|
||||
static ADV_BATTERY_MASK = 0x20;
|
||||
static ADV_TEMPERATURE_MASK = 0x40;
|
||||
static ADV_FEAT1_MASK = 0x20;
|
||||
static ADV_FEAT2_MASK = 0x40;
|
||||
static ADV_NAME_MASK = 0x80;
|
||||
|
||||
constructor(publicKey, timestamp, signature, appData) {
|
||||
|
|
@ -81,6 +81,18 @@ class Advert {
|
|||
lon = bufferReader.readInt32LE();
|
||||
}
|
||||
|
||||
// parse feat1
|
||||
var feat1 = null;
|
||||
if(flags & Advert.ADV_FEAT1_MASK){
|
||||
feat1 = bufferReader.readUInt16LE();
|
||||
}
|
||||
|
||||
// parse feat2
|
||||
var feat2 = null;
|
||||
if(flags & Advert.ADV_FEAT2_MASK){
|
||||
feat2 = bufferReader.readUInt16LE();
|
||||
}
|
||||
|
||||
// parse name (remainder of app data)
|
||||
var name = null;
|
||||
if(flags & Advert.ADV_NAME_MASK){
|
||||
|
|
@ -92,6 +104,8 @@ class Advert {
|
|||
lat: lat,
|
||||
lon: lon,
|
||||
name: name,
|
||||
feat1: feat1,
|
||||
feat2: feat2,
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue