From 8c20a31dd44995fd2dd2cec8081b38f9d5bbab28 Mon Sep 17 00:00:00 2001 From: Beaudan Date: Fri, 1 Mar 2019 12:42:57 +1100 Subject: [PATCH] Review suggestions --- js/modules/loki_snode_api.js | 11 +++++++++-- libtextsecure/errors.js | 17 +++++++++++++++++ libtextsecure/message_receiver.js | 24 ++++++++++++------------ 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/js/modules/loki_snode_api.js b/js/modules/loki_snode_api.js index fad22234d..9f805bb8b 100644 --- a/js/modules/loki_snode_api.js +++ b/js/modules/loki_snode_api.js @@ -50,8 +50,15 @@ class LokiSnodeAPI { } async getMyLokiIp() { - const address = await resolveCname(this.localUrl); - return resolve4(address); + try { + const address = await resolveCname(this.localUrl); + return resolve4(address); + } catch (e) { + throw new window.textsecure.LokiIpError( + 'Failed to resolve localhost.loki', + e + ); + } } async getMyLokiAddress() { diff --git a/libtextsecure/errors.js b/libtextsecure/errors.js index 7f972492e..d6788957c 100644 --- a/libtextsecure/errors.js +++ b/libtextsecure/errors.js @@ -167,6 +167,22 @@ } inherit(ReplayableError, DNSResolutionError); + function LokiIpError(message, resolutionError) { + this.name = 'LokiIpError'; + this.message = message; + this.error = resolutionError; + + Error.call(this, message); + + // Maintains proper stack trace, where our error was thrown (only available on V8) + // via https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error + if (Error.captureStackTrace) { + Error.captureStackTrace(this); + } + + appendStack(this, resolutionError); + } + window.textsecure.UnregisteredUserError = UnregisteredUserError; window.textsecure.SendMessageNetworkError = SendMessageNetworkError; window.textsecure.IncomingIdentityKeyError = IncomingIdentityKeyError; @@ -178,4 +194,5 @@ window.textsecure.PoWError = PoWError; window.textsecure.EmptySwarmError = EmptySwarmError; window.textsecure.DNSResolutionError = DNSResolutionError; + window.textsecure.LokiIpError = LokiIpError; })(); diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 28053d386..3530a6008 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -119,22 +119,22 @@ MessageReceiver.prototype.extend({ let myServerPort; try { myLokiIp = await window.lokiSnodeAPI.getMyLokiIp(); - } catch (e) { - window.log.warn( - 'Failed to get my loki address to bind server to, will retry in 30 seconds' - ); - setTimeout(this.startLocalServer.bind(this), 30 * 1000); - } - try { myServerPort = await localLokiServer.start(localServerPort, myLokiIp); + window.log.info(`Local Server started at ${myLokiIp}:${myServerPort}`); + libloki.api.broadcastOnlineStatus(); + localLokiServer.on('message', this.handleP2pMessage.bind(this)); } catch (e) { - window.log.warn('Failed to start local loki server, will retry in 30 seconds'); + if (e instanceof textsecure.LokiIpError) { + window.log.warn( + 'Failed to get my loki address to bind server to, will retry in 30 seconds' + ); + } else { + window.log.warn( + 'Failed to start local loki server, will retry in 30 seconds' + ); + } setTimeout(this.startLocalServer.bind(this), 30 * 1000); } - - window.log.info(`Local Server started at ${myLokiIp}:${myServerPort}`); - libloki.api.broadcastOnlineStatus(); - localLokiServer.on('message', this.handleP2pMessage.bind(this)); }, handleP2pMessage(message) { this.httpPollingResource.handleMessage(message, true);