|
@@ -146,6 +146,7 @@ export default class XMPP {
|
146
|
146
|
} else if (status === Strophe.Status.DISCONNECTED) {
|
147
|
147
|
// Stop ping interval
|
148
|
148
|
this.connection.ping.stopInterval();
|
|
149
|
+ const wasIntentionalDisconnect = this.disconnectInProgress;
|
149
|
150
|
const errMsg = msg ? msg : this.lastErrorMsg;
|
150
|
151
|
this.disconnectInProgress = false;
|
151
|
152
|
if (this.anonymousConnectionFailed) {
|
|
@@ -157,6 +158,17 @@ export default class XMPP {
|
157
|
158
|
this.eventEmitter.emit(
|
158
|
159
|
JitsiConnectionEvents.CONNECTION_FAILED,
|
159
|
160
|
JitsiConnectionErrors.OTHER_ERROR, errMsg);
|
|
161
|
+ } else if (!wasIntentionalDisconnect) {
|
|
162
|
+ // XXX if Strophe drops the connection while not being asked to,
|
|
163
|
+ // it means that most likely some serious error has occurred.
|
|
164
|
+ // One currently known case is when a BOSH request fails for
|
|
165
|
+ // more than 4 times. The connection is dropped without
|
|
166
|
+ // supplying a reason(error message/event) through the API.
|
|
167
|
+ logger.error("XMPP connection dropped!");
|
|
168
|
+ this.eventEmitter.emit(
|
|
169
|
+ JitsiConnectionEvents.CONNECTION_FAILED,
|
|
170
|
+ JitsiConnectionErrors.OTHER_ERROR,
|
|
171
|
+ errMsg ? errMsg : 'connection-dropped-error');
|
160
|
172
|
} else {
|
161
|
173
|
this.eventEmitter.emit(
|
162
|
174
|
JitsiConnectionEvents.CONNECTION_DISCONNECTED, errMsg);
|