MeshPlayer improvements.

Ylian Saint-Hilaire committed Aug 12, 2019 at 16:16 UTC 3b1ece80bd2180a1e62930c412fe52edaef32b5c
5 files changed +53 -21
MeshCentralServer.njsproj
+1
@@ -219,6 +219,7 @@
219 <Content Include="public\images\mapmarker.png" />
220 <Content Include="public\images\meshicon50.png" />
221 <Content Include="public\images\trash.png" />
222 + <Content Include="public\player.htm" />
223 <Content Include="public\scriptblocks.txt" />
224 <Content Include="public\sounds\chimes.mp3" />
225 <Content Include="public\styles\font-awesome\css\font-awesome.min.css" />
meshcentral.js
+1 -1
@@ -108,7 +108,7 @@ function CreateMeshCentralServer(config, args) {
108 try { require('./pass').hash('test', function () { }, 0); } catch (e) { console.log('Old version of node, must upgrade.'); return; } // TODO: Not sure if this test works or not.
109
110 // Check for invalid arguments
111 - var validArguments = ['_', 'notls', 'user', 'port', 'aliasport', 'mpsport', 'mpsaliasport', 'redirport', 'cert', 'mpscert', 'deletedomain', 'deletedefaultdomain', 'showall', 'showusers', 'shownodes', 'showmeshes', 'showevents', 'showpower', 'clearpower', 'showiplocations', 'help', 'exactports', 'install', 'uninstall', 'start', 'stop', 'restart', 'debug', 'filespath', 'datapath', 'noagentupdate', 'launch', 'noserverbackup', 'mongodb', 'mongodbcol', 'wanonly', 'lanonly', 'nousers', 'mpsdebug', 'mpspass', 'ciralocalfqdn', 'dbexport', 'dbexportmin', 'dbimport', 'dbmerge', 'dbencryptkey', 'selfupdate', 'tlsoffload', 'userallowedip', 'userblockedip', 'swarmallowedip', 'agentallowedip', 'agentblockedip', 'fastcert', 'swarmport', 'swarmdebug', 'logintoken', 'logintokenkey', 'logintokengen', 'logintokengen', 'mailtokengen', 'admin', 'unadmin', 'sessionkey', 'sessiontime', 'minify', 'minifycore', 'dblistconfigfiles', 'dbshowconfigfile', 'dbpushconfigfiles', 'dbpullconfigfiles', 'dbdeleteconfigfiles', 'configkey', 'loadconfigfromdb', 'npmpath', 'memorytracking'];
111 + var validArguments = ['_', 'notls', 'user', 'port', 'aliasport', 'mpsport', 'mpsaliasport', 'redirport', 'cert', 'mpscert', 'deletedomain', 'deletedefaultdomain', 'showall', 'showusers', 'shownodes', 'showmeshes', 'showevents', 'showpower', 'clearpower', 'showiplocations', 'help', 'exactports', 'install', 'uninstall', 'start', 'stop', 'restart', 'debug', 'filespath', 'datapath', 'noagentupdate', 'launch', 'noserverbackup', 'mongodb', 'mongodbcol', 'wanonly', 'lanonly', 'nousers', 'mpsdebug', 'mpspass', 'ciralocalfqdn', 'dbexport', 'dbexportmin', 'dbimport', 'dbmerge', 'dbencryptkey', 'selfupdate', 'tlsoffload', 'userallowedip', 'userblockedip', 'swarmallowedip', 'agentallowedip', 'agentblockedip', 'fastcert', 'swarmport', 'swarmdebug', 'logintoken', 'logintokenkey', 'logintokengen', 'logintokengen', 'mailtokengen', 'admin', 'unadmin', 'sessionkey', 'sessiontime', 'minify', 'minifycore', 'dblistconfigfiles', 'dbshowconfigfile', 'dbpushconfigfiles', 'dbpullconfigfiles', 'dbdeleteconfigfiles', 'configkey', 'loadconfigfromdb', 'npmpath', 'memorytracking', 'serverid'];
112 for (var arg in obj.args) { obj.args[arg.toLocaleLowerCase()] = obj.args[arg]; if (validArguments.indexOf(arg.toLocaleLowerCase()) == -1) { console.log('Invalid argument "' + arg + '", use --help.'); return; } }
113 if (obj.args.mongodb == true) { console.log('Must specify: --mongodb [connectionstring] \r\nSee https://docs.mongodb.com/manual/reference/connection-string/ for MongoDB connection string.'); return; }
114 for (i in obj.config.settings) { obj.args[i] = obj.config.settings[i]; } // Place all settings into arguments, arguments have already been placed into settings so arguments take precedence.
multiserver.js
+1
@@ -384,6 +384,7 @@ module.exports.CreateMultiServer = function (parent, args) {
384 if (obj.peerConfig == null) { return null; }
385 obj.serverid = obj.parent.config.peers.serverid;
386 if (obj.serverid == null) { obj.serverid = require("os").hostname().toLowerCase(); } else { obj.serverid = obj.serverid.toLowerCase(); }
387 + if (args.serverid != null) { obj.serverid = args.serverid.toLowerCase(); }
388 if (obj.parent.config.peers.servers[obj.serverid] == null) { console.log("Error: Unable to peer with other servers, \"" + obj.serverid + "\" not present in peer servers list."); return null; }
389 //console.log('Server peering ID: ' + obj.serverid);
390
public/player.htm
+46 -16
@@ -10,6 +10,10 @@
10 <script type="text/javascript" src="scripts/common-0.0.1.js"></script>
11 <script type="text/javascript" src="scripts/agent-desktop-0.0.2.js"></script>
12 <script type="text/javascript" src="scripts/amt-desktop-0.0.2.js"></script>
13 + <script type="text/javascript" src="scripts/zlib.js"></script>
14 + <script type="text/javascript" src="scripts/zlib-inflate.js"></script>
15 + <script type="text/javascript" src="scripts/zlib-adler32.js"></script>
16 + <script type="text/javascript" src="scripts/zlib-crc32.js"></script>
17 </head>
18 <body style="overflow:hidden;background-color:black">
19 <div id=p11 class="noselect" style="overflow:hidden">
@@ -83,6 +87,7 @@
87 var recFileMetadata = null;
88 var recFileProtocol = 0;
89 var agentDesktop = null;
90 + var amtDesktop = null;
91 var playing = false;
92 var readState = 0;
93 var waitTimer = null;
@@ -162,6 +167,19 @@
167 agentDesktop.State = 3;
168 deskAdjust();
169 }
170 + else if (recFileMetadata.protocol == 101) {
171 + // Intel AMT Redirection
172 + recFileProtocol = 101;
173 + x += '<br /><br /><span style=color:gray>Press [space] to play/pause.</span>';
174 + QE('PlayButton', true);
175 + QE('PauseButton', false);
176 + QE('RestartButton', false);
177 + recFileStartTime = recFileLastTime = time;
178 + amtDesktop = CreateAmtRemoteDesktop('Desk');
179 + amtDesktop.onScreenSizeChange = deskAdjust;
180 + amtDesktop.State = 3;
181 + deskAdjust();
182 + }
183 QV('metadatadiv', true);
184 QH('metadatadiv', x);
185 QH('deskstatus', recFile.name);
@@ -181,19 +199,32 @@
199 function processBlockEx(type, flags, time, data) {
200 if (playing == false) return;
201 var flagBinary = (flags & 1) != 0, flagUser = (flags & 2) != 0;
202 +
203 + // Update the clock
204 + var deltaTimeTotalSec = Math.floor((time - recFileStartTime) / 1000);
205 + if (currentDeltaTimeTotalSec != deltaTimeTotalSec) {
206 + currentDeltaTimeTotalSec = deltaTimeTotalSec;
207 + var deltaTimeHours = Math.floor(deltaTimeTotalSec / 3600);
208 + deltaTimeTotalSec -= (deltaTimeHours * 3600)
209 + var deltaTimeMinutes = Math.floor(deltaTimeTotalSec / 60);
210 + deltaTimeTotalSec -= (deltaTimeHours * 60)
211 + var deltaTimeSeconds = Math.floor(deltaTimeTotalSec);
212 + QH('timespan', pad2(deltaTimeHours) + ':' + pad2(deltaTimeMinutes) + ':' + pad2(deltaTimeSeconds))
213 + }
214 +
215 if ((type == 2) && flagBinary && !flagUser) {
185 - var deltaTimeTotalSec = Math.floor((time - recFileStartTime) / 1000);
186 - if (currentDeltaTimeTotalSec != deltaTimeTotalSec) {
187 - currentDeltaTimeTotalSec = deltaTimeTotalSec;
188 - var deltaTimeHours = Math.floor(deltaTimeTotalSec / 3600);
189 - deltaTimeTotalSec -= (deltaTimeHours * 3600)
190 - var deltaTimeMinutes = Math.floor(deltaTimeTotalSec / 60);
191 - deltaTimeTotalSec -= (deltaTimeHours * 60)
192 - var deltaTimeSeconds = Math.floor(deltaTimeTotalSec);
193 - QH('timespan', pad2(deltaTimeHours) + ':' + pad2(deltaTimeMinutes) + ':' + pad2(deltaTimeSeconds))
216 + if (recFileProtocol == 2) {
217 + // MeshCentral Remote Desktop
218 + agentDesktop.ProcessData(data);
219 + } else if (recFileProtocol == 101) {
220 + // Intel AMT KVM
221 + //if ((readState == 0) && (rstr2hex(data) == '140000000400000000')) { readState = 1; }
222 + if ((readState == 0) && (rstr2hex(data) == '4100000000000000')) { readState = 1; }
223 + else if (readState == 1) { amtDesktop.ProcessData(data); }
224 + //console.log(rstr2hex(data));
225 }
195 - agentDesktop.ProcessData(data);
226 }
227 +
228 recFileLastTime = time;
229 if (playing) { readNextBlock(processBlock); }
230 }
@@ -202,10 +233,8 @@
233 recFile = null;
234 recFilePtr = 0;
235 recFileMetadata = null;
205 - if (agentDesktop != null) {
206 - agentDesktop.Canvas.clearRect(0, 0, agentDesktop.CanvasId.width, agentDesktop.CanvasId.height);
207 - agentDesktop = null;
208 - }
236 + if (agentDesktop != null) { agentDesktop.Canvas.clearRect(0, 0, agentDesktop.CanvasId.width, agentDesktop.CanvasId.height); agentDesktop = null; }
237 + if (amtDesktop != null) { amtDesktop.canvas.clearRect(0, 0, amtDesktop.CanvasId.width, amtDesktop.CanvasId.height); amtDesktop = null; }
238 readState = 0;
239 waitTimerArgs = null;
240 currentDeltaTimeTotalSec = 0;
@@ -328,8 +357,9 @@
357 QE('PauseButton', false);
358 QE('RestartButton', false);
359 QS('progressbar').width = '0px';
331 - QH('timespan', '00:00:00')
332 - agentDesktop.Canvas.clearRect(0, 0, agentDesktop.CanvasId.width, agentDesktop.CanvasId.height);
360 + QH('timespan', '00:00:00');
361 + if (agentDesktop) { agentDesktop.Canvas.clearRect(0, 0, agentDesktop.CanvasId.width, agentDesktop.CanvasId.height); }
362 + if (amtDesktop) { amtDesktop.canvas.clearRect(0, 0, amtDesktop.CanvasId.width, amtDesktop.CanvasId.height); amtDesktop = CreateAmtRemoteDesktop('Desk'); amtDesktop.onScreenSizeChange = deskAdjust; amtDesktop.State = 3; }
363 }
364
365 function clearConsoleMsg() {
public/scripts/amt-desktop-0.0.2.js
+4 -4
@@ -78,7 +78,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
78
79 obj.ProcessData = function (data) {
80 if (!data) return;
81 - // obj.Debug("KRecv(" + data.length + "): " + rstr2hex(data));
81 + //obj.Debug("KRecv(" + data.length + "): " + rstr2hex(data));
82 //obj.inbytes += data.length;
83 //obj.Debug("KRecv(" + obj.inbytes + ")");
84 obj.acc += data;
@@ -159,7 +159,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
159 if (obj.bpp == 1) obj.send(String.fromCharCode(0, 0, 0, 0, 8, 8, 0, 1) + ShortToStr(7) + ShortToStr(7) + ShortToStr(3) + String.fromCharCode(5, 2, 0, 0, 0, 0)); // Setup 8 bit color RGB332
160
161 obj.state = 4;
162 - obj.parent.xxStateChange(3);
162 + if (obj.parent) { obj.parent.xxStateChange(3); }
163 _SendRefresh();
164 //obj.timer = setInterval(obj.xxOnTimer, 50);
165
@@ -602,13 +602,13 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
602 obj.Stop = function () {
603 obj.UnGrabMouseInput();
604 obj.UnGrabKeyInput();
605 - obj.parent.Stop();
605 + if (obj.parent) { obj.parent.Stop(); }
606 }
607
608 obj.send = function (x) {
609 //obj.Debug("KSend(" + x.length + "): " + rstr2hex(x));
610 //obj.outbytes += x.length;
611 - obj.parent.send(x);
611 + if (obj.parent) { obj.parent.send(x); }
612 }
613
614 var convertAmtKeyCodeTable = {