From 6dc72316060484eb274415f90633c07ed0fc88a3 Mon Sep 17 00:00:00 2001 From: Snowdd1 Date: Mon, 27 Feb 2017 22:36:54 +0100 Subject: [PATCH 1/7] raw-data "telegram" event For handling unparsed data this commit adds an 'telegram' event (only with data, otherwise use "read" event) emits `"telegram", event, src, dest, buffer` --- lib/parser.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index e9deb50..e407fcd 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -76,7 +76,10 @@ Parser.prototype.parseTelegram = function(telegram) { if(len > 8) { val = telegram.slice(10, telegram.length); } - + + // emit raw telegram event, pass the addresses and the buffer, no DPT guessing, copy of data buffer + self.emit('telegram', event, tools.addr2str(src, false), tools.addr2str(dest, true), Buffer.from(val)); + self.decoder.decode(len, val, function(err, type, value) { // emit action event From 81824c6241b4f07b08d128c30a840cafa5b78a18 Mon Sep 17 00:00:00 2001 From: Snowdd1 Date: Mon, 27 Feb 2017 22:39:10 +0100 Subject: [PATCH 2/7] adr2str - Typo tools.adr2str --> tools.addr2str; --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index d06a073..2a74e8b 100644 --- a/index.js +++ b/index.js @@ -7,4 +7,4 @@ exports.Connection = Connection; exports.Parser = Parser; exports.createMessage = createMessage; exports.str2addr = tools.str2addr; -exports.addr2str = tools.adr2str; +exports.addr2str = tools.addr2str; From 16fdbba3ccb22caba0db01bfc7046f7269a8e6d2 Mon Sep 17 00:00:00 2001 From: Raoul Date: Thu, 30 Mar 2017 20:53:54 +0200 Subject: [PATCH 3/7] work around for Buffer.from() for node < 5.1 --- lib/parser.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index e407fcd..21b9df7 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -71,14 +71,29 @@ Parser.prototype.parseTelegram = function(telegram) { // value var val = null; - - val = telegram[telegram.length-1]; - if(len > 8) { + var valbuffer; + if (len<=8) { + val = telegram[telegram.length-1]; + if (Buffer.from) { + valbuffer = Buffer.from(val); + } else { + // ancient nodejs (<5.1) + valbuffer = new Buffer(1); // this is deprecated as of node 6.0.0 and must only be used in older node + valbuffer[0] = val; + } + } else { //if(len > 8) val = telegram.slice(10, telegram.length); + if (Buffer.from) { + valbuffer = Buffer.from(val); + } else { + // ancient nodejs (<5.1) + valbuffer = new Buffer(val.length); // this is deprecated as of node 6.0.0 and must only be used in older node + val.copy(valbuffer); // copies the data buffer to a new location (so it's modification proof) + } } // emit raw telegram event, pass the addresses and the buffer, no DPT guessing, copy of data buffer - self.emit('telegram', event, tools.addr2str(src, false), tools.addr2str(dest, true), Buffer.from(val)); + self.emit('telegram', event, tools.addr2str(src, false), tools.addr2str(dest, true), valbuffer); self.decoder.decode(len, val, function(err, type, value) { From 4994b56441ca50816a8acf4c9df1342565644d6c Mon Sep 17 00:00:00 2001 From: Raoul Date: Thu, 30 Mar 2017 21:05:19 +0200 Subject: [PATCH 4/7] Buffer.from --> Buffer.alloc Buffer.from() existed in node 4.4 - use Buffer.alloc() as test for old node versions --- lib/parser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 21b9df7..6282b01 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -74,7 +74,7 @@ Parser.prototype.parseTelegram = function(telegram) { var valbuffer; if (len<=8) { val = telegram[telegram.length-1]; - if (Buffer.from) { + if (Buffer.alloc) { // use Buffer.alloc as a means of distinction, as Buffer.from existed in node 4.4 but did not work as expected valbuffer = Buffer.from(val); } else { // ancient nodejs (<5.1) @@ -83,7 +83,7 @@ Parser.prototype.parseTelegram = function(telegram) { } } else { //if(len > 8) val = telegram.slice(10, telegram.length); - if (Buffer.from) { + if (Buffer.alloc) { // see above valbuffer = Buffer.from(val); } else { // ancient nodejs (<5.1) From 369069e4ff51fb3b4740b3090dd7d84d33f27318 Mon Sep 17 00:00:00 2001 From: Raoul Date: Fri, 31 Mar 2017 14:42:22 +0200 Subject: [PATCH 5/7] simplify: use new Buffer(buffer) --- lib/parser.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 6282b01..e547ed5 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -78,8 +78,8 @@ Parser.prototype.parseTelegram = function(telegram) { valbuffer = Buffer.from(val); } else { // ancient nodejs (<5.1) - valbuffer = new Buffer(1); // this is deprecated as of node 6.0.0 and must only be used in older node - valbuffer[0] = val; + // val is an integer, to to pass it to Buffer we need to make it an Array of length 1 + valbuffer = new Buffer([val]); // this is deprecated as of node 6.0.0 and must only be used in older node } } else { //if(len > 8) val = telegram.slice(10, telegram.length); @@ -87,8 +87,8 @@ Parser.prototype.parseTelegram = function(telegram) { valbuffer = Buffer.from(val); } else { // ancient nodejs (<5.1) - valbuffer = new Buffer(val.length); // this is deprecated as of node 6.0.0 and must only be used in older node - val.copy(valbuffer); // copies the data buffer to a new location (so it's modification proof) + // val is a buffer itself + valbuffer = new Buffer(val); // this is deprecated as of node 6.0.0 and must only be used in older node } } From 6dd740c789771a7bded1ea82cc2e909370812390 Mon Sep 17 00:00:00 2001 From: Snowdd1 Date: Thu, 6 Apr 2017 20:45:53 +0200 Subject: [PATCH 6/7] readability improvements --- lib/parser.js | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index e547ed5..4c1d6ec 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -3,6 +3,13 @@ var Readable = require('stream').Readable, Decoder = require('./decoder'), tools = require('./tools'); + +var isModernBuffer = ( + typeof Buffer.alloc === 'function' && + typeof Buffer.allocUnsafe === 'function' && + typeof Buffer.from === 'function' + ); + /** * Parser */ @@ -74,22 +81,10 @@ Parser.prototype.parseTelegram = function(telegram) { var valbuffer; if (len<=8) { val = telegram[telegram.length-1]; - if (Buffer.alloc) { // use Buffer.alloc as a means of distinction, as Buffer.from existed in node 4.4 but did not work as expected - valbuffer = Buffer.from(val); - } else { - // ancient nodejs (<5.1) - // val is an integer, to to pass it to Buffer we need to make it an Array of length 1 - valbuffer = new Buffer([val]); // this is deprecated as of node 6.0.0 and must only be used in older node - } + valbuffer = isModernBuffer ? Buffer.from(val) : new Buffer([val]); } else { //if(len > 8) val = telegram.slice(10, telegram.length); - if (Buffer.alloc) { // see above - valbuffer = Buffer.from(val); - } else { - // ancient nodejs (<5.1) - // val is a buffer itself - valbuffer = new Buffer(val); // this is deprecated as of node 6.0.0 and must only be used in older node - } + valbuffer = isModernBuffer ? Buffer.from(val) : new Buffer(val); } // emit raw telegram event, pass the addresses and the buffer, no DPT guessing, copy of data buffer From c2817bc323ad145de030ea290b63ae123991374f Mon Sep 17 00:00:00 2001 From: Snowdd1 Date: Thu, 6 Apr 2017 21:05:30 +0200 Subject: [PATCH 7/7] increase version number to 0.3.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 50effcc..1e02b33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eibd", - "version": "0.3.7", + "version": "0.3.8", "description": "node eibd client", "main": "./index", "repository": {