From 574bff25182e32e73d6e41016e29908d0c98c50f Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Tue, 25 May 2021 15:36:29 -0700 Subject: [PATCH] Improved fix for #2687 --- meshrelay.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/meshrelay.js b/meshrelay.js index cd1862b1..3cc9cba4 100644 --- a/meshrelay.js +++ b/meshrelay.js @@ -615,6 +615,19 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) { closeBothSides(); }); + // 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 - currentTime); + if (timeToExpire >= 0x7FFFFFFF) { + obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF); + } else { + obj.expireTimer = setTimeout(closeBothSides, timeToExpire); + } + } + } + // Close both our side and the peer side. function closeBothSides() { if (obj.id != null) { @@ -770,10 +783,7 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) { } // If this session has a expire time, setup the expire timer now. - if (cookie && (typeof cookie.expire == 'number')) { - const timeToExpire = (cookie.expire - currentTime); - if (timeToExpire < 0x7FFFFFFF) { obj.expireTimer = setTimeout(closeBothSides, timeToExpire); } // Only set the timeout if it fits in 32bit signed integer. - } + setExpireTimer(); // Mark this relay session as authenticated if this is the user end. obj.authenticated = (user != null);