diff --git a/index.html b/index.html index da19106..483adc9 100644 --- a/index.html +++ b/index.html @@ -10345,8 +10345,10 @@ for (var i in AmtOcrPba) { x += ''; } QH('idx_d24customBootMediaIndex', x); } - QV('ForceHttpBootOption', amtPowerBootCapabilities['ForceUEFIHTTPSBoot'] == true); - QV('ForceHttpUrlBootOption', amtPowerBootCapabilities['ForceUEFIHTTPSBoot'] == true); + var httpsBootPossible = (meshCentralServer==null && wsstack.comm.xtlsCertificate != null) || (meshCentralServer!=null && ((currentcomputer.conn & 4) == 4) && currentcomputer.tls == 1) || (meshCentralServer!=null && ((currentcomputer.conn & 2) == 2) ) + + QV('ForceHttpBootOption', (amtPowerBootCapabilities['ForceUEFIHTTPSBoot'] == true) && httpsBootPossible); + QV('ForceHttpUrlBootOption', (amtPowerBootCapabilities['ForceUEFIHTTPSBoot'] == true) && httpsBootPossible); // ###END###{PowerControl-OneClick} QV('d24dForceProgressEvents', amtPowerBootCapabilities['ForcedProgressEvents'] == true); QV('d24dUseIDER', amtPowerBootCapabilities['IDER'] == true); diff --git a/output/index.htm b/output/index.htm index ec83a60..da55ad2 100644 --- a/output/index.htm +++ b/output/index.htm @@ -1021,7 +1021,7 @@ th {
-   +    Disconnected.
@@ -1232,7 +1232,7 @@ th {

Friendly Name
-
Group Name
+
Group Name
Hostname
Auth / Security
@@ -1244,6 +1244,7 @@ th {
Optional Token Request*

*Alternate hostname for Kerberos token request
+

@@ -1264,12 +1265,17 @@ th {
Image Encoding
@@ -2121,7 +2127,7 @@ var CreateAmtRedirect = function (module) { obj.authuri = '/RedirectionService'; obj.digestRealmMatch = null; obj.onStateChanged = null; - obj.disconnectCode = 0; + obj.disconnectCode = 0; // 2 = BUSY, 3 = UNSUPPORTED, 256 = ERROR, 50000 = RLE16 fail, 50001 = AmtDisconnect. function ToIntStr(v) { return String.fromCharCode((v & 0xFF), ((v >> 8) & 0xFF), ((v >> 16) & 0xFF), ((v >> 24) & 0xFF)); } function ToShortStr(v) { return String.fromCharCode((v & 0xFF), ((v >> 8) & 0xFF)); } @@ -2140,6 +2146,7 @@ var CreateAmtRedirect = function (module) { obj.xtlsoptions = tlsoptions; obj.xtlsFingerprint = tlsFingerprint; obj.connectstate = 0; + obj.disconnectCode = 0; if (obj.xtlsoptions && obj.xtlsoptions.meshServerConnect) { // Use the websocket wrapper to connect to MeshServer server @@ -2190,6 +2197,7 @@ var CreateAmtRedirect = function (module) { obj.xxOnSocketData = function (data) { if (!data || obj.connectstate == -1) return; + if (typeof(data)=='string') {data = new Buffer(data,'binary')} // Redirection tracing if (urlvars && urlvars['redirtrace']) { var datastr = arrToStr(new Uint8Array(data)); @@ -3853,9 +3861,10 @@ var WsmanStackCreateService = function (host, port, user, pass, tls, extra) { // Private method obj.ParseWsman = function (xml) { if (xml == null) return null; + var r = { Header: {} }; try { if (!xml.childNodes) xml = _turnToXml(xml); - var r = { Header: {} }, header = xml.getElementsByTagName('Header')[0], t; + var header = xml.getElementsByTagName('Header')[0], t; if (!header) header = xml.getElementsByTagName('a:Header')[0]; if (!header) return null; for (var i = 0; i < header.childNodes.length; i++) { @@ -3867,17 +3876,18 @@ var WsmanStackCreateService = function (host, port, user, pass, tls, extra) { if (!body) return null; if (body.childNodes.length > 0) { t = body.childNodes[0].localName; - if (t.indexOf('_OUTPUT') == t.length - 7) { t = t.substring(0, t.length - 7); } + var x = t.indexOf('_OUTPUT'); + if ((x != -1) && (x == (t.length - 7))) { t = t.substring(0, t.length - 7); } r.Header['Method'] = t; try { r.Body = _ParseWsmanRec(body.childNodes[0]); } catch (ex) { console.log('_ParseWsmanRec failed', body, ex); return null; } } - return r; } catch (ex) { console.log('Unable to parse XML: ' + xml + ', ' + ex); return null; } + return r; } // Private method @@ -34768,7 +34778,35 @@ function _arrayBufferToString(buffer) { for (var i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } return binary; } -/** + +function certCetAsn1Values(node, list) { + if ((typeof node === 'string') && (node.indexOf('https://') == 0)) { list.push(node); return; } + if (Array.isArray(node)) { for (var i in node) { certCetAsn1Values(node[i], list); } return; } + if (node && typeof node === 'object') { certCetAsn1Values(node.value, list) } +} + +function getExtensionUrls(cert, val) { + var list = [], ext = cert.getExtension(val); + if (ext != null) { certCetAsn1Values(forge.asn1.fromDer(ext.value), list); } + return list; +} + +var certUrlCache = null; +var certUrlCacheFile = null; +function getCertUrl(url, func) { + if (certUrlCacheFile == null) { if (process.env.LOCALAPPDATA != null) { certUrlCacheFile = require('path').join(process.env.LOCALAPPDATA, 'mccache.json'); } else { certUrlCacheFile = 'mccache.json'; } } + if (certUrlCache == null) { try { certUrlCache = JSON.parse(require('fs').readFileSync(certUrlCacheFile)); } catch (ex) { certUrlCache = {}; } } + if ((certUrlCache[url] != null) && (certUrlCache[url].data != null)) { var timeout = 0; if (url.endsWith('.crl')) { timeout = Date.now() - (14 * 86400000); } if (certUrlCache[url].time > timeout) { func(url, atob(certUrlCache[url].data)); return; } } + console.log('Loading: ' + url); + var u = require('url').parse(url); + var req = require('https').get({ hostname: u.hostname, port: u.port?u.port:443, path: u.path, method: 'GET', rejectUnauthorized: false + }, function (resp) { + var data = ''; + resp.on('data', function (chunk) { if (data != null) { data += chunk.toString('binary'); } if (data.length > 500000) { data = null; } }); + resp.on('end', function () { certUrlCache[url] = { data: btoa(data), time: Date.now() }; try { require('fs').writeFileSync(certUrlCacheFile, JSON.stringify(certUrlCache, null, 2)); } catch (ex) { } func(url, data); }); + }); + req.on('error', function (err) { console.log('Error: ' + err.message); func(url, null); }); +}/** * @fileoverview Script Compiler / Decompiler / Runner * @author Ylian Saint-Hilaire * @version v0.1.0e @@ -35199,7 +35237,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { obj.rwidth = 0; obj.rheight = 0; obj.bpp = 2; // Bytes per pixel (1 or 2 supported) - obj.useZRLE = true; + obj.useRLE = true; obj.showmouse = true; obj.buttonmask = 0; obj.localKeyMap = true; @@ -35209,7 +35247,6 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { obj.sparew2 = 0; obj.spareh2 = 0; obj.sparecache = {}; - obj.ZRLEfirst = 1; obj.onScreenSizeChange = null; obj.frameRateDelay = 0; @@ -35222,6 +35259,10 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { obj.onKvmDataAck = -1; obj.holding = false; obj.lastKeepAlive = Date.now(); + obj.kvmExt = {}; + obj.kvmExtChanged = null; + obj.useZLib = false; + obj.graymode = false; obj.mNagleTimer = null; // Mouse motion slowdown timer obj.mx = 0; // Last mouse x position @@ -35322,10 +35363,10 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { */ // SetEncodings, with AMT we can't omit RAW, must be specified. - // Intel AMT supports encodings: RAW (0), ZRLE (16), Desktop Size (0xFFFFFF21, -223) + // Intel AMT supports encodings: RAW (0), RLE (16), Desktop Size (0xFFFFFF21, -223) var supportedEncodings = ''; - if (obj.useZRLE) supportedEncodings += IntToStr(16); + if (obj.useRLE) supportedEncodings += IntToStr(16); supportedEncodings += IntToStr(0); supportedEncodings += IntToStr(1092); @@ -35338,13 +35379,19 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { obj.state = 4; if (obj.parent) { obj.parent.disconnectCode = 0; obj.parent.xxStateChange(3); } - _SendRefresh(); //obj.timer = setInterval(obj.xxOnTimer, 50); obj.ox = -1; // Old mouse x position - + + if (obj.kvmExtChanged != null) { + obj.sendKvmExtCmd(2, obj.graymode ? 1 : 0); // Set Decimation State + obj.sendKvmExtCmd(4, obj.useZLib ? 1 : 0); // Set ZLib state + } + _SendRefresh(); + if (obj.onScreenSizeChange != null) { obj.onScreenSizeChange(obj, obj.ScreenWidth, obj.ScreenHeight); } + if (obj.parent) { obj.parent.disconnectCode = 50001; } // Everything looks good, a disconnection here would be Intel AMT initiated. } else if (obj.state == 4) { switch (obj.acc[0]) { @@ -35415,7 +35462,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { } _putImage(obj.spare, x, y); } else if (encoding == 16) { - // ZRLE encoding + // RLE encoding if (obj.acc.byteLength < 16) return; var datalen = accview.getUint32(12); if (obj.acc.byteLength < (16 + datalen)) return; @@ -35742,13 +35789,13 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { obj.Start = function () { obj.state = 0; obj.acc = null; - obj.ZRLEfirst = 1; obj.inflate.inflateReset(); obj.onKvmDataPending = []; obj.onKvmDataAck = -1; obj.kvmDataSupported = false; + obj.kvmExt = {}; for (var i in obj.sparecache) { delete obj.sparecache[i]; } } @@ -35911,6 +35958,13 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { if (urlvars && urlvars['kvmdatatrace']) { console.log('KVM-DataChannel-Recv(' + (d.length - 16) + '): ' + d.substring(16)); } if (d.length >= 16) { obj.onKvmData(d.substring(16)); } // Event the data and ack if ((obj.onKvmDataAck == true) && (obj.onKvmDataPending.length > 0)) { obj.sendKvmData(obj.onKvmDataPending.shift()); } // Send pending data + } else if ((d.length >= 13) && (d.substring(0, 11) == '\0KvmExtCmd\0')) { + var cmd = d.charCodeAt(11), val = d.charCodeAt(12); + console.log('Received KvmExtCmd', cmd, val); + if (cmd == 1) { obj.kvmExt.decimation = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(1, val); } } + if (cmd == 2) { obj.sendKvmExtCmd(1); } + if (cmd == 3) { obj.kvmExt.compression = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(3, val); } } + if (cmd == 4) { obj.sendKvmExtCmd(3); } } else { console.log('Got KVM clipboard data:', d); if (urlvars && urlvars['kvmdatatrace']) { console.log('KVM-ClipBoard-Recv(' + d.length + '): ' + rstr2hex(d) + ', ' + d); } @@ -35920,6 +35974,12 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) { } + obj.sendKvmExtCmd = function (cmd, val) { + console.log('Sending KvmExtCmd', cmd, val); + var x = '\0KvmExtCmd\0' + String.fromCharCode(cmd) + (val != null ? String.fromCharCode(val) : ''); + obj.send(String.fromCharCode(6, 0, 0, 0) + IntToStr(x.length) + x); + } + obj.sendKvmData = function (x) { if (obj.onKvmDataAck !== true) { obj.onKvmDataPending.push(x); @@ -41652,7 +41712,7 @@ var CreateWebSocketWrapper = function (host, port, path, certhash) { var amtwirelessif = -1; // Set to the interface index for the wireless interface, -1 if no wireless. var desktop; - var desktopsettings = { encoding:1, showfocus:false, showmouse:true, showcad:true, limitFrameRate:false, noMouseRotate:false }; + var desktopsettings = { encflags: 1, showfocus: false, showmouse: true, showcad: true, limitFrameRate: false, noMouseRotate: false }; var webcompilerfeatures = ['AgentPresence','Alarms','AuditLog','CertificateManager','Certificates','ComputerSelector','ComputerSelector-Local','ComputerSelectorScanner','ComputerSelectorToolbar','ContextMenus','Desktop','DesktopFocus','DesktopInband','DesktopInbandFiles','Desktop-Multi','DesktopRotation','Desktop-Settings','DesktopType','EventLog','EventSubscriptions','FileSaver','HardwareInfo','IDER','IDER-IMRSDK','IDERStats','Inflate','Look-Commander','MeshServerConnect','Mode-NodeWebkit','NetworkSettings','PowerControl','PowerControl-Advanced','PowerControl-OneClick','RemoteAccess','Scripting','Scripting-Editor','SessionRecording','Storage','SystemDefense','Terminal','Terminal-Enumation-All','Terminal-FxEnumation-All','TerminalReplay','TerminalSize','USBSetup','VersionWarning','Wireless','WsmanBrowser']; var StatusStrs = ["Disconnected", "Connecting...", "Setup...", "Connected"]; @@ -42340,6 +42400,7 @@ var CreateWebSocketWrapper = function (host, port, path, certhash) { if (terminal.m.capture) delete terminal.m.capture; terminal.Stop(); + desktop.disconnectCode = 0; desktop.Stop(); } @@ -42706,6 +42767,15 @@ var CreateWebSocketWrapper = function (host, port, path, certhash) { function addComputer() { if (xxdialogMode) return; + + // Build the list of groups + var groups = [], x = ''; + for (var y in computerlist) { var computer = computerlist[y]; if ((computer.tags != null) && (computer.tags != '') && (groups.indexOf(computer.tags) == -1) && (computer.tags.indexOf('"') == -1)) { groups.push(computer.tags); } } + groups.sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); + for (var y in groups) { x += '