From dc04bbe73707f3f49b6147e44ec83e93e258d929 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Wed, 27 Nov 2013 15:42:05 -0800 Subject: [PATCH] Enhanced security for idle server reconnect --- src/js/ripple/server.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/js/ripple/server.js b/src/js/ripple/server.js index e980d337..6f63f991 100644 --- a/src/js/ripple/server.js +++ b/src/js/ripple/server.js @@ -45,13 +45,16 @@ function Server(remote, opts) { }); function checkServerActivity() { + if (isNaN(self._lastLedgerClose)) return; + var delta = Date.now() - self._lastLedgerClose; + if (delta > (1000 * 20)) { self.reconnect(); } }; - this.once('connect', function() { + this.once('ledger_closed', function() { setInterval(checkServerActivity, 1000); }); }; @@ -251,8 +254,10 @@ Server.prototype.disconnect = function() { */ Server.prototype.reconnect = function() { - this.disconnect(); - this.connect(); + if (this._ws) { + this._ws.once('close', this.connect.bind(this)); + this.disconnect(); + } }; /** @@ -336,6 +341,7 @@ Server.prototype._handleMessage = function(message) { case 'ledgerClosed': this._lastLedgerClose = Date.now(); + this.emit('ledger_closed', message); break; case 'path_find': @@ -360,6 +366,8 @@ Server.prototype._handleMessage = function(message) { } else if (message.error) { this._remote._trace('server: error: %s', message); + console.log('ERROR', message); + request.emit('error', { error : 'remoteError', error_message : 'Remote reported an error.',