AMT manager improvements.

Ylian Saint-Hilaire committed Oct 7, 2020 at 12:44 UTC 9df9de0922611e92e9f9bb201bdc82ac8c8adf6c
3 files changed +20 -15
amtmanager.js
+18 -13
@@ -40,20 +40,25 @@ module.exports.CreateAmtManager = function(parent) {
40
41 // Handle server events
42 obj.HandleEvent = function (source, event, ids, id) {
43 - if (event.action != 'nodeconnect') return;
44 - if ((event.conn & 14) != 0) { // connectType: Bitmask, 1 = MeshAgent, 2 = Intel AMT CIRA, 4 = Intel AMT local, 8 = Intel AMT Relay, 16 = MQTT
45 - // We have an OOB connection to Intel AMT, update our information
46 - var dev = obj.amtDevices[event.nodeid];
47 - if (dev == null) { obj.amtDevices[event.nodeid] = dev = { conn: event.conn }; fetchIntelAmtInformation(event.nodeid); } else { dev.conn = event.conn; }
48 - } else if (((event.conn & 1) != 0) && (parent.webserver != null)) {
49 - // We have an agent connection without OOB, check if this agent supports Intel AMT
50 - var agent = parent.webserver.wsagents[event.nodeid];
51 - if ((agent == null) || (agent.agentInfo == null) || (parent.meshAgentsArchitectureNumbers[agent.agentInfo.agentId].amt == false)) { removeDevice(event.nodeid); return; }
52 - var dev = obj.amtDevices[event.nodeid];
53 - if (dev == null) { obj.amtDevices[event.nodeid] = dev = { conn: event.conn }; fetchIntelAmtInformation(event.nodeid); } else { dev.conn = event.conn; }
54 - } else {
55 - removeDevice(event.nodeid);
43 + // React to nodes connecting and disconnecting
44 + if (event.action == 'nodeconnect') {
45 + if ((event.conn & 14) != 0) { // connectType: Bitmask, 1 = MeshAgent, 2 = Intel AMT CIRA, 4 = Intel AMT local, 8 = Intel AMT Relay, 16 = MQTT
46 + // We have an OOB connection to Intel AMT, update our information
47 + var dev = obj.amtDevices[event.nodeid];
48 + if (dev == null) { obj.amtDevices[event.nodeid] = dev = { conn: event.conn }; fetchIntelAmtInformation(event.nodeid); } else { dev.conn = event.conn; }
49 + } else if (((event.conn & 1) != 0) && (parent.webserver != null)) {
50 + // We have an agent connection without OOB, check if this agent supports Intel AMT
51 + var agent = parent.webserver.wsagents[event.nodeid];
52 + if ((agent == null) || (agent.agentInfo == null) || (parent.meshAgentsArchitectureNumbers[agent.agentInfo.agentId].amt == false)) { removeDevice(event.nodeid); return; }
53 + var dev = obj.amtDevices[event.nodeid];
54 + if (dev == null) { obj.amtDevices[event.nodeid] = dev = { conn: event.conn }; fetchIntelAmtInformation(event.nodeid); } else { dev.conn = event.conn; }
55 + } else {
56 + removeDevice(event.nodeid);
57 + }
58 }
59 +
60 + // React to node being removed
61 + if (event.action == 'removenode') { removeDevice(event.nodeid); }
62 }
63
64 // Remove a device
views/default-mobile.handlebars
+1 -1
@@ -1472,7 +1472,7 @@
1472 }
1473 case 'ifchange': {
1474 // Network interface changed for a device, if we are currently viewing this device, ask for an update.
1475 - if (currentNode._id == message.event.nodeid) { meshserver.send({ action: 'getnetworkinfo', nodeid: currentNode._id }); }
1475 + if ((currentNode != null) && (currentNode._id == message.event.nodeid)) { meshserver.send({ action: 'getnetworkinfo', nodeid: currentNode._id }); }
1476 break;
1477 }
1478 case 'devicesessions': {
views/default.handlebars
+1 -1
@@ -2955,7 +2955,7 @@
2955 }
2956 case 'ifchange': {
2957 // Network interface changed for a device, if we are currently viewing this device, ask for an update.
2958 - if (currentNode._id == message.event.nodeid) { meshserver.send({ action: 'getnetworkinfo', nodeid: currentNode._id }); }
2958 + if ((currentNode != null) && (currentNode._id == message.event.nodeid)) { meshserver.send({ action: 'getnetworkinfo', nodeid: currentNode._id }); }
2959 break;
2960 }
2961 case 'devicesessions': {