diff --git a/agents/recoverycore.js b/agents/recoverycore.js index c0bbfc66..0f4341fb 100644 --- a/agents/recoverycore.js +++ b/agents/recoverycore.js @@ -7,7 +7,6 @@ var tunnels = {}; var fs = require('fs'); var needStreamFix = (new Date(process.versions.meshAgent) < new Date('2020-01-21 13:27:45.000-08:00')); - try { Object.defineProperty(Array.prototype, 'find', { @@ -553,15 +552,15 @@ function agentUpdate_Start(updateurl, updateoptions) { if (process.platform == 'win32') { // Special Processing for Temporary/Console Mode Agents on Windows - var parms = windows_getCommandLine(); - if (parms.findIndex(function (val) { return (val.toUpperCase() == 'RUN' || val.toUpperCase() == 'CONNECT');})>=0) + var parms = windows_getCommandLine(); // This uses FFI to fetch the command line parameters that the agent was started with + if (parms.findIndex(function (val) { return (val != null && (val.toUpperCase() == 'RUN' || val.toUpperCase() == 'CONNECT')); }) >= 0) { // This is a Temporary/Console Mode Agent sendConsoleText('This is a temporary/console agent, checking for conflicts with background services...'); // Check to see if our binary conflicts with an installed agent var agents = _getPotentialServiceNames(); - if(_getPotentialServiceNames().length>0) + if (_getPotentialServiceNames().length > 0) { sendConsoleText('Self update cannot continue because the installed agent (' + agents[0] + ') conflicts with the currently running Temp/Console agent...', sessionid); return; @@ -648,11 +647,25 @@ function agentUpdate_Start(updateurl, updateoptions) { sendAgentMessage('Self Update FAILED because the downloaded agent FAILED hash check (' + agentUpdate_Start._retryCount + '), URL: ' + updateurl, 3); agentUpdate_Start._selfupdate = null; + try + { + // We are clearing these two properties, becuase some older agents may not cleanup correctly causing problems with the retry + require('https').globalAgent.sockets = {}; + require('https').globalAgent.requests = {}; + } + catch(z) + {} + if (needStreamFix) + { + sendConsoleText('This is an older agent that may have an httpstream bug. On next retry will try to fetch the update differently...'); + needStreamFix = false; + } + if (agentUpdate_Start._retryCount < 4) { // Retry the download again - sendConsoleText('Self Update will try again in 60 seconds...', sessionid); - agentUpdate_Start._timeout = setTimeout(agentUpdate_Start, 60000, updateurl, updateoptions); + sendConsoleText('Self Update will try again in 20 seconds...', sessionid); + agentUpdate_Start._timeout = setTimeout(agentUpdate_Start, 20000, updateurl, updateoptions); } else { @@ -900,7 +913,8 @@ function onTunnelControlData(data, ws) { } -require('MeshAgent').AddCommandHandler(function (data) { +require('MeshAgent').AddCommandHandler(function (data) +{ if (typeof data == 'object') { // If this is a console command, parse it and call the console handler switch (data.action) {