Fix for #2777

Ylian Saint-Hilaire committed Jun 15, 2021 at 14:05 UTC ce21e9a8ccdf018bb4b6663e51aa252de616c734
2 files changed +21 -4
meshdesktopmultiplex.js
+16 -1
@@ -1118,7 +1118,7 @@ function CreateMeshRelayEx2(parent, ws, req, domain, user, cookie) {
1118 });
1119
1120 // If this session has a expire time, setup the expire timer now.
1121 - if (cookie && (typeof cookie.expire == 'number')) { obj.expireTimer = setTimeout(obj.close, cookie.expire - currentTime); }
1121 + setExpireTimer();
1122
1123 // Mark this relay session as authenticated if this is the user end.
1124 obj.authenticated = (user != null);
@@ -1205,6 +1205,21 @@ function CreateMeshRelayEx2(parent, ws, req, domain, user, cookie) {
1205 }
1206 }
1207
1208 + // Set the session expire timer
1209 + function setExpireTimer() {
1210 + if (obj.expireTimer != null) { clearTimeout(obj.expireTimer); delete obj.expireTimer; }
1211 + if (cookie && (typeof cookie.expire == 'number')) {
1212 + const timeToExpire = (cookie.expire - Date.now());
1213 + if (timeToExpire < 1) {
1214 + obj.close();
1215 + } else if (timeToExpire >= 0x7FFFFFFF) {
1216 + obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF); // Since expire timer can't be larger than 0x7FFFFFFF, reset timer after that time.
1217 + } else {
1218 + obj.expireTimer = setTimeout(obj.close, timeToExpire);
1219 + }
1220 + }
1221 + }
1222 +
1223 // If this is not an authenticated session, or the session does not have routing instructions, just go ahead an connect to existing session.
1224 performRelay(0);
1225 return obj;
meshrelay.js
+5 -3
@@ -619,9 +619,11 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
619 function setExpireTimer() {
620 if (obj.expireTimer != null) { clearTimeout(obj.expireTimer); delete obj.expireTimer; }
621 if (cookie && (typeof cookie.expire == 'number')) {
622 - const timeToExpire = (cookie.expire - currentTime);
623 - if (timeToExpire >= 0x7FFFFFFF) {
624 - obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF);
622 + const timeToExpire = (cookie.expire - Date.now());
623 + if (timeToExpire < 1) {
624 + closeBothSides();
625 + } else if (timeToExpire >= 0x7FFFFFFF) {
626 + obj.expireTimer = setTimeout(setExpireTimer, 0x7FFFFFFF); // Since expire timer can't be larger than 0x7FFFFFFF, reset timer after that time.
627 } else {
628 obj.expireTimer = setTimeout(closeBothSides, timeToExpire);
629 }