|
@@ -33,7 +33,16 @@ export default class IceFailedHandling {
|
33
|
33
|
* @returns {void}
|
34
|
34
|
*/
|
35
|
35
|
_actOnIceFailed() {
|
36
|
|
- if (!this._conference.options.config.enableIceRestart) {
|
|
36
|
+ const { enableIceRestart } = this._conference.options.config;
|
|
37
|
+ const explicitlyDisabled = typeof enableIceRestart !== 'undefined' && !enableIceRestart;
|
|
38
|
+ const supportsRestartByTerminate = this._conference.room.supportsRestartByTerminate();
|
|
39
|
+ const useTerminateForRestart = supportsRestartByTerminate && !enableIceRestart;
|
|
40
|
+
|
|
41
|
+ logger.info('ICE failed,'
|
|
42
|
+ + ` enableIceRestart: ${enableIceRestart},`
|
|
43
|
+ + ` supports restart by terminate: ${supportsRestartByTerminate}`);
|
|
44
|
+
|
|
45
|
+ if (explicitlyDisabled || (!enableIceRestart && !supportsRestartByTerminate)) {
|
37
|
46
|
logger.info('ICE failed, but ICE restarts are disabled');
|
38
|
47
|
this._conference.eventEmitter.emit(
|
39
|
48
|
JitsiConferenceEvents.CONFERENCE_FAILED,
|
|
@@ -50,8 +59,25 @@ export default class IceFailedHandling {
|
50
|
59
|
} else if (jvbConnIceState === 'connected') {
|
51
|
60
|
logger.info('ICE connection restored - not sending ICE failed');
|
52
|
61
|
} else {
|
53
|
|
- logger.info(`Sending ICE failed - the connection has not recovered: ${jvbConnIceState}`);
|
54
|
|
- jvbConnection.sendIceFailedNotification();
|
|
62
|
+ logger.info('Sending ICE failed - the connection did not recover, '
|
|
63
|
+ + `ICE state: ${jvbConnIceState}, `
|
|
64
|
+ + `use 'session-terminate': ${useTerminateForRestart}`);
|
|
65
|
+ if (useTerminateForRestart) {
|
|
66
|
+ this._conference.jvbJingleSession.terminate(
|
|
67
|
+ () => {
|
|
68
|
+ logger.info('session-terminate for ice restart - done');
|
|
69
|
+ },
|
|
70
|
+ error => {
|
|
71
|
+ logger.error(`session-terminate for ice restart - error: ${error.message}`);
|
|
72
|
+ }, {
|
|
73
|
+ reason: 'connectivity-error',
|
|
74
|
+ reasonDescription: 'ICE FAILED',
|
|
75
|
+ requestRestart: true,
|
|
76
|
+ sendSessionTerminate: true
|
|
77
|
+ });
|
|
78
|
+ } else {
|
|
79
|
+ this._conference.jvbJingleSession.sendIceFailedNotification();
|
|
80
|
+ }
|
55
|
81
|
}
|
56
|
82
|
}
|
57
|
83
|
|