Преглед изворни кода

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.
JC Brand пре 6 година
родитељ
комит
83201e7c02
3 измењених фајлова са 17 додато и 30 уклоњено
  1. 5 28
      package-lock.json
  2. 11 1
      src/headless/converse-core.js
  3. 1 1
      src/headless/package.json

+ 5 - 28
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",

+ 11 - 1
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;
                 }

+ 1 - 1
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"
   }