Added support for compressed MeshCore.js

Ylian Saint-Hilaire committed Jul 17, 2020 at 11:14 UTC dc98e3f3235b1fa8a9d19f953d39b6a86ed94bf1
30 files changed +12 -4
agents/MeshCmd-signed.exe
Binary files a/agents/MeshCmd-signed.exe and b/agents/MeshCmd-signed.exe differ
agents/MeshCmd64-signed.exe
Binary files a/agents/MeshCmd64-signed.exe and b/agents/MeshCmd64-signed.exe differ
agents/MeshService-signed.exe
Binary files a/agents/MeshService-signed.exe and b/agents/MeshService-signed.exe differ
agents/MeshService.exe
Binary files a/agents/MeshService.exe and b/agents/MeshService.exe differ
agents/MeshService64-signed.exe
Binary files a/agents/MeshService64-signed.exe and b/agents/MeshService64-signed.exe differ
agents/MeshService64.exe
Binary files a/agents/MeshService64.exe and b/agents/MeshService64.exe differ
agents/agents-new/MeshService.exe
Binary files /dev/null and b/agents/agents-new/MeshService.exe differ
agents/agents-new/MeshService64.exe
Binary files /dev/null and b/agents/agents-new/MeshService64.exe differ
agents/agents-old/MeshCmd-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshCmd-signed.exe differ
agents/agents-old/MeshCmd64-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshCmd64-signed.exe differ
agents/agents-old/MeshService-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshService-signed.exe differ
agents/agents-old/MeshService.exe
Binary files /dev/null and b/agents/agents-old/MeshService.exe differ
agents/agents-old/MeshService64-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshService64-signed.exe differ
agents/agents-old/MeshService64.exe
Binary files /dev/null and b/agents/agents-old/MeshService64.exe differ
agents/agents-old/meshagent_arm renamed
agents/agents-old/meshagent_arm-linaro renamed
agents/agents-old/meshagent_arm64 renamed
agents/agents-old/meshagent_armhf renamed
agents/agents-old/meshagent_freebsd_x86-64 renamed
agents/agents-old/meshagent_mips renamed
agents/agents-old/meshagent_osx-x86-64 renamed
agents/agents-old/meshagent_pogo renamed
agents/agents-old/meshagent_poky renamed
agents/agents-old/meshagent_poky64 renamed
agents/agents-old/meshagent_x86 renamed
agents/agents-old/meshagent_x86-64 renamed
agents/agents-old/meshagent_x86-64_nokvm renamed
agents/agents-old/meshagent_x86_nokvm renamed
meshagent.js
+6 -4
@@ -175,9 +175,11 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
175 parent.agentStats.clearingCoreCount++;
176 parent.parent.debug('agent', "Clearing core");
177 } else {
178 - // Update new core
179 - //obj.sendBinary(common.ShortToStr(10) + common.ShortToStr(0) + meshcorehash + parent.parent.defaultMeshCores[corename]); // MeshCommand_CoreModule, start core update
180 - //parent.parent.debug('agent', 'Updating code ' + corename);
178 + // Setup task limiter options, this system limits how many tasks can run at the same time to spread the server load.
179 + var taskLimiterOptions = { hash: meshcorehash, core: parent.parent.defaultMeshCores[corename], name: corename };
180 +
181 + // If the agent supports compression, sent the core compressed.
182 + if ((obj.agentInfo.capabilities & 0x80) && (parent.parent.defaultMeshCoresDeflate[corename])) { args.core = parent.parent.defaultMeshCoresDeflate[corename]; }
183
184 // Update new core with task limiting so not to flood the server. This is a high priority task.
185 obj.agentCoreUpdatePending = true;
@@ -193,7 +195,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
195 // This agent is probably disconnected, nothing to do.
196 parent.parent.taskLimiter.completed(taskid);
197 }
196 - }, { hash: meshcorehash, core: parent.parent.defaultMeshCores[corename], name: corename }, 0);
198 + }, taskLimiterOptions, 0);
199 }
200 obj.agentCoreCheck++;
201 }
meshcentral.js
+6
@@ -55,6 +55,7 @@ function CreateMeshCentralServer(config, args) {
55 obj.certificateOperations = null;
56 obj.defaultMeshCmd = null;
57 obj.defaultMeshCores = {};
58 + obj.defaultMeshCoresDeflate = {};
59 obj.defaultMeshCoresHash = {};
60 obj.meshAgentBinaries = {}; // Mesh Agent Binaries, Architecture type --> { hash:(sha384 hash), size:(binary size), path:(binary path) }
61 obj.meshAgentInstallScripts = {}; // Mesh Install Scripts, Script ID -- { hash:(sha384 hash), size:(binary size), path:(binary path) }
@@ -1992,6 +1993,11 @@ function CreateMeshCentralServer(config, args) {
1993 obj.debug('main', 'Core module ' + i + ' is ' + obj.defaultMeshCores[i].length + ' bytes.');
1994 //console.log('Core module ' + i + ' is ' + obj.defaultMeshCores[i].length + ' bytes.'); // DEBUG, Print the core size
1995 //obj.fs.writeFile("C:\\temp\\" + i + ".js", obj.defaultMeshCores[i].substring(4)); // DEBUG, Write the core to file
1996 +
1997 + // Compress the mesh cores with DEFLATE
1998 + var callback = function MeshCoreDeflateCb(err, buffer) { if (err == null) { obj.defaultMeshCoresDeflate[MeshCoreDeflateCb.i] = buffer; } }
1999 + callback.i = i;
2000 + require('zlib').deflate(obj.defaultMeshCores[i], { level: require('zlib').Z_BEST_COMPRESSION }, callback);
2001 }
2002 }
2003