@ssv-embedded/ssb-assembler
v1.0.0
Published
SSV/SSB Assembler
Downloads
6
Readme
@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 returntrue
if the givenmanId
is valid. Default:(manId) => manId === 0x0059 || manId === 0x0ad3
.checkType
: Is a function implementing(type) => valid
. It must returntrue
if the giventype
is valid. Default:(type) => type === 0x40 || type === 0x41
.getTs
: Function returning the current Unix timestamp in msec. Default:Date.now
packetTimeout
: 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.packet
is an instance ofPacket
. The callback must returntrue
is the received packet is valid an sequence counters should be increased.getSeq
: Helper function(senderHash) => seq
to retrieve the last seen sequence numberseq
for 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 onceassembler
is freed.setSeq
: Helper function(senderHash, seq) => {}
to set the last seen sequence numberseq
for a given sender represented by the StringsenderHash
. Default: Internal in-memory sequence tracker. Won't be persisted onceassembler
is 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 seengw
s.
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