From 9b12d8a978d8c8166d675946cb6e4183a6d33f3b Mon Sep 17 00:00:00 2001 From: lilia Date: Fri, 23 Oct 2015 18:33:07 -0700 Subject: [PATCH] Reconnect provisioning socket If the provisioning socket closes, reconnect and generate a new qr code. Fixes #371 // FREEBIE --- js/libtextsecure.js | 3 +- js/options.js | 58 ++++++++++++++++++-------------- libtextsecure/account_manager.js | 3 +- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/js/libtextsecure.js b/js/libtextsecure.js index 109e56d119..86effb6793 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -39073,10 +39073,11 @@ var TextSecureServer = (function() { var registerKeys = this.server.registerKeys.bind(this.server); var getSocket = this.server.getProvisioningSocket.bind(this.server); return textsecure.protocol_wrapper.createIdentityKeyRecvSocket().then(function(cryptoInfo) { - return new Promise(function(resolve) { + return new Promise(function(resolve, reject) { var socket = getSocket(); socket.onclose = function(e) { console.log('websocket closed', e.code); + reject(new Error('websocket closed')); }; var wsr = new WebSocketResource(socket, { keepalive: { path: '/v1/keepalive/provisioning' }, diff --git a/js/options.js b/js/options.js index ab74e8645e..6f651fca29 100644 --- a/js/options.js +++ b/js/options.js @@ -61,34 +61,40 @@ }); $(function() { - $('#init-setup').show().addClass('in'); - $('#status').text("Connecting..."); - var accountManager = new bg.getAccountManager(); - accountManager.registerSecondDevice(setProvisioningUrl, confirmNumber, incrementCounter).then(function() { - var launch = function() { - bg.openInbox(); - bg.removeEventListener('textsecure:contactsync', launch); - clearTimeout(timeout); - window.close(); - }; - var timeout = setTimeout(launch, 60000); - bg.addEventListener('textsecure:contactsync', launch); - $('.progress-dialog .status').text('Syncing groups and contacts'); - $('.progress-dialog .bar').addClass('progress-bar-striped active'); - }).catch(function(e) { - if (e.name === 'HTTPError' && e.code == 411) { - $('.progress-dialog').hide(); - $('.error-dialog').show(); - $('.error-dialog .ok').click(function(e) { - chrome.runtime.reload(); - }); - } - else { - throw e; - } - }); + var init = function() { + $('#init-setup').show().addClass('in'); + $('#qr').html(''); + $('#status').text("Connecting..."); + + accountManager.registerSecondDevice(setProvisioningUrl, confirmNumber, incrementCounter).then(function() { + var launch = function() { + bg.openInbox(); + bg.removeEventListener('textsecure:contactsync', launch); + clearTimeout(timeout); + window.close(); + }; + var timeout = setTimeout(launch, 60000); + bg.addEventListener('textsecure:contactsync', launch); + $('.progress-dialog .status').text('Syncing groups and contacts'); + $('.progress-dialog .bar').addClass('progress-bar-striped active'); + }).catch(function(e) { + if (e.message === 'websocket closed') { + init(); + } else if (e.name === 'HTTPError' && e.code == 411) { + $('.progress-dialog').hide(); + $('.error-dialog').show(); + $('.error-dialog .ok').click(function(e) { + chrome.runtime.reload(); + }); + } + else { + throw e; + } + }); + }; + init(); }); }); })(); diff --git a/libtextsecure/account_manager.js b/libtextsecure/account_manager.js index 2bb1496924..3ba747b7a4 100644 --- a/libtextsecure/account_manager.js +++ b/libtextsecure/account_manager.js @@ -36,10 +36,11 @@ var registerKeys = this.server.registerKeys.bind(this.server); var getSocket = this.server.getProvisioningSocket.bind(this.server); return textsecure.protocol_wrapper.createIdentityKeyRecvSocket().then(function(cryptoInfo) { - return new Promise(function(resolve) { + return new Promise(function(resolve, reject) { var socket = getSocket(); socket.onclose = function(e) { console.log('websocket closed', e.code); + reject(new Error('websocket closed')); }; var wsr = new WebSocketResource(socket, { keepalive: { path: '/v1/keepalive/provisioning' },