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
}