@webex/calling 3.10.0 → 3.11.0-next.10
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/CallHistory/CallHistory.js +128 -133
- package/dist/CallHistory/CallHistory.js.map +1 -1
- package/dist/CallHistory/CallHistory.test.js +289 -186
- package/dist/CallHistory/CallHistory.test.js.map +1 -1
- package/dist/CallSettings/CallSettings.js +17 -18
- package/dist/CallSettings/CallSettings.js.map +1 -1
- package/dist/CallSettings/CallSettings.test.js +14 -14
- package/dist/CallSettings/CallSettings.test.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.js +72 -25
- package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.test.js +138 -48
- package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.js +138 -145
- package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.test.js +149 -150
- package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
- package/dist/CallingClient/CallingClient.js +407 -359
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +378 -401
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.js +7 -8
- package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.test.js +24 -24
- package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +666 -624
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +908 -556
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +22 -18
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +114 -114
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/constants.js +7 -1
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/line/index.js +57 -74
- package/dist/CallingClient/line/index.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +22 -22
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +675 -527
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +657 -309
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/types.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.js +24 -24
- package/dist/CallingClient/registration/webWorker.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.test.js +20 -20
- package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
- package/dist/CallingClient/types.js.map +1 -1
- package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +28 -28
- package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -1
- package/dist/Contacts/ContactsClient.js +259 -268
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/ContactsClient.test.js +64 -63
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/Errors/catalog/CallError.js +7 -10
- package/dist/Errors/catalog/CallError.js.map +1 -1
- package/dist/Errors/catalog/CallingDeviceError.js +6 -9
- package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
- package/dist/Errors/catalog/ExtendedError.js +6 -8
- package/dist/Errors/catalog/ExtendedError.js.map +1 -1
- package/dist/Errors/catalog/LineError.js +6 -9
- package/dist/Errors/catalog/LineError.js.map +1 -1
- package/dist/Events/impl/index.js +12 -14
- package/dist/Events/impl/index.js.map +1 -1
- package/dist/Logger/index.js +3 -3
- package/dist/Logger/index.js.map +1 -1
- package/dist/Logger/index.test.js +1 -1
- package/dist/Logger/index.test.js.map +1 -1
- package/dist/Metrics/index.js +1 -2
- package/dist/Metrics/index.js.map +1 -1
- package/dist/SDKConnector/index.js +1 -2
- package/dist/SDKConnector/index.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.js +131 -139
- package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.test.js +106 -98
- package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.js +88 -92
- package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.test.js +72 -72
- package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/Voicemail.js +103 -131
- package/dist/Voicemail/Voicemail.js.map +1 -1
- package/dist/Voicemail/Voicemail.test.js +20 -20
- package/dist/Voicemail/Voicemail.test.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.js +117 -131
- package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.test.js +180 -154
- package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
- package/dist/common/Utils.js +198 -166
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +436 -191
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/constants.js +3 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/testUtil.js +5 -4
- package/dist/common/testUtil.js.map +1 -1
- package/dist/common/types.js.map +1 -1
- package/dist/module/CallHistory/CallHistory.js +20 -11
- package/dist/module/CallSettings/UcmBackendConnector.js +21 -8
- package/dist/module/CallSettings/WxCallBackendConnector.js +10 -15
- package/dist/module/CallingClient/CallingClient.js +125 -123
- package/dist/module/CallingClient/calling/call.js +76 -60
- package/dist/module/CallingClient/calling/callManager.js +7 -0
- package/dist/module/CallingClient/constants.js +5 -0
- package/dist/module/CallingClient/registration/register.js +93 -5
- package/dist/module/CallingClient/registration/webWorker.js +2 -2
- package/dist/module/CallingClient/registration/webWorkerStr.js +2 -2
- package/dist/module/Contacts/ContactsClient.js +19 -25
- package/dist/module/Events/impl/index.js +1 -1
- package/dist/module/Logger/index.js +2 -2
- package/dist/module/Voicemail/BroadworksBackendConnector.js +10 -18
- package/dist/module/Voicemail/UcmBackendConnector.js +7 -11
- package/dist/module/Voicemail/Voicemail.js +42 -68
- package/dist/module/Voicemail/WxCallBackendConnector.js +14 -28
- package/dist/module/common/Utils.js +31 -5
- package/dist/module/common/constants.js +2 -0
- package/dist/module/common/testUtil.js +1 -0
- package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
- package/dist/types/CallSettings/UcmBackendConnector.d.ts +1 -0
- package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
- package/dist/types/CallingClient/CallingClient.d.ts +2 -1
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts +4 -0
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +5 -0
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +6 -1
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +8 -1
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
- package/dist/types/CallingClient/types.d.ts +2 -1
- package/dist/types/CallingClient/types.d.ts.map +1 -1
- package/dist/types/Contacts/ContactsClient.d.ts +1 -0
- package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
- package/dist/types/Logger/index.d.ts +1 -2
- package/dist/types/Logger/index.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +16 -0
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
- package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +1 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/constants.d.ts +2 -0
- package/dist/types/common/constants.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +1 -0
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +4 -0
- package/dist/types/common/types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -19,7 +19,9 @@ export class WxCallBackendConnector {
|
|
|
19
19
|
SDKConnector.setWebex(webex);
|
|
20
20
|
}
|
|
21
21
|
this.webex = this.sdkConnector.getWebex();
|
|
22
|
-
this.hydraEndpoint =
|
|
22
|
+
this.hydraEndpoint =
|
|
23
|
+
this.webex.internal.services._serviceUrls?.hydra ||
|
|
24
|
+
this.webex.internal.services.get(this.webex.internal.services._activeServices.hydra);
|
|
23
25
|
log.setLogger(logger.level, WEBEX_CALLING_CONNECTOR_FILE);
|
|
24
26
|
this.userId = this.webex.internal.device.userId;
|
|
25
27
|
this.personId = inferIdFromUuid(this.webex.internal.device.userId, DecodeType.PEOPLE);
|
|
@@ -66,8 +68,7 @@ export class WxCallBackendConnector {
|
|
|
66
68
|
return responseDetails;
|
|
67
69
|
}
|
|
68
70
|
catch (err) {
|
|
69
|
-
|
|
70
|
-
log.error(extendedError, loggerContext);
|
|
71
|
+
log.error(`Failed to get call waiting setting: ${JSON.stringify(err)}`, loggerContext);
|
|
71
72
|
await uploadLogs();
|
|
72
73
|
const errorInfo = {
|
|
73
74
|
statusCode: err instanceof Error ? Number(err.message) : '',
|
|
@@ -100,8 +101,7 @@ export class WxCallBackendConnector {
|
|
|
100
101
|
return responseDetails;
|
|
101
102
|
}
|
|
102
103
|
catch (err) {
|
|
103
|
-
|
|
104
|
-
log.error(extendedError, loggerContext);
|
|
104
|
+
log.error(`Failed to get DoNotDisturb setting: ${JSON.stringify(err)}`, loggerContext);
|
|
105
105
|
await uploadLogs();
|
|
106
106
|
const errorInfo = err;
|
|
107
107
|
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
@@ -136,8 +136,7 @@ export class WxCallBackendConnector {
|
|
|
136
136
|
return responseDetails;
|
|
137
137
|
}
|
|
138
138
|
catch (err) {
|
|
139
|
-
|
|
140
|
-
log.error(extendedError, loggerContext);
|
|
139
|
+
log.error(`Failed to set DoNotDisturb setting: ${JSON.stringify(err)}`, loggerContext);
|
|
141
140
|
await uploadLogs();
|
|
142
141
|
const errorInfo = err;
|
|
143
142
|
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
@@ -168,8 +167,7 @@ export class WxCallBackendConnector {
|
|
|
168
167
|
return responseDetails;
|
|
169
168
|
}
|
|
170
169
|
catch (err) {
|
|
171
|
-
|
|
172
|
-
log.error(extendedError, loggerContext);
|
|
170
|
+
log.error(`Failed to get Call Forward setting: ${JSON.stringify(err)}`, loggerContext);
|
|
173
171
|
await uploadLogs();
|
|
174
172
|
const errorInfo = err;
|
|
175
173
|
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
@@ -200,8 +198,7 @@ export class WxCallBackendConnector {
|
|
|
200
198
|
return responseDetails;
|
|
201
199
|
}
|
|
202
200
|
catch (err) {
|
|
203
|
-
|
|
204
|
-
log.error(extendedError, loggerContext);
|
|
201
|
+
log.error(`Failed to set Call Forward setting: ${JSON.stringify(err)}`, loggerContext);
|
|
205
202
|
await uploadLogs();
|
|
206
203
|
const errorInfo = err;
|
|
207
204
|
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
@@ -232,8 +229,7 @@ export class WxCallBackendConnector {
|
|
|
232
229
|
return responseDetails;
|
|
233
230
|
}
|
|
234
231
|
catch (err) {
|
|
235
|
-
|
|
236
|
-
log.error(extendedError, loggerContext);
|
|
232
|
+
log.error(`Failed to get Voicemail setting: ${JSON.stringify(err)}`, loggerContext);
|
|
237
233
|
await uploadLogs();
|
|
238
234
|
const errorInfo = err;
|
|
239
235
|
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
@@ -264,8 +260,7 @@ export class WxCallBackendConnector {
|
|
|
264
260
|
return responseDetails;
|
|
265
261
|
}
|
|
266
262
|
catch (err) {
|
|
267
|
-
|
|
268
|
-
log.error(extendedError, loggerContext);
|
|
263
|
+
log.error(`Failed to set Voicemail setting: ${JSON.stringify(err)}`, loggerContext);
|
|
269
264
|
await uploadLogs();
|
|
270
265
|
const errorInfo = err;
|
|
271
266
|
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
@@ -9,7 +9,7 @@ import { MOBIUS_EVENT_KEYS, SessionType, CALLING_CLIENT_EVENT_KEYS, } from '../E
|
|
|
9
9
|
import { ServiceIndicator, ALLOWED_SERVICES, HTTP_METHODS, RegistrationStatus, } from '../common/types';
|
|
10
10
|
import log from '../Logger';
|
|
11
11
|
import { getCallManager } from './calling/callManager';
|
|
12
|
-
import { CALLING_CLIENT_FILE, CALLS_CLEARED_HANDLER_UTIL, CALLING_USER_AGENT, CISCO_DEVICE_URL, DISCOVERY_URL, GET_MOBIUS_SERVERS_UTIL,
|
|
12
|
+
import { CALLING_CLIENT_FILE, CALLS_CLEARED_HANDLER_UTIL, CALLING_USER_AGENT, CISCO_DEVICE_URL, DISCOVERY_URL, GET_MOBIUS_SERVERS_UTIL, SPARK_USER_AGENT, URL_ENDPOINT, API_V1, METHODS, NETWORK_FLAP_TIMEOUT, DEVICES_ENDPOINT_RESOURCE, } from './constants';
|
|
13
13
|
import Line from './line';
|
|
14
14
|
import { METRIC_EVENT, REG_ACTION, METRIC_TYPE, CONNECTION_ACTION, MOBIUS_SERVER_ACTION, } from '../Metrics/types';
|
|
15
15
|
import { getMetricManager } from '../Metrics';
|
|
@@ -65,28 +65,7 @@ export class CallingClient extends Eventing {
|
|
|
65
65
|
this.mediaEngine.setLogger(adaptedLogger);
|
|
66
66
|
this.primaryMobiusUris = [];
|
|
67
67
|
this.backupMobiusUris = [];
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
mobiusServiceHost = new URL(this.webex.internal.services._serviceUrls.mobius).host;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
log.warn(`Failed to parse mobius service URL`, {
|
|
74
|
-
file: CALLING_CLIENT_FILE,
|
|
75
|
-
method: this.constructor.name,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
if (this.webex.internal.services._hostCatalog) {
|
|
79
|
-
this.mobiusClusters =
|
|
80
|
-
(mobiusServiceHost && this.webex.internal.services._hostCatalog[mobiusServiceHost]) ||
|
|
81
|
-
this.webex.internal.services._hostCatalog[MOBIUS_US_PROD] ||
|
|
82
|
-
this.webex.internal.services._hostCatalog[MOBIUS_EU_PROD] ||
|
|
83
|
-
this.webex.internal.services._hostCatalog[MOBIUS_US_INT] ||
|
|
84
|
-
this.webex.internal.services._hostCatalog[MOBIUS_EU_INT];
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
const mobiusObject = this.webex.internal.services._services.find((item) => item.serviceName === 'mobius');
|
|
88
|
-
this.mobiusClusters = [mobiusObject.serviceUrls[0].baseUrl];
|
|
89
|
-
}
|
|
68
|
+
this.mobiusClusters = this.webex.internal.services.getMobiusClusters();
|
|
90
69
|
this.mobiusHost = '';
|
|
91
70
|
this.registerSessionsListener();
|
|
92
71
|
this.registerCallsClearedListener();
|
|
@@ -237,68 +216,38 @@ export class CallingClient extends Eventing {
|
|
|
237
216
|
method: METHODS.GET_CLIENT_REGION_INFO,
|
|
238
217
|
});
|
|
239
218
|
const regionInfo = {};
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
method: METHODS.GET_CLIENT_REGION_INFO,
|
|
273
|
-
});
|
|
274
|
-
const clientRegionInfo = response.body;
|
|
275
|
-
regionInfo.clientRegion = clientRegionInfo?.clientRegion
|
|
276
|
-
? clientRegionInfo.clientRegion
|
|
277
|
-
: '';
|
|
278
|
-
regionInfo.countryCode = clientRegionInfo?.countryCode ? clientRegionInfo.countryCode : '';
|
|
279
|
-
log.log(`Successfully fetched Client region info: ${regionInfo.clientRegion}, countryCode: ${regionInfo.countryCode}, and response trackingid: ${response?.headers?.trackingid}`, {
|
|
280
|
-
file: CALLING_CLIENT_FILE,
|
|
281
|
-
method: METHODS.GET_CLIENT_REGION_INFO,
|
|
282
|
-
});
|
|
283
|
-
this.metricManager.submitRegionInfoMetric(METRIC_EVENT.MOBIUS_DISCOVERY, MOBIUS_SERVER_ACTION.REGION_INFO, METRIC_TYPE.BEHAVIORAL, this.mobiusHost, clientRegionInfo.clientRegion, clientRegionInfo.countryCode, response?.headers?.trackingid ?? '');
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
catch (err) {
|
|
287
|
-
const extendedError = new Error(`Failed to get client region info: ${err}`);
|
|
288
|
-
log.error(extendedError, {
|
|
289
|
-
method: METHODS.GET_CLIENT_REGION_INFO,
|
|
290
|
-
file: CALLING_CLIENT_FILE,
|
|
291
|
-
});
|
|
292
|
-
abort = await handleCallingClientErrors(err, (clientError) => {
|
|
293
|
-
this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, GET_MOBIUS_SERVERS_UTIL, 'UNKNOWN', err.headers?.trackingId ?? '', undefined, clientError);
|
|
294
|
-
this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
|
|
295
|
-
}, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
|
|
296
|
-
regionInfo.clientRegion = '';
|
|
297
|
-
regionInfo.countryCode = '';
|
|
298
|
-
if (abort) {
|
|
299
|
-
await uploadLogs();
|
|
300
|
-
return regionInfo;
|
|
301
|
-
}
|
|
219
|
+
try {
|
|
220
|
+
const response = await this.webex.request({
|
|
221
|
+
uri: `${DISCOVERY_URL}`,
|
|
222
|
+
method: HTTP_METHODS.GET,
|
|
223
|
+
addAuthHeader: false,
|
|
224
|
+
headers: {
|
|
225
|
+
[SPARK_USER_AGENT]: null,
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
const clientRegionInfo = response.body;
|
|
229
|
+
regionInfo.clientRegion = clientRegionInfo?.clientRegion || '';
|
|
230
|
+
regionInfo.countryCode = clientRegionInfo?.countryCode || '';
|
|
231
|
+
log.log(`Successfully fetched Client region info: ${regionInfo.clientRegion}, countryCode: ${regionInfo.countryCode}, and response trackingid: ${response?.headers?.trackingid}`, {
|
|
232
|
+
file: CALLING_CLIENT_FILE,
|
|
233
|
+
method: METHODS.GET_CLIENT_REGION_INFO,
|
|
234
|
+
});
|
|
235
|
+
this.metricManager.submitRegionInfoMetric(METRIC_EVENT.MOBIUS_DISCOVERY, MOBIUS_SERVER_ACTION.REGION_INFO, METRIC_TYPE.BEHAVIORAL, this.mobiusHost, clientRegionInfo.clientRegion, clientRegionInfo.countryCode, response?.headers?.trackingid ?? '');
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
log.error(`Failed to get client region info: ${JSON.stringify(err)}`, {
|
|
239
|
+
method: METHODS.GET_CLIENT_REGION_INFO,
|
|
240
|
+
file: CALLING_CLIENT_FILE,
|
|
241
|
+
});
|
|
242
|
+
abort = await handleCallingClientErrors(err, (clientError) => {
|
|
243
|
+
this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, GET_MOBIUS_SERVERS_UTIL, 'UNKNOWN', err.headers?.trackingId ?? '', undefined, clientError);
|
|
244
|
+
this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
|
|
245
|
+
}, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
|
|
246
|
+
regionInfo.clientRegion = '';
|
|
247
|
+
regionInfo.countryCode = '';
|
|
248
|
+
if (abort) {
|
|
249
|
+
await uploadLogs();
|
|
250
|
+
return regionInfo;
|
|
302
251
|
}
|
|
303
252
|
}
|
|
304
253
|
return regionInfo;
|
|
@@ -318,7 +267,9 @@ export class CallingClient extends Eventing {
|
|
|
318
267
|
});
|
|
319
268
|
clientRegion = this.sdkConfig?.discovery?.region;
|
|
320
269
|
countryCode = this.sdkConfig?.discovery?.country;
|
|
321
|
-
this.mobiusHost =
|
|
270
|
+
this.mobiusHost =
|
|
271
|
+
this.webex.internal.services._serviceUrls?.mobius ||
|
|
272
|
+
this.webex.internal.services.get(this.webex.internal.services._activeServices.mobius);
|
|
322
273
|
}
|
|
323
274
|
else {
|
|
324
275
|
log.log('Updating region and country through Region discovery', {
|
|
@@ -334,44 +285,53 @@ export class CallingClient extends Eventing {
|
|
|
334
285
|
file: CALLING_CLIENT_FILE,
|
|
335
286
|
method: GET_MOBIUS_SERVERS_UTIL,
|
|
336
287
|
});
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
288
|
+
for (const mobius of this.mobiusClusters) {
|
|
289
|
+
if (mobius.host) {
|
|
290
|
+
this.mobiusHost = `https://${mobius.host}${API_V1}`;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
this.mobiusHost = mobius;
|
|
294
|
+
}
|
|
295
|
+
try {
|
|
296
|
+
const response = await this.webex.request({
|
|
297
|
+
uri: `${this.mobiusHost}${URL_ENDPOINT}?regionCode=${clientRegion}&countryCode=${countryCode}`,
|
|
298
|
+
method: HTTP_METHODS.GET,
|
|
299
|
+
headers: {
|
|
300
|
+
[CISCO_DEVICE_URL]: this.webex.internal.device.url,
|
|
301
|
+
[SPARK_USER_AGENT]: CALLING_USER_AGENT,
|
|
302
|
+
},
|
|
303
|
+
service: ALLOWED_SERVICES.MOBIUS,
|
|
304
|
+
});
|
|
305
|
+
log.log(`Mobius Server found for the region. Response trackingId: ${response?.headers?.trackingid}`, {
|
|
306
|
+
file: CALLING_CLIENT_FILE,
|
|
307
|
+
method: GET_MOBIUS_SERVERS_UTIL,
|
|
308
|
+
});
|
|
309
|
+
const mobiusServers = response.body;
|
|
310
|
+
this.metricManager.submitMobiusServersMetric(METRIC_EVENT.MOBIUS_DISCOVERY, MOBIUS_SERVER_ACTION.MOBIUS_SERVERS, METRIC_TYPE.BEHAVIORAL, mobiusServers, response?.headers?.trackingid ?? '');
|
|
311
|
+
const mobiusUris = filterMobiusUris(mobiusServers, this.mobiusHost);
|
|
312
|
+
this.primaryMobiusUris = mobiusUris.primary;
|
|
313
|
+
this.backupMobiusUris = mobiusUris.backup;
|
|
314
|
+
log.log(`Final list of Mobius Servers, primary: ${mobiusUris.primary} and backup: ${mobiusUris.backup}`, {
|
|
315
|
+
file: CALLING_CLIENT_FILE,
|
|
316
|
+
method: GET_MOBIUS_SERVERS_UTIL,
|
|
317
|
+
});
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
log.error(`Failed to get Mobius servers: ${JSON.stringify(err)}`, {
|
|
322
|
+
method: METHODS.GET_MOBIUS_SERVERS,
|
|
323
|
+
file: CALLING_CLIENT_FILE,
|
|
324
|
+
});
|
|
325
|
+
const abort = await handleCallingClientErrors(err, (clientError) => {
|
|
326
|
+
this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, GET_MOBIUS_SERVERS_UTIL, 'UNKNOWN', err.headers?.trackingId ?? '', undefined, clientError);
|
|
327
|
+
this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
|
|
328
|
+
}, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
|
|
329
|
+
if (abort) {
|
|
330
|
+
useDefault = true;
|
|
331
|
+
await uploadLogs();
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
373
334
|
}
|
|
374
|
-
useDefault = true;
|
|
375
335
|
}
|
|
376
336
|
}
|
|
377
337
|
else {
|
|
@@ -450,6 +410,48 @@ export class CallingClient extends Eventing {
|
|
|
450
410
|
getLines() {
|
|
451
411
|
return this.lineDict;
|
|
452
412
|
}
|
|
413
|
+
async getDevices(userId) {
|
|
414
|
+
const userid = userId || this.webex.internal.device.userId;
|
|
415
|
+
if (!userid) {
|
|
416
|
+
throw new Error('userId is required to fetch devices');
|
|
417
|
+
}
|
|
418
|
+
log.info(METHOD_START_MESSAGE, { file: CALLING_CLIENT_FILE, method: METHODS.GET_DEVICES });
|
|
419
|
+
const mobiusUrls = [...this.primaryMobiusUris, ...this.backupMobiusUris];
|
|
420
|
+
if (mobiusUrls.length === 0) {
|
|
421
|
+
throw new Error('Mobius URLs are not available');
|
|
422
|
+
}
|
|
423
|
+
let finalError;
|
|
424
|
+
for (const mobiusUrl of mobiusUrls) {
|
|
425
|
+
const normalizedMobiusUrl = mobiusUrl.replace(/\/+$/, '/');
|
|
426
|
+
const uri = `${normalizedMobiusUrl}${DEVICES_ENDPOINT_RESOURCE}?userid=${encodeURIComponent(userid)}`;
|
|
427
|
+
try {
|
|
428
|
+
const response = await this.webex.request({
|
|
429
|
+
uri,
|
|
430
|
+
method: HTTP_METHODS.GET,
|
|
431
|
+
service: ALLOWED_SERVICES.MOBIUS,
|
|
432
|
+
headers: {
|
|
433
|
+
[CISCO_DEVICE_URL]: this.webex.internal.device.url,
|
|
434
|
+
[SPARK_USER_AGENT]: CALLING_USER_AGENT,
|
|
435
|
+
},
|
|
436
|
+
});
|
|
437
|
+
if (response.statusCode !== 200) {
|
|
438
|
+
throw new Error(`API call failed with ${response.statusCode}`);
|
|
439
|
+
}
|
|
440
|
+
const body = response.body;
|
|
441
|
+
Object.values(this.lineDict)[0].registration.setDeviceInfo(body);
|
|
442
|
+
Object.values(this.lineDict)[0].registration.setActiveMobiusUrl(normalizedMobiusUrl);
|
|
443
|
+
return body.devices ?? [];
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
finalError = error;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
log.error(`Failed to fetch devices for userId ${userId}: ${JSON.stringify(finalError)}`, {
|
|
450
|
+
file: CALLING_CLIENT_FILE,
|
|
451
|
+
method: METHODS.GET_DEVICES,
|
|
452
|
+
});
|
|
453
|
+
throw finalError;
|
|
454
|
+
}
|
|
453
455
|
getActiveCalls() {
|
|
454
456
|
const activeCalls = {};
|
|
455
457
|
const calls = this.callManager.getActiveCalls();
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { MediaConnectionEventNames, LocalStreamEventNames, RoapMediaConnection, } from '@webex/internal-media-core';
|
|
2
2
|
import { createMachine, interpret } from 'xstate';
|
|
3
3
|
import { v4 as uuid } from 'uuid';
|
|
4
|
-
import { EffectEvent } from '@webex/
|
|
4
|
+
import { EffectEvent } from '@webex/media-helpers';
|
|
5
5
|
import { RtcMetrics } from '@webex/internal-plugin-metrics';
|
|
6
6
|
import { ERROR_LAYER, ERROR_TYPE } from '../../Errors/types';
|
|
7
7
|
import { handleCallErrors, modifySdpForIPv4, parseMediaQualityStatistics, serviceErrorCodeHandler, uploadLogs, } from '../../common/Utils';
|
|
8
8
|
import { ALLOWED_SERVICES, CallDirection, HTTP_METHODS, } from '../../common/types';
|
|
9
9
|
import { createCallError } from '../../Errors/catalog/CallError';
|
|
10
|
-
import { CALL_ENDPOINT_RESOURCE, CALL_FILE, CALL_HOLD_SERVICE, CALL_STATUS_RESOURCE, CALL_TRANSFER_SERVICE, CALLING_USER_AGENT, CALLS_ENDPOINT_RESOURCE, CISCO_DEVICE_URL, DEFAULT_LOCAL_CALL_ID, DEFAULT_SESSION_TIMER, DEVICES_ENDPOINT_RESOURCE, HOLD_ENDPOINT, ICE_CANDIDATES_TIMEOUT, INITIAL_SEQ_NUMBER, MEDIA_ENDPOINT_RESOURCE, METHODS, NOISE_REDUCTION_EFFECT, RESUME_ENDPOINT, SPARK_USER_AGENT, SUPPLEMENTARY_SERVICES_TIMEOUT, TRANSFER_ENDPOINT, } from '../constants';
|
|
10
|
+
import { CALL_ENDPOINT_RESOURCE, CALL_FILE, CALL_HOLD_SERVICE, CALL_STATUS_RESOURCE, CALL_TRANSFER_SERVICE, CALLING_USER_AGENT, CALLS_ENDPOINT_RESOURCE, CISCO_DEVICE_URL, DEFAULT_LOCAL_CALL_ID, DEFAULT_SESSION_TIMER, DEVICES_ENDPOINT_RESOURCE, HOLD_ENDPOINT, ICE_CANDIDATES_TIMEOUT, INITIAL_SEQ_NUMBER, MAX_CALL_KEEPALIVE_RETRY_COUNT, MEDIA_ENDPOINT_RESOURCE, METHODS, NOISE_REDUCTION_EFFECT, RESUME_ENDPOINT, SPARK_USER_AGENT, SUPPLEMENTARY_SERVICES_TIMEOUT, TRANSFER_ENDPOINT, } from '../constants';
|
|
11
11
|
import SDKConnector from '../../SDKConnector';
|
|
12
12
|
import { Eventing } from '../../Events/impl';
|
|
13
13
|
import { CALL_EVENT_KEYS, MEDIA_CONNECTION_EVENT_KEYS, MOBIUS_MIDCALL_STATE, SUPPLEMENTARY_SERVICES, } from '../../Events/types';
|
|
@@ -51,6 +51,7 @@ export class Call extends Eventing {
|
|
|
51
51
|
receivedRoapOKSeq;
|
|
52
52
|
localAudioStream;
|
|
53
53
|
rtcMetrics;
|
|
54
|
+
callKeepaliveRetryCount = 0;
|
|
54
55
|
isMuted() {
|
|
55
56
|
return this.muted;
|
|
56
57
|
}
|
|
@@ -639,8 +640,7 @@ export class Call extends Eventing {
|
|
|
639
640
|
});
|
|
640
641
|
}
|
|
641
642
|
catch (e) {
|
|
642
|
-
|
|
643
|
-
log.error(extendedError, {
|
|
643
|
+
log.error(`Failed to setup the call: ${JSON.stringify(e)}`, {
|
|
644
644
|
file: CALL_FILE,
|
|
645
645
|
method: METHODS.HANDLE_OUTGOING_CALL_SETUP,
|
|
646
646
|
});
|
|
@@ -682,8 +682,7 @@ export class Call extends Eventing {
|
|
|
682
682
|
}
|
|
683
683
|
}
|
|
684
684
|
catch (e) {
|
|
685
|
-
|
|
686
|
-
log.error(extendedError, {
|
|
685
|
+
log.error(`Failed to put the call on hold: ${JSON.stringify(e)}`, {
|
|
687
686
|
file: CALL_FILE,
|
|
688
687
|
method: METHODS.HANDLE_CALL_HOLD,
|
|
689
688
|
});
|
|
@@ -725,8 +724,7 @@ export class Call extends Eventing {
|
|
|
725
724
|
}
|
|
726
725
|
}
|
|
727
726
|
catch (e) {
|
|
728
|
-
|
|
729
|
-
log.error(extendedError, {
|
|
727
|
+
log.error(`Failed to resume the call: ${JSON.stringify(e)}`, {
|
|
730
728
|
file: CALL_FILE,
|
|
731
729
|
method: METHODS.HANDLE_CALL_RESUME,
|
|
732
730
|
});
|
|
@@ -814,13 +812,12 @@ export class Call extends Eventing {
|
|
|
814
812
|
method: METHODS.HANDLE_OUTGOING_CALL_ALERTING,
|
|
815
813
|
});
|
|
816
814
|
}
|
|
817
|
-
catch (
|
|
818
|
-
|
|
819
|
-
log.error(extendedError, {
|
|
815
|
+
catch (e) {
|
|
816
|
+
log.error(`Failed to signal call progression: ${JSON.stringify(e)}`, {
|
|
820
817
|
file: CALL_FILE,
|
|
821
818
|
method: METHODS.HANDLE_OUTGOING_CALL_ALERTING,
|
|
822
819
|
});
|
|
823
|
-
const errData =
|
|
820
|
+
const errData = e;
|
|
824
821
|
handleCallErrors((error) => {
|
|
825
822
|
this.emit(CALL_EVENT_KEYS.CALL_ERROR, error);
|
|
826
823
|
this.submitCallErrorMetric(error);
|
|
@@ -864,13 +861,12 @@ export class Call extends Eventing {
|
|
|
864
861
|
method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
|
|
865
862
|
});
|
|
866
863
|
}
|
|
867
|
-
catch (
|
|
868
|
-
|
|
869
|
-
log.error(extendedError, {
|
|
864
|
+
catch (e) {
|
|
865
|
+
log.error(`Failed to connect the call: ${JSON.stringify(e)}`, {
|
|
870
866
|
file: CALL_FILE,
|
|
871
867
|
method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
|
|
872
868
|
});
|
|
873
|
-
const errData =
|
|
869
|
+
const errData = e;
|
|
874
870
|
handleCallErrors((error) => {
|
|
875
871
|
this.emit(CALL_EVENT_KEYS.CALL_ERROR, error);
|
|
876
872
|
this.submitCallErrorMetric(error);
|
|
@@ -886,20 +882,21 @@ export class Call extends Eventing {
|
|
|
886
882
|
async handleIncomingCallDisconnect(event) {
|
|
887
883
|
log.info(`${METHOD_START_MESSAGE} with: ${this.getCorrelationId()}`, {
|
|
888
884
|
file: CALL_FILE,
|
|
889
|
-
method: METHODS.
|
|
885
|
+
method: METHODS.HANDLE_INCOMING_CALL_DISCONNECT,
|
|
890
886
|
});
|
|
887
|
+
this.emit(CALL_EVENT_KEYS.DISCONNECT, this.correlationId);
|
|
891
888
|
this.setDisconnectReason();
|
|
892
889
|
try {
|
|
893
890
|
const response = await this.delete();
|
|
894
891
|
log.log(`Response code: ${response.statusCode}`, {
|
|
895
892
|
file: CALL_FILE,
|
|
896
|
-
method: METHODS.
|
|
893
|
+
method: METHODS.HANDLE_INCOMING_CALL_DISCONNECT,
|
|
897
894
|
});
|
|
898
895
|
}
|
|
899
896
|
catch (e) {
|
|
900
|
-
log.warn(
|
|
897
|
+
log.warn(`Failed to delete the call: ${JSON.stringify(e)}`, {
|
|
901
898
|
file: CALL_FILE,
|
|
902
|
-
method: METHODS.
|
|
899
|
+
method: METHODS.HANDLE_INCOMING_CALL_DISCONNECT,
|
|
903
900
|
});
|
|
904
901
|
uploadLogs({
|
|
905
902
|
correlationId: this.correlationId,
|
|
@@ -916,12 +913,11 @@ export class Call extends Eventing {
|
|
|
916
913
|
this.mediaConnection.close();
|
|
917
914
|
log.info('Closing media channel', {
|
|
918
915
|
file: CALL_FILE,
|
|
919
|
-
method: METHODS.
|
|
916
|
+
method: METHODS.HANDLE_INCOMING_CALL_DISCONNECT,
|
|
920
917
|
});
|
|
921
918
|
}
|
|
922
919
|
this.sendMediaStateMachineEvt({ type: 'E_ROAP_TEARDOWN' });
|
|
923
920
|
this.sendCallStateMachineEvt({ type: 'E_CALL_CLEARED' });
|
|
924
|
-
this.emit(CALL_EVENT_KEYS.DISCONNECT, this.correlationId);
|
|
925
921
|
}
|
|
926
922
|
async handleOutgoingCallDisconnect(event) {
|
|
927
923
|
log.info(`${METHOD_START_MESSAGE} with: ${this.getCorrelationId()}`, {
|
|
@@ -966,50 +962,71 @@ export class Call extends Eventing {
|
|
|
966
962
|
this.sendMediaStateMachineEvt({ type: 'E_ROAP_TEARDOWN' });
|
|
967
963
|
this.sendCallStateMachineEvt({ type: 'E_CALL_CLEARED' });
|
|
968
964
|
}
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
method: METHODS.HANDLE_CALL_ESTABLISHED,
|
|
973
|
-
});
|
|
974
|
-
this.emit(CALL_EVENT_KEYS.ESTABLISHED, this.correlationId);
|
|
975
|
-
this.earlyMedia = false;
|
|
976
|
-
this.connected = true;
|
|
977
|
-
if (this.sessionTimer) {
|
|
978
|
-
log.log('Resetting session timer', {
|
|
965
|
+
callKeepaliveRetryCallback = (interval) => {
|
|
966
|
+
if (this.callKeepaliveRetryCount === MAX_CALL_KEEPALIVE_RETRY_COUNT) {
|
|
967
|
+
log.warn(`Max keepalive retry attempts reached. Aborting call keepalive for callId: ${this.callId}`, {
|
|
979
968
|
file: CALL_FILE,
|
|
980
|
-
method:
|
|
969
|
+
method: 'keepaliveRetryCallback',
|
|
981
970
|
});
|
|
971
|
+
return;
|
|
972
|
+
}
|
|
973
|
+
this.callKeepaliveRetryCount += 1;
|
|
974
|
+
setTimeout(async () => {
|
|
975
|
+
try {
|
|
976
|
+
await this.postStatus();
|
|
977
|
+
this.scheduleCallKeepaliveInterval();
|
|
978
|
+
}
|
|
979
|
+
catch (err) {
|
|
980
|
+
await this.handleCallKeepaliveError(err);
|
|
981
|
+
}
|
|
982
|
+
}, interval * 1000);
|
|
983
|
+
};
|
|
984
|
+
handleCallKeepaliveError = async (err) => {
|
|
985
|
+
const error = err;
|
|
986
|
+
if (this.sessionTimer) {
|
|
982
987
|
clearInterval(this.sessionTimer);
|
|
983
988
|
}
|
|
989
|
+
const abort = await handleCallErrors((callError) => {
|
|
990
|
+
this.emit(CALL_EVENT_KEYS.CALL_ERROR, callError);
|
|
991
|
+
this.submitCallErrorMetric(callError);
|
|
992
|
+
}, ERROR_LAYER.CALL_CONTROL, this.callKeepaliveRetryCallback, this.getCorrelationId(), error, 'handleCallEstablished', CALL_FILE);
|
|
993
|
+
if (abort) {
|
|
994
|
+
this.sendCallStateMachineEvt({ type: 'E_SEND_CALL_DISCONNECT' });
|
|
995
|
+
this.emit(CALL_EVENT_KEYS.DISCONNECT, this.getCorrelationId());
|
|
996
|
+
this.callKeepaliveRetryCount = 0;
|
|
997
|
+
}
|
|
998
|
+
await uploadLogs({
|
|
999
|
+
correlationId: this.correlationId,
|
|
1000
|
+
callId: this.callId,
|
|
1001
|
+
broadworksCorrelationInfo: this.broadworksCorrelationInfo,
|
|
1002
|
+
});
|
|
1003
|
+
};
|
|
1004
|
+
scheduleCallKeepaliveInterval = () => {
|
|
1005
|
+
const loggerContext = {
|
|
1006
|
+
file: CALL_FILE,
|
|
1007
|
+
method: 'scheduleCallKeepaliveInterval',
|
|
1008
|
+
};
|
|
1009
|
+
clearInterval(this.sessionTimer);
|
|
984
1010
|
this.sessionTimer = setInterval(async () => {
|
|
985
1011
|
try {
|
|
986
1012
|
const res = await this.postStatus();
|
|
987
|
-
log.info(`Session refresh successful`,
|
|
988
|
-
file: CALL_FILE,
|
|
989
|
-
method: METHODS.HANDLE_CALL_ESTABLISHED,
|
|
990
|
-
});
|
|
1013
|
+
log.info(`Session refresh successful`, loggerContext);
|
|
991
1014
|
}
|
|
992
1015
|
catch (err) {
|
|
993
|
-
|
|
994
|
-
if (this.sessionTimer) {
|
|
995
|
-
clearInterval(this.sessionTimer);
|
|
996
|
-
}
|
|
997
|
-
handleCallErrors((callError) => {
|
|
998
|
-
this.emit(CALL_EVENT_KEYS.CALL_ERROR, callError);
|
|
999
|
-
this.submitCallErrorMetric(callError);
|
|
1000
|
-
}, ERROR_LAYER.CALL_CONTROL, (interval) => {
|
|
1001
|
-
setTimeout(() => {
|
|
1002
|
-
this.postStatus();
|
|
1003
|
-
this.sendCallStateMachineEvt({ type: 'E_CALL_ESTABLISHED' });
|
|
1004
|
-
}, interval * 1000);
|
|
1005
|
-
}, this.getCorrelationId(), error, this.handleCallEstablished.name, CALL_FILE);
|
|
1006
|
-
await uploadLogs({
|
|
1007
|
-
correlationId: this.correlationId,
|
|
1008
|
-
callId: this.callId,
|
|
1009
|
-
broadworksCorrelationInfo: this.broadworksCorrelationInfo,
|
|
1010
|
-
});
|
|
1016
|
+
await this.handleCallKeepaliveError(err);
|
|
1011
1017
|
}
|
|
1012
1018
|
}, DEFAULT_SESSION_TIMER);
|
|
1019
|
+
};
|
|
1020
|
+
handleCallEstablished(event) {
|
|
1021
|
+
const loggerContext = {
|
|
1022
|
+
file: CALL_FILE,
|
|
1023
|
+
method: METHODS.HANDLE_CALL_ESTABLISHED,
|
|
1024
|
+
};
|
|
1025
|
+
log.info(`${METHOD_START_MESSAGE} with: ${this.getCorrelationId()}`, loggerContext);
|
|
1026
|
+
this.emit(CALL_EVENT_KEYS.ESTABLISHED, this.correlationId);
|
|
1027
|
+
this.earlyMedia = false;
|
|
1028
|
+
this.connected = true;
|
|
1029
|
+
this.scheduleCallKeepaliveInterval();
|
|
1013
1030
|
}
|
|
1014
1031
|
async handleUnknownState(event) {
|
|
1015
1032
|
log.info(`${METHOD_START_MESSAGE} with: ${this.getCorrelationId()}`, {
|
|
@@ -1164,7 +1181,7 @@ export class Call extends Eventing {
|
|
|
1164
1181
|
method: METHODS.HANDLE_ROAP_ERROR,
|
|
1165
1182
|
});
|
|
1166
1183
|
const message = event.data;
|
|
1167
|
-
if (message) {
|
|
1184
|
+
if (message && message.messageType === 'ERROR') {
|
|
1168
1185
|
try {
|
|
1169
1186
|
const res = await this.postMedia(message);
|
|
1170
1187
|
log.info(`Response code: ${res.statusCode}`, {
|
|
@@ -1219,7 +1236,7 @@ export class Call extends Eventing {
|
|
|
1219
1236
|
});
|
|
1220
1237
|
}
|
|
1221
1238
|
catch (err) {
|
|
1222
|
-
log.warn('Failed to
|
|
1239
|
+
log.warn('Failed to send MediaOffer request', {
|
|
1223
1240
|
file: CALL_FILE,
|
|
1224
1241
|
method: METHODS.HANDLE_OUTGOING_ROAP_OFFER,
|
|
1225
1242
|
});
|
|
@@ -1332,9 +1349,8 @@ export class Call extends Eventing {
|
|
|
1332
1349
|
}
|
|
1333
1350
|
catch (error) {
|
|
1334
1351
|
const errorInfo = error;
|
|
1335
|
-
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
1336
|
-
|
|
1337
|
-
log.error(errorLog, loggerContext);
|
|
1352
|
+
const errorStatus = await serviceErrorCodeHandler(errorInfo, loggerContext);
|
|
1353
|
+
log.error(`Failed to upload webrtc telemetry statistics. ${JSON.stringify(errorStatus)}`, loggerContext);
|
|
1338
1354
|
await uploadLogs({
|
|
1339
1355
|
correlationId: this.correlationId,
|
|
1340
1356
|
callId: this.callId,
|
|
@@ -137,6 +137,13 @@ export class CallManager extends Eventing {
|
|
|
137
137
|
method: METHODS.DEQUEUE_WS_EVENTS,
|
|
138
138
|
});
|
|
139
139
|
const call = this.getCall(correlationId);
|
|
140
|
+
if (mobiusEvent.data.callerId) {
|
|
141
|
+
log.info('Processing Caller-Id data', {
|
|
142
|
+
file: CALL_MANAGER_FILE,
|
|
143
|
+
method: METHODS.DEQUEUE_WS_EVENTS,
|
|
144
|
+
});
|
|
145
|
+
call.startCallerIdResolution(mobiusEvent.data.callerId);
|
|
146
|
+
}
|
|
140
147
|
call.sendCallStateMachineEvt({ type: 'E_RECV_CALL_PROGRESS', data: mobiusEvent.data });
|
|
141
148
|
break;
|
|
142
149
|
}
|