From 83201e7c0247733c34e9d28a21b511fa8699c1fa Mon Sep 17 00:00:00 2001 From: JC Brand Date: Fri, 14 Jun 2019 11:54:19 +0200 Subject: [PATCH] Reconnection fixes. When reconnecting with a new transport, we call setUserJID so that a new resource is generated, to avoid multiple server-side sessions with the same resource. We also call `_proto._doDisconnect` so that connection event handlers for the old transport are removed. --- package-lock.json | 33 +++++---------------------------- src/headless/converse-core.js | 12 +++++++++++- src/headless/package.json | 2 +- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index fec2ed098..f7b597253 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2408,19 +2408,11 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "dev": true, "requires": { "underscore": ">=1.8.3" } }, - "backbone.browserStorage": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/backbone.browserStorage/-/backbone.browserStorage-0.0.5.tgz", - "integrity": "sha512-Cf8B90EIWyHMm/ReS5yFmFMOXPVNda6QcTFcdyp1RW/1zM3LZF2Nf4U601/seIaEu/X8cRVEKqTINpPKql3sxA==", - "requires": { - "backbone": "~1.x.x", - "underscore": ">=1.4.0" - } - }, "backbone.nativeview": { "version": "github:conversejs/Backbone.NativeView#5997c8197ca594e6b8469447f28310c78bd1d95e", "from": "github:conversejs/Backbone.NativeView#5997c8197ca594e6b8469447f28310c78bd1d95e", @@ -7104,7 +7096,8 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true }, "lodash-template-webpack-loader": { "version": "github:jcbrand/lodash-template-webpack-loader#258c095ab22130dfde454fa59ee0986f302bb733", @@ -12011,14 +12004,6 @@ "find-up": "^2.1.0" } }, - "pluggable.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pluggable.js/-/pluggable.js-2.0.1.tgz", - "integrity": "sha512-SBt6v6Tbp20Jf8hU0cpcc/+HBHGMY8/Q+yA6Ih0tBQE8tfdZ6U4PRG0iNvUUjLx/hVyOP53n0UfGBymlfaaXCg==", - "requires": { - "lodash": "^4.17.11" - } - }, "po2json": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/po2json/-/po2json-0.4.5.tgz", @@ -13748,10 +13733,6 @@ "through": "^2.3.4" } }, - "strophe.js": { - "version": "github:strophe/strophejs#c675bcfcf44527ba1cf844a1aaa68fe7003c6140", - "from": "github:strophe/strophejs#c675bcfcf44527ba1cf844a1aaa68fe7003c6140" - }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", @@ -14182,11 +14163,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "twemoji": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/twemoji/-/twemoji-11.3.0.tgz", - "integrity": "sha512-xN/vlR6+gDmfjt6LInAqwGAv3Agwrmzx5TD1jEFwKS19IOGDrX0/3OB8GP1wUYPVIdkaer5hw6qd+52jzvz0Lg==" - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -14274,7 +14250,8 @@ "underscore": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true }, "underscore-contrib": { "version": "0.3.0", diff --git a/src/headless/converse-core.js b/src/headless/converse-core.js index e2a0a0f33..211d7aba3 100644 --- a/src/headless/converse-core.js +++ b/src/headless/converse-core.js @@ -1349,13 +1349,23 @@ _converse.api = { * @method reconnect * @memberOf _converse.api.connection */ - reconnect () { + async reconnect () { const conn_status = _converse.connfeedback.get('connection_status'); if (conn_status === Strophe.Status.CONNFAIL) { + // When reconnecting with a new transport, we call setUserJID + // so that a new resource is generated, to avoid multiple + // server-side sessions with the same resource. + // + // We also call `_proto._doDisconnect` so that connection event handlers + // for the old transport are removed. if (_converse.api.connection.isType('websocket') && _converse.bosh_service_url) { + await setUserJID(_converse.bare_jid); + _converse.connection._proto._doDisconnect(); _converse.connection._proto = new Strophe.Bosh(_converse.connection); _converse.connection.service = _converse.bosh_service_url; } else if (_converse.api.connection.isType('bosh') && _converse.websocket_url) { + await setUserJID(_converse.bare_jid); + _converse.connection._proto._doDisconnect(); _converse.connection._proto = new Strophe.Websocket(_converse.connection); _converse.connection.service = _converse.websocket_url; } diff --git a/src/headless/package.json b/src/headless/package.json index e0bb2785b..ad382251c 100644 --- a/src/headless/package.json +++ b/src/headless/package.json @@ -29,7 +29,7 @@ "jed": "1.1.1", "lodash": "^4.17.11", "pluggable.js": "2.0.1", - "strophe.js": "strophe/strophejs#c675bcfcf44527ba1cf844a1aaa68fe7003c6140", + "strophe.js": "strophe/strophejs#31f31b52fd37a92eebee7b47d668a7d7dc40df3b", "twemoji": "^11.0.1", "urijs": "^1.19.1" }