@webex/plugin-meetings 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +5 -4
- package/dist/constants.js +8 -4
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +16 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/mediaSharesUtils.js +15 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/selfUtils.js +5 -0
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/media/MediaConnectionAwaiter.js +163 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -0
- package/dist/media/index.js +4 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +4 -24
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.d.ts +26 -7
- package/dist/meeting/index.js +893 -677
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +2 -8
- package/dist/meeting/muteState.js +37 -25
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +3 -0
- package/dist/meeting/request.js +32 -23
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +1 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +4 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.d.ts +8 -0
- package/dist/meetings/index.js +20 -0
- package/dist/meetings/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.d.ts +2 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.d.ts +2 -0
- package/dist/multistream/remoteMediaGroup.js +16 -2
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.d.ts +15 -0
- package/dist/multistream/remoteMediaManager.js +179 -65
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.d.ts +9 -1
- package/dist/multistream/sendSlotManager.js +22 -0
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/reachability/clusterReachability.d.ts +1 -0
- package/dist/reachability/clusterReachability.js +29 -15
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.d.ts +4 -0
- package/dist/reachability/index.js +18 -2
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +12 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +7 -0
- package/dist/reachability/util.js +19 -0
- package/dist/reachability/util.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -1
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.d.ts +10 -2
- package/dist/roap/index.js +15 -0
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +3 -3
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +64 -17
- package/dist/roap/turnDiscovery.js +307 -126
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/index.js +53 -30
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/config.ts +1 -0
- package/src/constants.ts +7 -3
- package/src/index.ts +1 -0
- package/src/interpretation/index.ts +18 -1
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/locus-info/selfUtils.ts +5 -0
- package/src/media/MediaConnectionAwaiter.ts +174 -0
- package/src/media/index.ts +3 -1
- package/src/media/properties.ts +6 -31
- package/src/meeting/index.ts +321 -106
- package/src/meeting/muteState.ts +34 -20
- package/src/meeting/request.ts +18 -2
- package/src/meeting/util.ts +1 -0
- package/src/meeting-info/utilv2.ts +2 -1
- package/src/meetings/index.ts +18 -0
- package/src/multistream/mediaRequestManager.ts +4 -1
- package/src/multistream/remoteMediaGroup.ts +19 -0
- package/src/multistream/remoteMediaManager.ts +101 -16
- package/src/multistream/sendSlotManager.ts +28 -0
- package/src/reachability/clusterReachability.ts +20 -5
- package/src/reachability/index.ts +24 -1
- package/src/reachability/request.ts +15 -11
- package/src/reachability/util.ts +21 -0
- package/src/reconnection-manager/index.ts +1 -1
- package/src/roap/index.ts +25 -3
- package/src/roap/request.ts +3 -3
- package/src/roap/turnDiscovery.ts +244 -78
- package/src/statsAnalyzer/index.ts +63 -27
- package/test/integration/spec/journey.js +14 -14
- package/test/integration/spec/space-meeting.js +1 -1
- package/test/unit/spec/interpretation/index.ts +39 -3
- package/test/unit/spec/locus-info/index.js +28 -19
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +9 -0
- package/test/unit/spec/locus-info/selfUtils.js +42 -12
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +344 -0
- package/test/unit/spec/media/index.ts +89 -78
- package/test/unit/spec/media/properties.ts +16 -70
- package/test/unit/spec/meeting/index.js +638 -139
- package/test/unit/spec/meeting/muteState.js +219 -67
- package/test/unit/spec/meeting/request.js +21 -0
- package/test/unit/spec/meeting/utils.js +6 -1
- package/test/unit/spec/meeting-info/utilv2.js +6 -0
- package/test/unit/spec/meetings/index.js +40 -20
- package/test/unit/spec/multistream/mediaRequestManager.ts +20 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +79 -1
- package/test/unit/spec/multistream/remoteMediaManager.ts +199 -1
- package/test/unit/spec/multistream/sendSlotManager.ts +50 -18
- package/test/unit/spec/reachability/clusterReachability.ts +86 -22
- package/test/unit/spec/reachability/index.ts +197 -60
- package/test/unit/spec/reachability/request.js +15 -7
- package/test/unit/spec/reachability/util.ts +32 -2
- package/test/unit/spec/reconnection-manager/index.js +28 -0
- package/test/unit/spec/roap/index.ts +61 -6
- package/test/unit/spec/roap/turnDiscovery.ts +298 -16
- package/test/unit/spec/stats-analyzer/index.js +179 -0
- package/dist/member/member.types.d.ts +0 -11
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/src/member/member.types.ts +0 -13
- /package/test/unit/spec/locus-info/{lib/selfConstant.js → selfConstant.js} +0 -0
|
@@ -28,7 +28,15 @@ var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
|
|
|
28
28
|
// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
|
|
29
29
|
// and do the SDP offer with seq=1
|
|
30
30
|
var TURN_DISCOVERY_SEQ = 0;
|
|
31
|
+
var TurnDiscoverySkipReason = {
|
|
32
|
+
missingHttpResponse: 'missing http response',
|
|
33
|
+
// when we asked for the TURN discovery response to be in the http response, but it wasn't there
|
|
34
|
+
reachability: 'reachability',
|
|
35
|
+
// when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)
|
|
36
|
+
alreadyInProgress: 'already in progress' // when we try to start TURN discovery while it's already in progress
|
|
37
|
+
};
|
|
31
38
|
|
|
39
|
+
// used when TURN discovery is not skipped
|
|
32
40
|
/**
|
|
33
41
|
* Handles the process of finding out TURN server information from Linus.
|
|
34
42
|
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
|
@@ -78,7 +86,8 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
78
86
|
}
|
|
79
87
|
|
|
80
88
|
/**
|
|
81
|
-
*
|
|
89
|
+
* Handles TURN_DISCOVERY_RESPONSE roap message. Use it if the roap message comes over the websocket,
|
|
90
|
+
* otherwise use handleTurnDiscoveryHttpResponse() if it comes in the http response.
|
|
82
91
|
*
|
|
83
92
|
* @param {Object} roapMessage
|
|
84
93
|
* @param {string} from string to indicate how we got the response (used just for logging)
|
|
@@ -132,32 +141,235 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
132
141
|
}
|
|
133
142
|
|
|
134
143
|
/**
|
|
135
|
-
*
|
|
144
|
+
* Generates TURN_DISCOVERY_REQUEST roap message. When this method returns a roapMessage, it means that a TURN discovery process has started.
|
|
145
|
+
* It needs be ended by calling handleTurnDiscoveryHttpResponse() once you get a response from the backend. If you don't get any response
|
|
146
|
+
* or want to abort, you need to call abort().
|
|
136
147
|
*
|
|
137
|
-
* @param {
|
|
138
|
-
* @
|
|
139
|
-
* @
|
|
148
|
+
* @param {Meeting} meeting
|
|
149
|
+
* @param {boolean} isForced
|
|
150
|
+
* @returns {Object}
|
|
140
151
|
*/
|
|
141
152
|
}, {
|
|
142
|
-
key: "
|
|
153
|
+
key: "generateTurnDiscoveryRequestMessage",
|
|
143
154
|
value: (function () {
|
|
144
|
-
var
|
|
155
|
+
var _generateTurnDiscoveryRequestMessage = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(meeting, isForced) {
|
|
156
|
+
var turnDiscoverySkippedReason, roapMessage;
|
|
145
157
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
146
158
|
while (1) switch (_context.prev = _context.next) {
|
|
147
159
|
case 0:
|
|
148
|
-
this.
|
|
149
|
-
|
|
150
|
-
|
|
160
|
+
if (!this.defer) {
|
|
161
|
+
_context.next = 3;
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
_loggerProxy.default.logger.warn('Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress');
|
|
165
|
+
return _context.abrupt("return", {
|
|
166
|
+
roapMessage: undefined,
|
|
167
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
|
|
168
|
+
});
|
|
169
|
+
case 3:
|
|
170
|
+
if (isForced) {
|
|
171
|
+
_context.next = 7;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
_context.next = 6;
|
|
175
|
+
return this.getSkipReason(meeting);
|
|
176
|
+
case 6:
|
|
177
|
+
turnDiscoverySkippedReason = _context.sent;
|
|
178
|
+
case 7:
|
|
179
|
+
if (!turnDiscoverySkippedReason) {
|
|
180
|
+
_context.next = 9;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
return _context.abrupt("return", {
|
|
184
|
+
roapMessage: undefined,
|
|
185
|
+
turnDiscoverySkippedReason: turnDiscoverySkippedReason
|
|
186
|
+
});
|
|
187
|
+
case 9:
|
|
188
|
+
this.defer = new _common.Defer();
|
|
189
|
+
roapMessage = {
|
|
190
|
+
messageType: _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
|
|
191
|
+
version: _constants2.ROAP.ROAP_VERSION,
|
|
192
|
+
seq: TURN_DISCOVERY_SEQ,
|
|
193
|
+
headers: ['includeAnswerInHttpResponse', 'noOkInTransaction']
|
|
194
|
+
};
|
|
195
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> generated TURN_DISCOVERY_REQUEST message');
|
|
196
|
+
return _context.abrupt("return", {
|
|
197
|
+
roapMessage: roapMessage,
|
|
198
|
+
turnDiscoverySkippedReason: undefined
|
|
199
|
+
});
|
|
200
|
+
case 13:
|
|
151
201
|
case "end":
|
|
152
202
|
return _context.stop();
|
|
153
203
|
}
|
|
154
204
|
}, _callee, this);
|
|
155
205
|
}));
|
|
156
|
-
function
|
|
157
|
-
return
|
|
206
|
+
function generateTurnDiscoveryRequestMessage(_x, _x2) {
|
|
207
|
+
return _generateTurnDiscoveryRequestMessage.apply(this, arguments);
|
|
158
208
|
}
|
|
159
|
-
return
|
|
209
|
+
return generateTurnDiscoveryRequestMessage;
|
|
160
210
|
}()
|
|
211
|
+
/**
|
|
212
|
+
* Handles any errors that occur during TURN discovery without re-throwing them.
|
|
213
|
+
*
|
|
214
|
+
* @param {Meeting} meeting
|
|
215
|
+
* @param {Error} error
|
|
216
|
+
* @returns {TurnDiscoveryResult}
|
|
217
|
+
*/
|
|
218
|
+
)
|
|
219
|
+
}, {
|
|
220
|
+
key: "handleTurnDiscoveryFailure",
|
|
221
|
+
value: function handleTurnDiscoveryFailure(meeting, error) {
|
|
222
|
+
// we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
|
|
223
|
+
_loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(error));
|
|
224
|
+
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
|
|
225
|
+
correlation_id: meeting.correlationId,
|
|
226
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
|
227
|
+
reason: error.message,
|
|
228
|
+
stack: error.stack
|
|
229
|
+
});
|
|
230
|
+
return {
|
|
231
|
+
turnServerInfo: undefined,
|
|
232
|
+
turnDiscoverySkippedReason: "failure: ".concat(error.message)
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Handles TURN_DISCOVERY_RESPONSE roap message that came in http response. If the response is not valid,
|
|
238
|
+
* it returns an object with turnServerInfo set to undefined. In that case you need to call abort()
|
|
239
|
+
* to end the TURN discovery process.
|
|
240
|
+
*
|
|
241
|
+
* @param {Meeting} meeting
|
|
242
|
+
* @param {Object|undefined} httpResponse can be undefined to indicate that we didn't get the response
|
|
243
|
+
* @returns {Promise<TurnDiscoveryResult>}
|
|
244
|
+
* @memberof Roap
|
|
245
|
+
*/
|
|
246
|
+
}, {
|
|
247
|
+
key: "handleTurnDiscoveryHttpResponse",
|
|
248
|
+
value: (function () {
|
|
249
|
+
var _handleTurnDiscoveryHttpResponse = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(meeting, httpResponse) {
|
|
250
|
+
var roapMessage, _yield$this$defer$pro, isOkRequired;
|
|
251
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
252
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
253
|
+
case 0:
|
|
254
|
+
if (this.defer) {
|
|
255
|
+
_context2.next = 3;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
_loggerProxy.default.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryHttpResponse --> unexpected http response, TURN discovery is not in progress');
|
|
259
|
+
throw new Error('handleTurnDiscoveryHttpResponse() called before generateTurnDiscoveryRequestMessage()');
|
|
260
|
+
case 3:
|
|
261
|
+
if (!(httpResponse === undefined)) {
|
|
262
|
+
_context2.next = 5;
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
return _context2.abrupt("return", {
|
|
266
|
+
turnServerInfo: undefined,
|
|
267
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
|
|
268
|
+
});
|
|
269
|
+
case 5:
|
|
270
|
+
_context2.prev = 5;
|
|
271
|
+
roapMessage = this.parseHttpTurnDiscoveryResponse(meeting, httpResponse);
|
|
272
|
+
if (roapMessage) {
|
|
273
|
+
_context2.next = 9;
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
return _context2.abrupt("return", {
|
|
277
|
+
turnServerInfo: undefined,
|
|
278
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
|
|
279
|
+
});
|
|
280
|
+
case 9:
|
|
281
|
+
this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
|
|
282
|
+
_context2.next = 12;
|
|
283
|
+
return this.defer.promise;
|
|
284
|
+
case 12:
|
|
285
|
+
_yield$this$defer$pro = _context2.sent;
|
|
286
|
+
isOkRequired = _yield$this$defer$pro.isOkRequired;
|
|
287
|
+
if (!isOkRequired) {
|
|
288
|
+
_context2.next = 17;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
_context2.next = 17;
|
|
292
|
+
return this.sendRoapOK(meeting);
|
|
293
|
+
case 17:
|
|
294
|
+
this.defer = undefined;
|
|
295
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
|
|
296
|
+
return _context2.abrupt("return", {
|
|
297
|
+
turnServerInfo: this.turnInfo,
|
|
298
|
+
turnDiscoverySkippedReason: undefined
|
|
299
|
+
});
|
|
300
|
+
case 22:
|
|
301
|
+
_context2.prev = 22;
|
|
302
|
+
_context2.t0 = _context2["catch"](5);
|
|
303
|
+
this.abort();
|
|
304
|
+
return _context2.abrupt("return", this.handleTurnDiscoveryFailure(meeting, _context2.t0));
|
|
305
|
+
case 26:
|
|
306
|
+
case "end":
|
|
307
|
+
return _context2.stop();
|
|
308
|
+
}
|
|
309
|
+
}, _callee2, this, [[5, 22]]);
|
|
310
|
+
}));
|
|
311
|
+
function handleTurnDiscoveryHttpResponse(_x3, _x4) {
|
|
312
|
+
return _handleTurnDiscoveryHttpResponse.apply(this, arguments);
|
|
313
|
+
}
|
|
314
|
+
return handleTurnDiscoveryHttpResponse;
|
|
315
|
+
}()
|
|
316
|
+
/**
|
|
317
|
+
* Aborts current TURN discovery. This method needs to be called if you called generateTurnDiscoveryRequestMessage(),
|
|
318
|
+
* but then never got any response from the server.
|
|
319
|
+
* @returns {void}
|
|
320
|
+
*/
|
|
321
|
+
)
|
|
322
|
+
}, {
|
|
323
|
+
key: "abort",
|
|
324
|
+
value: function abort() {
|
|
325
|
+
if (this.defer) {
|
|
326
|
+
this.defer.reject(new Error('TURN discovery aborted'));
|
|
327
|
+
this.defer = undefined;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Parses the TURN_DISCOVERY_RESPONSE roap message out of the http response
|
|
333
|
+
* and returns it.
|
|
334
|
+
*
|
|
335
|
+
* @param {Meeting} meeting
|
|
336
|
+
* @param {any} httpResponse
|
|
337
|
+
* @returns {any}
|
|
338
|
+
*/
|
|
339
|
+
}, {
|
|
340
|
+
key: "parseHttpTurnDiscoveryResponse",
|
|
341
|
+
value: function parseHttpTurnDiscoveryResponse(meeting, httpResponse) {
|
|
342
|
+
var _httpResponse$mediaCo, _httpResponse$mediaCo2;
|
|
343
|
+
var turnDiscoveryResponse;
|
|
344
|
+
if ((_httpResponse$mediaCo = httpResponse.mediaConnections) !== null && _httpResponse$mediaCo !== void 0 && (_httpResponse$mediaCo2 = _httpResponse$mediaCo[0]) !== null && _httpResponse$mediaCo2 !== void 0 && _httpResponse$mediaCo2.remoteSdp) {
|
|
345
|
+
var remoteSdp = JSON.parse(httpResponse.mediaConnections[0].remoteSdp);
|
|
346
|
+
if (remoteSdp.roapMessage) {
|
|
347
|
+
// yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...
|
|
348
|
+
var _remoteSdp$roapMessag = remoteSdp.roapMessage,
|
|
349
|
+
seq = _remoteSdp$roapMessag.seq,
|
|
350
|
+
messageType = _remoteSdp$roapMessag.messageType,
|
|
351
|
+
errorType = _remoteSdp$roapMessag.errorType,
|
|
352
|
+
errorCause = _remoteSdp$roapMessag.errorCause,
|
|
353
|
+
headers = _remoteSdp$roapMessag.headers;
|
|
354
|
+
turnDiscoveryResponse = {
|
|
355
|
+
seq: seq,
|
|
356
|
+
messageType: messageType,
|
|
357
|
+
errorType: errorType,
|
|
358
|
+
errorCause: errorCause,
|
|
359
|
+
headers: headers
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (!turnDiscoveryResponse) {
|
|
364
|
+
_metrics.default.sendBehavioralMetric(_constants.default.ROAP_HTTP_RESPONSE_MISSING, {
|
|
365
|
+
correlationId: meeting.correlationId,
|
|
366
|
+
messageType: 'TURN_DISCOVERY_RESPONSE',
|
|
367
|
+
isMultistream: meeting.isMultistream
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
return turnDiscoveryResponse;
|
|
371
|
+
}
|
|
372
|
+
|
|
161
373
|
/**
|
|
162
374
|
* sends the TURN_DISCOVERY_REQUEST roap request
|
|
163
375
|
*
|
|
@@ -167,13 +379,16 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
167
379
|
* @private
|
|
168
380
|
* @memberof Roap
|
|
169
381
|
*/
|
|
170
|
-
)
|
|
171
382
|
}, {
|
|
172
383
|
key: "sendRoapTurnDiscoveryRequest",
|
|
173
384
|
value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
|
|
385
|
+
var _this2 = this;
|
|
174
386
|
if (this.defer) {
|
|
175
387
|
_loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
|
|
176
|
-
return _promise.default.resolve(
|
|
388
|
+
return _promise.default.resolve({
|
|
389
|
+
turnServerInfo: undefined,
|
|
390
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
|
|
391
|
+
});
|
|
177
392
|
}
|
|
178
393
|
this.defer = new _common.Defer();
|
|
179
394
|
var roapMessage = {
|
|
@@ -193,41 +408,27 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
193
408
|
locusMediaRequest: meeting.locusMediaRequest,
|
|
194
409
|
// @ts-ignore - because of meeting.webex
|
|
195
410
|
ipVersion: _util.default.getIpVersion(meeting.webex)
|
|
196
|
-
}).then(function (
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
errorCause = _remoteSdp$roapMessag.errorCause,
|
|
211
|
-
headers = _remoteSdp$roapMessag.headers;
|
|
212
|
-
turnDiscoveryResponse = {
|
|
213
|
-
seq: seq,
|
|
214
|
-
messageType: messageType,
|
|
215
|
-
errorType: errorType,
|
|
216
|
-
errorCause: errorCause,
|
|
217
|
-
headers: headers
|
|
218
|
-
};
|
|
411
|
+
}).then( /*#__PURE__*/function () {
|
|
412
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(response) {
|
|
413
|
+
var mediaConnections;
|
|
414
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
415
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
416
|
+
case 0:
|
|
417
|
+
mediaConnections = response.mediaConnections;
|
|
418
|
+
if (mediaConnections) {
|
|
419
|
+
meeting.updateMediaConnections(mediaConnections);
|
|
420
|
+
}
|
|
421
|
+
return _context3.abrupt("return", _this2.handleTurnDiscoveryHttpResponse(meeting, response));
|
|
422
|
+
case 3:
|
|
423
|
+
case "end":
|
|
424
|
+
return _context3.stop();
|
|
219
425
|
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
isMultistream: meeting.isMultistream
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
return turnDiscoveryResponse;
|
|
230
|
-
});
|
|
426
|
+
}, _callee3);
|
|
427
|
+
}));
|
|
428
|
+
return function (_x5) {
|
|
429
|
+
return _ref.apply(this, arguments);
|
|
430
|
+
};
|
|
431
|
+
}());
|
|
231
432
|
}
|
|
232
433
|
|
|
233
434
|
/**
|
|
@@ -240,7 +441,11 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
240
441
|
}, {
|
|
241
442
|
key: "sendRoapOK",
|
|
242
443
|
value: function sendRoapOK(meeting) {
|
|
243
|
-
_loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> sending
|
|
444
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> TURN discovery response requires OK, sending it...');
|
|
445
|
+
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_REQUIRES_OK, {
|
|
446
|
+
correlation_id: meeting.correlationId,
|
|
447
|
+
locus_id: meeting.locusUrl.split('/').pop()
|
|
448
|
+
});
|
|
244
449
|
return this.roapRequest.sendRoap({
|
|
245
450
|
roapMessage: {
|
|
246
451
|
messageType: _constants2.ROAP.ROAP_TYPES.OK,
|
|
@@ -265,30 +470,30 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
265
470
|
}, {
|
|
266
471
|
key: "getSkipReason",
|
|
267
472
|
value: (function () {
|
|
268
|
-
var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
473
|
+
var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(meeting) {
|
|
269
474
|
var isAnyPublicClusterReachable;
|
|
270
|
-
return _regenerator.default.wrap(function
|
|
271
|
-
while (1) switch (
|
|
475
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
476
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
272
477
|
case 0:
|
|
273
|
-
|
|
478
|
+
_context4.next = 2;
|
|
274
479
|
return meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
|
|
275
480
|
case 2:
|
|
276
|
-
isAnyPublicClusterReachable =
|
|
481
|
+
isAnyPublicClusterReachable = _context4.sent;
|
|
277
482
|
if (!isAnyPublicClusterReachable) {
|
|
278
|
-
|
|
483
|
+
_context4.next = 6;
|
|
279
484
|
break;
|
|
280
485
|
}
|
|
281
486
|
_loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery');
|
|
282
|
-
return
|
|
487
|
+
return _context4.abrupt("return", TurnDiscoverySkipReason.reachability);
|
|
283
488
|
case 6:
|
|
284
|
-
return
|
|
489
|
+
return _context4.abrupt("return", undefined);
|
|
285
490
|
case 7:
|
|
286
491
|
case "end":
|
|
287
|
-
return
|
|
492
|
+
return _context4.stop();
|
|
288
493
|
}
|
|
289
|
-
},
|
|
494
|
+
}, _callee4);
|
|
290
495
|
}));
|
|
291
|
-
function getSkipReason(
|
|
496
|
+
function getSkipReason(_x6) {
|
|
292
497
|
return _getSkipReason.apply(this, arguments);
|
|
293
498
|
}
|
|
294
499
|
return getSkipReason;
|
|
@@ -303,23 +508,23 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
303
508
|
}, {
|
|
304
509
|
key: "isSkipped",
|
|
305
510
|
value: (function () {
|
|
306
|
-
var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
511
|
+
var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(meeting) {
|
|
307
512
|
var skipReason;
|
|
308
|
-
return _regenerator.default.wrap(function
|
|
309
|
-
while (1) switch (
|
|
513
|
+
return _regenerator.default.wrap(function _callee5$(_context5) {
|
|
514
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
310
515
|
case 0:
|
|
311
|
-
|
|
516
|
+
_context5.next = 2;
|
|
312
517
|
return this.getSkipReason(meeting);
|
|
313
518
|
case 2:
|
|
314
|
-
skipReason =
|
|
315
|
-
return
|
|
519
|
+
skipReason = _context5.sent;
|
|
520
|
+
return _context5.abrupt("return", !!skipReason);
|
|
316
521
|
case 4:
|
|
317
522
|
case "end":
|
|
318
|
-
return
|
|
523
|
+
return _context5.stop();
|
|
319
524
|
}
|
|
320
|
-
},
|
|
525
|
+
}, _callee5, this);
|
|
321
526
|
}));
|
|
322
|
-
function isSkipped(
|
|
527
|
+
function isSkipped(_x7) {
|
|
323
528
|
return _isSkipped.apply(this, arguments);
|
|
324
529
|
}
|
|
325
530
|
return isSkipped;
|
|
@@ -346,93 +551,69 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
|
346
551
|
}, {
|
|
347
552
|
key: "doTurnDiscovery",
|
|
348
553
|
value: (function () {
|
|
349
|
-
var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
350
|
-
var turnDiscoverySkippedReason,
|
|
351
|
-
return _regenerator.default.wrap(function
|
|
352
|
-
while (1) switch (
|
|
554
|
+
var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(meeting, isReconnecting, isForced) {
|
|
555
|
+
var turnDiscoverySkippedReason, turnDiscoveryResult, _yield$this$waitForTu, isOkRequired;
|
|
556
|
+
return _regenerator.default.wrap(function _callee6$(_context6) {
|
|
557
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
353
558
|
case 0:
|
|
354
559
|
if (isForced) {
|
|
355
|
-
|
|
560
|
+
_context6.next = 4;
|
|
356
561
|
break;
|
|
357
562
|
}
|
|
358
|
-
|
|
563
|
+
_context6.next = 3;
|
|
359
564
|
return this.getSkipReason(meeting);
|
|
360
565
|
case 3:
|
|
361
|
-
turnDiscoverySkippedReason =
|
|
566
|
+
turnDiscoverySkippedReason = _context6.sent;
|
|
362
567
|
case 4:
|
|
363
568
|
if (!turnDiscoverySkippedReason) {
|
|
364
|
-
|
|
569
|
+
_context6.next = 6;
|
|
365
570
|
break;
|
|
366
571
|
}
|
|
367
|
-
return
|
|
572
|
+
return _context6.abrupt("return", {
|
|
368
573
|
turnServerInfo: undefined,
|
|
369
574
|
turnDiscoverySkippedReason: turnDiscoverySkippedReason
|
|
370
575
|
});
|
|
371
576
|
case 6:
|
|
372
|
-
|
|
373
|
-
|
|
577
|
+
_context6.prev = 6;
|
|
578
|
+
_context6.next = 9;
|
|
374
579
|
return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);
|
|
375
580
|
case 9:
|
|
376
|
-
|
|
377
|
-
if (!
|
|
378
|
-
|
|
581
|
+
turnDiscoveryResult = _context6.sent;
|
|
582
|
+
if (!(turnDiscoveryResult.turnDiscoverySkippedReason !== TurnDiscoverySkipReason.missingHttpResponse)) {
|
|
583
|
+
_context6.next = 12;
|
|
379
584
|
break;
|
|
380
585
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
_context4.t0 = _context4.sent;
|
|
385
|
-
_context4.next = 19;
|
|
386
|
-
break;
|
|
387
|
-
case 16:
|
|
388
|
-
_context4.next = 18;
|
|
586
|
+
return _context6.abrupt("return", turnDiscoveryResult);
|
|
587
|
+
case 12:
|
|
588
|
+
_context6.next = 14;
|
|
389
589
|
return this.waitForTurnDiscoveryResponse();
|
|
390
|
-
case
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
_ref = _context4.t0;
|
|
394
|
-
isOkRequired = _ref.isOkRequired;
|
|
590
|
+
case 14:
|
|
591
|
+
_yield$this$waitForTu = _context6.sent;
|
|
592
|
+
isOkRequired = _yield$this$waitForTu.isOkRequired;
|
|
395
593
|
if (!isOkRequired) {
|
|
396
|
-
|
|
594
|
+
_context6.next = 19;
|
|
397
595
|
break;
|
|
398
596
|
}
|
|
399
|
-
|
|
597
|
+
_context6.next = 19;
|
|
400
598
|
return this.sendRoapOK(meeting);
|
|
401
|
-
case
|
|
402
|
-
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery response requires OK');
|
|
403
|
-
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_REQUIRES_OK, {
|
|
404
|
-
correlation_id: meeting.correlationId,
|
|
405
|
-
locus_id: meeting.locusUrl.split('/').pop()
|
|
406
|
-
});
|
|
407
|
-
case 26:
|
|
599
|
+
case 19:
|
|
408
600
|
this.defer = undefined;
|
|
409
601
|
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
|
|
410
|
-
return
|
|
602
|
+
return _context6.abrupt("return", {
|
|
411
603
|
turnServerInfo: this.turnInfo,
|
|
412
604
|
turnDiscoverySkippedReason: undefined
|
|
413
605
|
});
|
|
414
|
-
case
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
|
|
420
|
-
correlation_id: meeting.correlationId,
|
|
421
|
-
locus_id: meeting.locusUrl.split('/').pop(),
|
|
422
|
-
reason: _context4.t1.message,
|
|
423
|
-
stack: _context4.t1.stack
|
|
424
|
-
});
|
|
425
|
-
return _context4.abrupt("return", {
|
|
426
|
-
turnServerInfo: undefined,
|
|
427
|
-
turnDiscoverySkippedReason: undefined
|
|
428
|
-
});
|
|
429
|
-
case 36:
|
|
606
|
+
case 24:
|
|
607
|
+
_context6.prev = 24;
|
|
608
|
+
_context6.t0 = _context6["catch"](6);
|
|
609
|
+
return _context6.abrupt("return", this.handleTurnDiscoveryFailure(meeting, _context6.t0));
|
|
610
|
+
case 27:
|
|
430
611
|
case "end":
|
|
431
|
-
return
|
|
612
|
+
return _context6.stop();
|
|
432
613
|
}
|
|
433
|
-
},
|
|
614
|
+
}, _callee6, this, [[6, 24]]);
|
|
434
615
|
}));
|
|
435
|
-
function doTurnDiscovery(
|
|
616
|
+
function doTurnDiscovery(_x8, _x9, _x10) {
|
|
436
617
|
return _doTurnDiscovery.apply(this, arguments);
|
|
437
618
|
}
|
|
438
619
|
return doTurnDiscovery;
|