1.0.0 • Published 4 years ago
@ssv-embedded/ssb-assembler v1.0.0
@ssv-embedded/ssb-assembler
This module assembles SSV/SSB fragments to packets.
API
assemblerFactory
const {assemblerFactory} = require('@ssv-embedded/ssb-assembler');
const {createAssembler} = assemblerFactors(deps);deps is an object for providing optional dependencies:
checkManId: Is a function implementing(manId) => valid. It must returntrueif the givenmanIdis valid. Default:(manId) => manId === 0x0059 || manId === 0x0ad3.checkType: Is a function implementing(type) => valid. It must returntrueif the giventypeis valid. Default:(type) => type === 0x40 || type === 0x41.getTs: Function returning the current Unix timestamp in msec. Default:Date.nowpacketTimeout: Timeout in msec for dropping incompletely received packets. Default:5000.
createAssembler
const assembler = createAssembler(opts);Creates a new Assembler instance. opts is an object:
handlePacket: Mandatory callback function:(packet) => valid. Is called if a full packet has been received.packetis an instance ofPacket. The callback must returntrueis the received packet is valid an sequence counters should be increased.getSeq: Helper function(senderHash) => seqto retrieve the last seen sequence numberseqfor a given sender represented by the StringsenderHash. If the sender hasn't been seen before, this function must returnundefined. Default: Internal in-memory sequence tracker. Won't be persisted onceassembleris freed.setSeq: Helper function(senderHash, seq) => {}to set the last seen sequence numberseqfor a given sender represented by the StringsenderHash. Default: Internal in-memory sequence tracker. Won't be persisted onceassembleris freed.
Class: Assembler
Method: parseFragment(fragment)
try {
assembler.parseFragment(fragment);
} catch (err) {
...
}This call parses fragment. It may throw err if fragment cannot be processed. fragment is an object representing the received fragment:
address: Mandatory. MAC address of the sending device. Format:00:11:22:aa:dd:ff.gw: Mandatory. MAC address of the receiving device. Format:00:11:22:aa:dd:ff.data: Mandatory. Hex-encoded string of the BLE advertisement frame's `Manufacturer Specific data.rssi: Optional RSSI of the advertisment frame.ts: Optional timestamp of the receiption time.
Class: Packet
Properties
address: Sender of the packetgw: Receiver of the fragment with the highest RSSI.rssi: Highest seen RSSI.manId: Company ID.type: Packet type.seq: Sequence number.ts: Lowest seen timestamp.gwStats: Object holding stats of all seengws.
Method: toBuffer()
const buf = packet.toBuffer();
const manId = buf.readUInt16LE(0);
const type = buf.readUInt8(2);
const seq = buf.readUInt32LE(3);
const payload = buf.slice(7);Returns the packet including its header:
- 2B Company ID
manId - 1B Packet Type
type - 4B Sequence number
seq - nB Payload
payload
1.0.0
4 years ago