diff --git a/io/snmp/snmp.html b/io/snmp/snmp.html
index 5eaefd61..c0c45574 100644
--- a/io/snmp/snmp.html
+++ b/io/snmp/snmp.html
@@ -37,7 +37,7 @@
category: 'network-input',
color:"YellowGreen",
defaults: {
- host: {value:"",required:true},
+ host: {value:""},
community: {value:"public",required:true},
version: {value:"1",required:true},
oids: {value:""},
@@ -94,7 +94,7 @@
category: 'network-input',
color:"YellowGreen",
defaults: {
- host: {value:"",required:true},
+ host: {value:""},
community: {value:"public",required:true},
version: {value:"1",required:true},
oids: {value:""},
@@ -150,7 +150,7 @@
category: 'network-input',
color:"YellowGreen",
defaults: {
- host: {value:"",required:true},
+ host: {value:""},
community: {value:"public",required:true},
version: {value:"1",required:true},
oids: {value:""},
@@ -208,7 +208,7 @@
category: 'network-input',
color:"YellowGreen",
defaults: {
- host: {value:"",required:true},
+ host: {value:""},
community: {value:"public",required:true},
version: {value:"1",required:true},
oids: {value:""},
diff --git a/io/snmp/snmp.js b/io/snmp/snmp.js
index c243496c..fbda5f47 100644
--- a/io/snmp/snmp.js
+++ b/io/snmp/snmp.js
@@ -5,16 +5,21 @@ module.exports = function(RED) {
function SnmpNode(n) {
RED.nodes.createNode(this,n);
- this.community = n.community || "public";
- this.host = n.host || "127.0.0.1";
+ this.community = n.community;
+ this.host = n.host;
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
this.oids = n.oids.replace(/\s/g,"");
- this.session = snmp.createSession(this.host, this.community, {version: this.version});
var node = this;
this.on("input",function(msg) {
var oids = node.oids || msg.oid;
if (oids) {
+ if (msg.host && node.host || msg.community && node.community) {
+ node.warn(RED._("common.errors.nooverride"));
+ }
+ var host = node.host || msg.host;
+ var community = node.community || msg.community;
+ node.session = snmp.createSession(host, community, {version: node.version});
node.session.get(oids.split(","), function(error, varbinds) {
if (error) {
node.error(error.toString(),msg);
@@ -40,18 +45,22 @@ module.exports = function(RED) {
node.warn("No oid(s) to search for");
}
});
+
+ this.on("close", function(){
+ if (node.session){
+ node.session.close();
+ }
+ });
}
RED.nodes.registerType("snmp",SnmpNode);
function SnmpTNode(n) {
RED.nodes.createNode(this,n);
- this.community = n.community || "public";
- this.host = n.host || "127.0.0.1";
+ this.community = n.community;
+ this.host = n.host;
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
this.oids = n.oids.replace(/\s/g,"");
- this.session = snmp.createSession(this.host, this.community, {version: this.version});
var node = this;
- var msg;
var maxRepetitions = 20;
function sortInt(a, b) {
@@ -60,73 +69,69 @@ module.exports = function(RED) {
else { return 0; }
}
- function responseCb(error, table) {
- if (error) {
- console.error(error.toString());
- }
- else {
- var indexes = [];
- for (var index in table) {
- if (table.hasOwnProperty(index)) {
- indexes.push(parseInt(index));
- }
- }
- indexes.sort(sortInt);
- for (var i = 0; i < indexes.length; i++) {
- var columns = [];
- for (var column in table[indexes[i]]) {
- if (table[indexes[i]].hasOwnProperty(column)) {
- columns.push(parseInt(column));
- }
- }
- columns.sort(sortInt);
- // console.log("row index = " + indexes[i]);
- // for (var j = 0; j < columns.length; j++) {
- // console.log(" column " + columns[j] + " = " + table[indexes[i]][columns[j]]);
- // }
- }
- msg.payload = table;
- node.send(msg);
- }
- }
-
- this.on("input",function(m) {
- msg = m;
+ this.on("input",function(msg) {
var oids = node.oids || msg.oid;
if (oids) {
msg.oid = oids;
- node.session.table(oids, maxRepetitions, responseCb);
+ if (msg.host && node.host || msg.community && node.community) {
+ node.warn(RED._("common.errors.nooverride"));
+ }
+ var host = node.host || msg.host;
+ var community = node.community || msg.community;
+ node.session = snmp.createSession(host, community, {version: node.version});
+ node.session.table(oids, maxRepetitions, function(error, table) {
+ if (error) {
+ node.error(error.toString());
+ }
+ else {
+ var indexes = [];
+ for (var index in table) {
+ if (table.hasOwnProperty(index)) {
+ indexes.push(parseInt(index));
+ }
+ }
+ indexes.sort(sortInt);
+ for (var i = 0; i < indexes.length; i++) {
+ var columns = [];
+ for (var column in table[indexes[i]]) {
+ if (table[indexes[i]].hasOwnProperty(column)) {
+ columns.push(parseInt(column));
+ }
+ }
+ columns.sort(sortInt);
+ // console.log("row index = " + indexes[i]);
+ // for (var j = 0; j < columns.length; j++) {
+ // console.log(" column " + columns[j] + " = " + table[indexes[i]][columns[j]]);
+ // }
+ }
+ msg.payload = table;
+ node.send(msg);
+ }
+ });
}
else {
node.warn("No oid to search for");
}
});
+
+ this.on("close", function(){
+ if (node.session){
+ node.session.close();
+ }
+ });
}
RED.nodes.registerType("snmp table",SnmpTNode);
function SnmpSubtreeNode(n) {
RED.nodes.createNode(this,n);
- this.community = n.community || "public";
- this.host = n.host || "127.0.0.1";
+ this.community = n.community;
+ this.host = n.host;
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
this.oids = n.oids.replace(/\s/g,"");
- this.session = snmp.createSession(this.host, this.community, {version: this.version});
var node = this;
var maxRepetitions = 20;
var response = [];
- function doneCb(error) {
- if (error) {
- console.error(error.toString());
- }
- else {
- var msg = {};
- msg.payload = response;
- node.send(msg);
- response.clear();
- }
- }
-
function feedCb(varbinds) {
for (var i = 0; i < varbinds.length; i++) {
if (snmp.isVarbindError(varbinds[i])) {
@@ -134,7 +139,7 @@ module.exports = function(RED) {
}
else {
//console.log(varbinds[i].oid + "|" + varbinds[i].value);
- response.add({oid: varbinds[i].oid, value: varbinds[i].value});
+ response.push({oid: varbinds[i].oid, value: varbinds[i].value});
}
}
}
@@ -143,39 +148,47 @@ module.exports = function(RED) {
var oids = node.oids || msg.oid;
if (oids) {
msg.oid = oids;
- node.session.subtree(msg.oid, maxRepetitions, feedCb, doneCb);
- //node.session.subtree(oids, maxRepetitions, responseCb);
+ if (msg.host && node.host || msg.community && node.community) {
+ node.warn(RED._("common.errors.nooverride"));
+ }
+ var host = node.host || msg.host;
+ var community = node.community || msg.community;
+ node.session = snmp.createSession(host, community, {version: node.version});
+ node.session.subtree(msg.oid, maxRepetitions, feedCb, function(error) {
+ if (error) {
+ node.error(error.toString());
+ }
+ else {
+ msg.payload = response;
+ node.send(msg);
+ //Clears response
+ response.length = 0;
+ }
+ });
}
else {
node.warn("No oid to search for");
}
});
+
+ this.on("close", function(){
+ if (node.session){
+ node.session.close();
+ }
+ });
}
RED.nodes.registerType("snmp subtree",SnmpSubtreeNode);
function SnmpWalkerNode(n) {
RED.nodes.createNode(this,n);
- this.community = n.community || "public";
- this.host = n.host || "127.0.0.1";
+ this.community = n.community;
+ this.host = n.host;
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
this.oids = n.oids.replace(/\s/g,"");
- this.session = snmp.createSession(this.host, this.community, {version: this.version});
var node = this;
var maxRepetitions = 20;
var response = [];
- function doneCb(error) {
- if (error) {
- node.error(error.toString());
- }
- else {
- var msg = {};
- msg.payload = response;
- node.send(msg);
- response.clear();
- }
- }
-
function feedCb(varbinds) {
for (var i = 0; i < varbinds.length; i++) {
if (snmp.isVarbindError(varbinds[i])) {
@@ -183,21 +196,44 @@ module.exports = function(RED) {
}
else {
//console.log(varbinds[i].oid + "|" + varbinds[i].value);
- response.add({oid: varbinds[i].oid, value: varbinds[i].value});
+ response.push({oid: varbinds[i].oid, value: varbinds[i].value});
}
}
}
this.on("input",function(msg) {
+ node.msg = msg;
var oids = node.oids || msg.oid;
if (oids) {
msg.oid = oids;
- node.session.walk(msg.oid, maxRepetitions, feedCb, doneCb);
+ if (msg.host && node.host || msg.community && node.community) {
+ node.warn(RED._("common.errors.nooverride"));
+ }
+ var host = node.host || msg.host;
+ var community = node.community || msg.community;
+ node.session = snmp.createSession(host, community, {version: node.version});
+ node.session.walk(msg.oid, maxRepetitions, feedCb, function(error) {
+ if (error) {
+ node.error(error.toString());
+ }
+ else {
+ msg.payload = response;
+ node.send(msg);
+ //Clears response
+ response.length = 0;
+ }
+ });
}
else {
node.warn("No oid to search for");
}
});
+
+ this.on("close", function(){
+ if (node.session){
+ node.session.close();
+ }
+ });
}
RED.nodes.registerType("snmp walker",SnmpWalkerNode);
};