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 = {