From ce21e9a8ccdf018bb4b6663e51aa252de616c734 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Tue, 15 Jun 2021 14:05:51 -0700 Subject: [PATCH] Fix for #2777 --- meshdesktopmultiplex.js | 17 ++++++++++++++++- meshrelay.js | 8 +++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/meshdesktopmultiplex.js b/meshdesktopmultiplex.js index da47d16e..e3510465 100644 --- a/meshdesktopmultiplex.js +++ b/meshdesktopmultiplex.js @@ -1118,7 +1118,7 @@ function CreateMeshRelayEx2(parent, ws, req, domain, user, cookie) { }); // If this session has a expire time, setup the expire timer now. - if (cookie && (typeof cookie.expire == 'number')) { obj.expireTimer = setTimeout(obj.close, cookie.expire - currentTime); } + setExpireTimer(); // Mark this relay session as authenticated if this is the user end. obj.authenticated = (user != null); @@ -1205,6 +1205,21 @@ function CreateMeshRelayEx2(parent, ws, req, domain, user, cookie) { } } + // Set the session expire timer + function setExpireTimer() { + if (obj.expireTimer != null) { clearTimeout(obj.expireTimer); delete obj.expireTimer; } + if (cookie && (typeof cookie.expire == 'number')) { + const timeToExpire = (cookie.expire - Date.now()); + if (timeToExpire < 1) { + obj.close(); + } else if (timeToExpire >= 0x7FFFFFFF) { + obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF); // Since expire timer can't be larger than 0x7FFFFFFF, reset timer after that time. + } else { + obj.expireTimer = setTimeout(obj.close, timeToExpire); + } + } + } + // If this is not an authenticated session, or the session does not have routing instructions, just go ahead an connect to existing session. performRelay(0); return obj; diff --git a/meshrelay.js b/meshrelay.js index 3cc9cba4..ff8165b5 100644 --- a/meshrelay.js +++ b/meshrelay.js @@ -619,9 +619,11 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) { function setExpireTimer() { if (obj.expireTimer != null) { clearTimeout(obj.expireTimer); delete obj.expireTimer; } if (cookie && (typeof cookie.expire == 'number')) { - const timeToExpire = (cookie.expire - currentTime); - if (timeToExpire >= 0x7FFFFFFF) { - obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF); + const timeToExpire = (cookie.expire - Date.now()); + if (timeToExpire < 1) { + closeBothSides(); + } else if (timeToExpire >= 0x7FFFFFFF) { + obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF); // Since expire timer can't be larger than 0x7FFFFFFF, reset timer after that time. } else { obj.expireTimer = setTimeout(closeBothSides, timeToExpire); }