Skip to content

Commit

Permalink
Merge pull request #4 from GeorgeTsagk/add-assembly-buffers
Browse files Browse the repository at this point in the history
Add assembly buffers
  • Loading branch information
GeorgeTsagk committed Jun 5, 2022
2 parents 5559a5b + 84ed552 commit 73411e6
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 5 deletions.
24 changes: 23 additions & 1 deletion src/handle-command.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { randomBytes } = require('crypto')
const fs = require('fs')
const {
sendDataToAddress,
setDestinationAddress,
Expand All @@ -23,6 +23,28 @@ handlers['set'] = (args) => {
setDestinationAddress(args[1])
}

handlers['send'] = (args) => {
if (args.length < 2) {
console.log('Specify filename')
return
}
try {
const buff = fs.readFileSync(args[1])
const dataStructs = dataToDataStructArray(buff)

dataStructs.forEach(
(dataStruct) => {
encodeDataStruct(dataStruct)
.then((buf) => {
sendDataToAddress(getDestinationAddress(), buf)
})
}
)
} catch (e) {
console.log(e)
}
}

handlers['speak'] = (args) => {
if (args.length < 2) {
console.log('Specify data')
Expand Down
3 changes: 3 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
const readline = require('readline');

const { handleReceivedRecords } = require('./listen-sats')
const { setDataReadyCallback } = require('./utils/data-struct/assembly-buffer')
const { defaultDataReadyCallback } = require('./utils/default-data-ready-callback')
const { defaultListenHandler } = require('./utils/default-listen-handler')
const { commandHandler } = require('./handle-command')

handleReceivedRecords(defaultListenHandler)
setDataReadyCallback(defaultDataReadyCallback)

const rl = readline.createInterface({
input: process.stdin,
Expand Down
63 changes: 63 additions & 0 deletions src/utils/data-struct/assembly-buffer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
const { decodeDataStruct } = require('./data-struct')

let buffers = {}

let completedBufferCallback = (id) => {
dataReadyCallback(buffers[id].buffer)
delete buffers[id]
}

let dataReadyCallback = () => {}

const setDataReadyCallback = (callback) => {
dataReadyCallback = callback
}

const checkIfBufferComplete = (assemblyBuffer) => {
if(assemblyBuffer.receivedBytes === assemblyBuffer.buffer.length) {
return true
}
return false
}

const receiveDataStructBuffer = async (dataStructBuffer) => {
const dataStruct = await decodeDataStruct(dataStructBuffer)
if(dataStruct.fragment == undefined) {
dataReadyCallback(dataStruct.payload)
}

if(!(dataStruct.fragment.fragmentationId in buffers)){
console.log('Creating new buffer with id', dataStruct.fragment.fragmentationId)
buffers[dataStruct.fragment.fragmentationId] = {
receivedBytes: 0,
buffer: Buffer.alloc(dataStruct.fragment.totalSize)
}
}

for(let i = 0; i < dataStruct.payload.length; i++) {
buffers[dataStruct.fragment.fragmentationId].buffer.writeUint8(
dataStruct.payload.readUint8(i),
dataStruct.fragment.offset + i
)
buffers[dataStruct.fragment.fragmentationId].receivedBytes++
}
console.log(
'Fragment Received:',
`${dataStruct.payload.length} B`,
'|',
buffers[dataStruct.fragment.fragmentationId].receivedBytes,
'/',
buffers[dataStruct.fragment.fragmentationId].buffer.length,
'B'

)

if(checkIfBufferComplete(buffers[dataStruct.fragment.fragmentationId])) {
completedBufferCallback(dataStruct.fragment.fragmentationId)
}
}

module.exports = {
receiveDataStructBuffer,
setDataReadyCallback
}
6 changes: 4 additions & 2 deletions src/utils/data-struct/data-struct.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,10 @@ const decodeDataStruct = (dataStructBuffer) => {
var DataStructMessage = root.lookupType("datastruct.DataStruct");

var message = DataStructMessage.decode(dataStructBuffer);
console.log('Received Message:', message)
var object = DataStructMessage.toObject(message);
var object = DataStructMessage.toObject(message, {
longs: String,
enums: String,
});

resolve(object)
});
Expand Down
9 changes: 9 additions & 0 deletions src/utils/default-data-ready-callback.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const defaultDataReadyCallback = (data) => {
console.log('-----------DATA-READY------------')
console.log(data.toString('utf8'))
console.log('---------------------------------')
}

module.exports = {
defaultDataReadyCallback
}
4 changes: 2 additions & 2 deletions src/utils/default-listen-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const configLoader = require('../config/config-loader')
const { verifyDataSig } = require('./data-sig/data-sig')
const { signer } = require('../lnd-rpc/signer')
const { lightning } = require('../lnd-rpc/lightning')
const { receiveDataStructBuffer } = require('./data-struct/assembly-buffer')
const config = configLoader.getConfig()

const defaultListenHandler = async (records) => {
Expand All @@ -18,8 +19,7 @@ const defaultListenHandler = async (records) => {

const valid = await verifyDataSig(dataSigBuf, dataStructBuf)
if (!valid) return
console.log("DataSig Verified Data Received: ")
console.log(config.data_struct.tlv_key, ':', dataStructBuf)
receiveDataStructBuffer(dataStructBuf)

}

Expand Down

0 comments on commit 73411e6

Please sign in to comment.