1
0
Fork 0
mirror of https://github.com/Ylianst/MeshCentral.git synced 2025-03-09 15:40:18 +00:00

Improved Korean, New MeshCommander

This commit is contained in:
Ylian Saint-Hilaire 2020-05-28 16:24:48 -07:00
parent 40abf105ab
commit 56192d51a3
66 changed files with 980 additions and 970 deletions

File diff suppressed because one or more lines are too long

View file

@ -67,7 +67,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
obj.canvas.canvas.height = obj.rheight = obj.height = 400;
QS(obj.canvasid).cursor = 'default';
} else {
QS(obj.canvasid).cursor = obj.showmouse ?'default':'none';
QS(obj.canvasid).cursor = obj.showmouse ? 'default' : 'none';
}
}
@ -255,7 +255,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
// ###BEGIN###{Inflate}
else {
// This is compressed ZLib data, decompress and process it. (TODO: This need to be optimized, remove str/arr conversions)
var str = obj.inflate.inflate(arrToStr(obj.acc.slice(ptr, ptr + datalen - dx)));
var str = obj.inflate.inflate(arrToStr(new Uint8Array(obj.acc.buffer.slice(ptr, ptr + datalen - dx))));
if (str.length > 0) { _decodeLRE(strToArr(str), 0, x, y, width, height, s, str.length); } else { console.log("Invalid deflate data"); }
}
// ###END###{Inflate}
@ -274,7 +274,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
//console.log('cmdsize', cmdsize);
if (cmdsize == 0) return;
if (cmdsize != obj.acc.byteLength) { obj.acc = obj.acc.slice(cmdsize); } else { obj.acc = null; }
if (cmdsize != obj.acc.byteLength) { obj.acc = new Uint8Array(obj.acc.buffer.slice(cmdsize)); } else { obj.acc = null; }
}
}
@ -312,7 +312,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
} else {
for (i = 0; i < subencoding; i++) { palette[i] = data[ptr++]; }
if (subencoding == 2) { br = 1; bm = 1; } else if (subencoding <= 4) { br = 2; bm = 3; } // Compute bits to read & bit mark
while (rlecount < s && ptr < data.byteLength) { v = data[ptr++]; for (i = (8 - br) ; i >= 0; i -= br) { _setPixel8(palette[(v >> i) & bm], rlecount++); } } // Display all the bits
while (rlecount < s && ptr < data.byteLength) { v = data[ptr++]; for (i = (8 - br); i >= 0; i -= br) { _setPixel8(palette[(v >> i) & bm], rlecount++); } } // Display all the bits
}
_putImage(obj.spare, x, y);
}
@ -353,9 +353,9 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
else if (subencoding > 129) { // Palette RLE encoded tile
// Read the palette
if (obj.bpp == 2) {
for (i = 0; i < (subencoding - 128) ; i++) { palette[i] = data[ptr++] + (data[ptr++] << 8); }
for (i = 0; i < (subencoding - 128); i++) { palette[i] = data[ptr++] + (data[ptr++] << 8); }
} else {
for (i = 0; i < (subencoding - 128) ; i++) { palette[i] = data[ptr++]; }
for (i = 0; i < (subencoding - 128); i++) { palette[i] = data[ptr++]; }
}
// Decode RLE on palette
@ -568,10 +568,10 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
obj.ox = obj.mx;
obj.oy = obj.my;
} else {
// ###END###{DesktopFocus}
// ###END###{DesktopFocus}
// Request the entire screen
obj.send(String.fromCharCode(3, 1, 0, 0, 0, 0) + ShortToStr(obj.rwidth) + ShortToStr(obj.rheight)); // FramebufferUpdateRequest
// ###BEGIN###{DesktopFocus}
// ###BEGIN###{DesktopFocus}
}
// ###END###{DesktopFocus}
}

File diff suppressed because one or more lines are too long

View file

