Don't poll websocket on remote expiration

This commit is contained in:
Fedor Indutny 2024-02-14 10:37:47 -08:00 committed by GitHub
parent fe27910221
commit cd3d3dc8a6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 1 deletions

View file

@ -1332,6 +1332,10 @@ export async function startApp(): Promise<void> {
return; return;
} }
if (remotelyExpired) {
return;
}
log.info('reconnectToWebSocket starting...'); log.info('reconnectToWebSocket starting...');
await server.reconnect(); await server.reconnect();
}); });
@ -1352,6 +1356,16 @@ export async function startApp(): Promise<void> {
void unlinkAndDisconnect(); void unlinkAndDisconnect();
}); });
window.Whisper.events.on('httpResponse499', () => {
if (remotelyExpired) {
return;
}
log.warn('background: remote expiration detected, disabling reconnects');
remotelyExpired = true;
onOffline();
});
async function runStorageService() { async function runStorageService() {
StorageService.enableStorageService(); StorageService.enableStorageService();
} }
@ -1554,6 +1568,10 @@ export async function startApp(): Promise<void> {
} }
function onOnline() { function onOnline() {
if (remotelyExpired) {
return;
}
log.info('online'); log.info('online');
window.removeEventListener('online', onOnline); window.removeEventListener('online', onOnline);
@ -1604,12 +1622,18 @@ export async function startApp(): Promise<void> {
let connectCount = 0; let connectCount = 0;
let connecting = false; let connecting = false;
let remotelyExpired = false;
async function connect(firstRun?: boolean) { async function connect(firstRun?: boolean) {
if (connecting) { if (connecting) {
log.warn('connect already running', { connectCount }); log.warn('connect already running', { connectCount });
return; return;
} }
if (remotelyExpired) {
log.warn('remotely expired, not reconnecting');
return;
}
strictAssert(server !== undefined, 'WebAPI not connected'); strictAssert(server !== undefined, 'WebAPI not connected');
try { try {
@ -1711,7 +1735,9 @@ export async function startApp(): Promise<void> {
server.registerRequestHandler(messageReceiver); server.registerRequestHandler(messageReceiver);
// If coming here after `offline` event - connect again. // If coming here after `offline` event - connect again.
await server.onOnline(); if (!remotelyExpired) {
await server.onOnline();
}
void AttachmentDownloads.start({ void AttachmentDownloads.start({
logger: log, logger: log,

View file

@ -8,6 +8,7 @@ export async function handleStatusCode(status: number): Promise<void> {
if (status === 499) { if (status === 499) {
log.error('Got 499 from Signal Server. Build is expired.'); log.error('Got 499 from Signal Server. Build is expired.');
await window.storage.put('remoteBuildExpiration', Date.now()); await window.storage.put('remoteBuildExpiration', Date.now());
window.Whisper.events.trigger('httpResponse499');
} }
} }