@ -100,7 +100,7 @@ var CreateAmtRedirect = function (module, authCookie) {
if (accArray.byteLength < 9 + authDataLen) return;
var status = accArray[1], authType = accArray[4], authData = [];
for (i = 0; i < authDataLen; i++) { authData.push(accArray[9 + i]); }
var authDataBuf = accArray.slice(9, 9 + authDataLen);
var authDataBuf = new Uint8Array(obj.acc.slice(9, 9 + authDataLen));
cmdsize = 9 + authDataLen;
if (authType == 0) {
// Query
@ -122,12 +122,12 @@ var CreateAmtRedirect = function (module, authCookie) {
// Realm
var realmlen = authDataBuf[curptr];
var realm = arrToStr(authDataBuf.slice(curptr + 1, curptr + 1 + realmlen));
var realm = arrToStr(new Uint8Array(authDataBuf.buffer.slice(curptr + 1, curptr + 1 + realmlen)));
curptr += (realmlen + 1);
// Nonce
var noncelen = authDataBuf[curptr];
var nonce = arrToStr(authDataBuf.slice(curptr + 1, curptr + 1 + noncelen));
var nonce = arrToStr(new Uint8Array(authDataBuf.buffer.slice(curptr + 1, curptr + 1 + noncelen)));
curptr += (noncelen + 1);
// QOP
@ -138,7 +138,7 @@ var CreateAmtRedirect = function (module, authCookie) {
var extra = '';
if (authType == 4) {
qoplen = authDataBuf[curptr];
qop = arrToStr(authDataBuf.slice(curptr + 1, curptr + 1 + qoplen));
qop = arrToStr(new Uint8Array(authDataBuf.buffer.slice(curptr + 1, curptr + 1 + qoplen)));
curptr += (qoplen + 1);
extra = snc + ':' + cnonce + ':' + qop + ':';
}
@ -192,7 +192,7 @@ var CreateAmtRedirect = function (module, authCookie) {
if (accArray.byteLength < 10) break;
var cs = (10 + (accArray[9] << 8) + accArray[8]);
if (accArray.byteLength < cs) break;
if (obj.m.ProcessBinaryData) { obj.m.ProcessBinaryData(accArray.slice(10, cs)); } else { obj.m.ProcessData(arrToStr(accArray.slice(10, cs))); }
if (obj.m.ProcessBinaryData) { obj.m.ProcessBinaryData(new Uint8Array(accArray.buffer.slice(10, cs))); } else { obj.m.ProcessData(arrToStr(new Uint8Array(accArray.buffer.slice(10, cs)))); }
cmdsize = cs;
break;
case 0x2B: // Keep alive message (43)
@ -204,7 +204,9 @@ var CreateAmtRedirect = function (module, authCookie) {
obj.connectstate = 1;
obj.m.Start();
// KVM traffic, forward rest of accumulator directly.
if (accArray.byteLength > 8) { obj.m.ProcessData(accArray.slice(8)); }
if (accArray.byteLength > 8) {
if (obj.m.ProcessBinaryData) { obj.m.ProcessBinaryData(new Uint8Array(accArray.buffer.slice(8))); } else { obj.m.ProcessData(arrToStr(new Uint8Array(accArray.buffer.slice(8)))); }
}
cmdsize = accArray.byteLength;
break;
case 0xF0:
@ -232,7 +234,7 @@ var CreateAmtRedirect = function (module, authCookie) {
}
}
obj.send = function (x) {
obj.Send = obj.send = function (x) {
if (obj.socket == null || obj.connectstate != 1) return;
if (obj.protocol == 1) { obj.xxSend(String.fromCharCode(0x28, 0x00, 0x00, 0x00) + IntToStrX(obj.amtsequence++) + ShortToStrX(x.length) + x); } else { obj.xxSend(x); }
}

File diff suppressed because one or more lines are too long

View file

@ -27,6 +27,8 @@ var CreateWsmanComm = function (host, port, user, pass, tls) {
// Private method
//obj.Debug = function (msg) { console.log(msg); }
function arrToStr(arr) { return String.fromCharCode.apply(null, arr); }
// Private method
// pri = priority, if set to 1, the call is high priority and put on top of the stack.
obj.PerformAjax = function (postdata, callback, tag, pri, url, action) {
@ -114,9 +116,8 @@ var CreateWsmanComm = function (host, port, user, pass, tls) {
obj.socketHeader = null;
obj.socketData = '';
obj.socketState = 1;
console.log(obj.tlsv1only);
obj.socket = new WebSocket(window.location.protocol.replace('http', 'ws') + '//' + window.location.host + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')) + '/webrelay.ashx?p=1&host=' + obj.host + '&port=' + obj.port + '&tls=' + obj.tls + '&tlsv1only=' + obj.tlsv1only + ((user == '*') ? '&serverauth=1' : '') + ((typeof pass === 'undefined') ? ('&serverauth=1&user=' + user) : '')); // The "p=1" indicates to the relay that this is a WSMAN session
obj.socket.binaryType = 'arraybuffer';
obj.socket.onopen = _OnSocketConnected;
obj.socket.onmessage = _OnMessage;
obj.socket.onclose = _OnSocketClosed;
@ -129,60 +130,17 @@ var CreateWsmanComm = function (host, port, user, pass, tls) {
for (i in obj.pendingAjaxCall) { obj.sendRequest(obj.pendingAjaxCall[i][0], obj.pendingAjaxCall[i][3], obj.pendingAjaxCall[i][4]); }
}
// Setup the file reader
var fileReader = new FileReader();
var fileReaderInuse = false, fileReaderAcc = [];
if (fileReader.readAsBinaryString) {
// Chrome & Firefox (Draft)
fileReader.onload = function (e) { _OnSocketData(e.target.result); if (fileReaderAcc.length == 0) { fileReaderInuse = false; } else { fileReader.readAsBinaryString(new Blob([fileReaderAcc.shift()])); } }
} else if (fileReader.readAsArrayBuffer) {
// Chrome & Firefox (Spec)
fileReader.onloadend = function (e) { _OnSocketData(e.target.result); if (fileReaderAcc.length == 0) { fileReaderInuse = false; } else { fileReader.readAsArrayBuffer(fileReaderAcc.shift()); } }
}
function _OnMessage(e) {
if (typeof e.data == 'object') {
if (fileReaderInuse == true) { fileReaderAcc.push(e.data); return; }
if (fileReader.readAsBinaryString) {
// Chrome & Firefox (Draft)
fileReaderInuse = true;
fileReader.readAsBinaryString(new Blob([e.data]));
} else if (fileReader.readAsArrayBuffer) {
// Chrome & Firefox (Spec)
fileReaderInuse = true;
fileReader.readAsArrayBuffer(e.data);
} else {
// IE10, readAsBinaryString does not exist, use an alternative.
var binary = '', bytes = new Uint8Array(e.data), length = bytes.byteLength;
for (var i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]); }
_OnSocketData(binary);
}
} else {
_OnSocketData(e.data);
}
};
// Websocket relay specific private method
function _OnSocketData(data) {
//obj.Debug("_OnSocketData (" + data.length + "): " + data);
if (typeof data === 'object') {
// This is an ArrayBuffer, convert it to a string array (used in IE)
var binary = '', bytes = new Uint8Array(data), length = bytes.byteLength;
for (var i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]); }
data = binary;
}
else if (typeof data !== 'string') return;
//console.log("RECV: " + data); // DEBUG
obj.socketAccumulator += data;
function _OnMessage(e) {
//obj.Debug("_OnSocketData (" + data.byteLength + "): " + data);
obj.socketAccumulator += arrToStr(new Uint8Array(e.data));
while (true) {
if (obj.socketParseState == 0) {
var headersize = obj.socketAccumulator.indexOf('\r\n\r\n');
if (headersize < 0) return;
//obj.Debug(obj.socketAccumulator.substring(0, headersize)); // Display received HTTP header
obj.socketHeader = obj.socketAccumulator.substring(0, headersize).split('\r\n');
if (obj.amtVersion == null) { for (var i in obj.socketHeader) { if (obj.socketHeader[i].indexOf('Server: Intel(R) Active Management Technology ') == 0) { obj.amtVersion = obj.socketHeader[i].substring(46); } } }
obj.socketAccumulator = obj.socketAccumulator.substring(headersize + 4);
obj.socketParseState = 1;
obj.socketData = '';