1 /*
2 * Copyright (C) 2021-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "napi_call_manager.h"
17
18 #include <securec.h>
19 #include <string_ex.h>
20
21 #include "ability_manager_client.h"
22 #include "bool_wrapper.h"
23 #include "call_manager_client.h"
24 #include "call_manager_errors.h"
25 #include "napi_call_ability_callback.h"
26 #include "napi_call_manager_types.h"
27 #include "napi_call_manager_utils.h"
28 #include "napi_util.h"
29 #include "string_wrapper.h"
30 #include "system_ability_definition.h"
31 #include "telephony_log_wrapper.h"
32 #include "telephony_napi_common_error.h"
33 #include "telephony_types.h"
34 #include "want.h"
35
36 namespace OHOS {
37 namespace Telephony {
38 static constexpr const char *OBSERVER_ON_JS_PERMISSION_ERROR_STRING =
39 "BusinessError 201: Permission denied. An attempt was made to On forbidden by permission: "
40 "ohos.permission.SET_TELEPHONY_STATE.";
41 static constexpr const char *OBSERVER_OFF_JS_PERMISSION_ERROR_STRING =
42 "BusinessError 201: Permission denied. An attempt was made to Off forbidden by permission: "
43 "ohos.permission.SET_TELEPHONY_STATE.";
44 int32_t NapiCallManager::registerStatus_ = TELEPHONY_ERROR;
45
NapiCallManager()46 NapiCallManager::NapiCallManager() {}
47
~NapiCallManager()48 NapiCallManager::~NapiCallManager()
49 {
50 DelayedSingleton<CallManagerClient>::GetInstance()->UnInit();
51 }
52
Init()53 void Init()
54 {
55 // Establish a connection with call_manager
56 DelayedSingleton<CallManagerClient>::GetInstance()->Init(TELEPHONY_CALL_MANAGER_SYS_ABILITY_ID);
57 }
58
DeclareCallBasisInterface(napi_env env,napi_value exports)59 napi_value NapiCallManager::DeclareCallBasisInterface(napi_env env, napi_value exports)
60 {
61 napi_property_descriptor desc[] = {
62 DECLARE_NAPI_FUNCTION("dial", Dial),
63 DECLARE_NAPI_FUNCTION("dialCall", DialCall),
64 DECLARE_NAPI_FUNCTION("makeCall", MakeCall),
65 DECLARE_NAPI_FUNCTION("answer", AnswerCall),
66 DECLARE_NAPI_FUNCTION("reject", RejectCall),
67 DECLARE_NAPI_FUNCTION("hangup", HangUpCall),
68 DECLARE_NAPI_FUNCTION("answerCall", AnswerCall),
69 DECLARE_NAPI_FUNCTION("rejectCall", RejectCall),
70 DECLARE_NAPI_FUNCTION("hangUpCall", HangUpCall),
71 DECLARE_NAPI_FUNCTION("holdCall", HoldCall),
72 DECLARE_NAPI_FUNCTION("unHoldCall", UnHoldCall),
73 DECLARE_NAPI_FUNCTION("switchCall", SwitchCall),
74 DECLARE_NAPI_FUNCTION("setCallPreferenceMode", SetCallPreferenceMode),
75 DECLARE_NAPI_FUNCTION("hasVoiceCapability", HasVoiceCapability),
76 };
77 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
78 return exports;
79 }
80
DeclareCallConferenceInterface(napi_env env,napi_value exports)81 napi_value NapiCallManager::DeclareCallConferenceInterface(napi_env env, napi_value exports)
82 {
83 napi_property_descriptor desc[] = {
84 DECLARE_NAPI_FUNCTION("combineConference", CombineConference),
85 DECLARE_NAPI_FUNCTION("separateConference", SeparateConference),
86 DECLARE_NAPI_FUNCTION("kickOutFromConference", KickOutFromConference),
87 DECLARE_NAPI_FUNCTION("getMainCallId", GetMainCallId),
88 DECLARE_NAPI_FUNCTION("getSubCallIdList", GetSubCallIdList),
89 DECLARE_NAPI_FUNCTION("getCallIdListForConference", GetCallIdListForConference),
90 };
91 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
92 return exports;
93 }
94
DeclareCallSupplementInterface(napi_env env,napi_value exports)95 napi_value NapiCallManager::DeclareCallSupplementInterface(napi_env env, napi_value exports)
96 {
97 napi_property_descriptor desc[] = {
98 DECLARE_NAPI_FUNCTION("getCallWaitingStatus", GetCallWaiting),
99 DECLARE_NAPI_FUNCTION("setCallWaiting", SetCallWaiting),
100 DECLARE_NAPI_FUNCTION("getCallRestrictionStatus", GetCallRestriction),
101 DECLARE_NAPI_FUNCTION("setCallRestriction", SetCallRestriction),
102 DECLARE_NAPI_FUNCTION("setCallRestrictionPassword", SetCallRestrictionPassword),
103 DECLARE_NAPI_FUNCTION("getCallTransferInfo", GetCallTransferInfo),
104 DECLARE_NAPI_FUNCTION("setCallTransfer", SetCallTransferInfo),
105 DECLARE_NAPI_FUNCTION("enableImsSwitch", EnableImsSwitch),
106 DECLARE_NAPI_FUNCTION("disableImsSwitch", DisableImsSwitch),
107 DECLARE_NAPI_FUNCTION("isImsSwitchEnabled", IsImsSwitchEnabled),
108 DECLARE_NAPI_FUNCTION("setVoNRState", SetVoNRState),
109 DECLARE_NAPI_FUNCTION("getVoNRState", GetVoNRState),
110 DECLARE_NAPI_FUNCTION("canSetCallTransferTime", CanSetCallTransferTime),
111 DECLARE_NAPI_FUNCTION("closeUnfinishedUssd", CloseUnFinishedUssd),
112 DECLARE_NAPI_FUNCTION("inputDialerSpecialCode", InputDialerSpecialCode),
113 };
114 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
115 return exports;
116 }
117
DeclareCallExtendInterface(napi_env env,napi_value exports)118 napi_value NapiCallManager::DeclareCallExtendInterface(napi_env env, napi_value exports)
119 {
120 napi_property_descriptor desc[] = {
121 DECLARE_NAPI_FUNCTION("startDTMF", StartDTMF),
122 DECLARE_NAPI_FUNCTION("stopDTMF", StopDTMF),
123 DECLARE_NAPI_FUNCTION("postDialProceed", PostDialProceed),
124 DECLARE_NAPI_FUNCTION("getCallState", GetCallState),
125 DECLARE_NAPI_FUNCTION("getCallStateSync", GetCallStateSync),
126 DECLARE_NAPI_FUNCTION("isRinging", IsRinging),
127 DECLARE_NAPI_FUNCTION("hasCall", HasCall),
128 DECLARE_NAPI_FUNCTION("hasCallSync", HasCallSync),
129 DECLARE_NAPI_FUNCTION("isNewCallAllowed", IsNewCallAllowed),
130 DECLARE_NAPI_FUNCTION("isInEmergencyCall", IsInEmergencyCall),
131 DECLARE_NAPI_FUNCTION("isEmergencyPhoneNumber", IsEmergencyPhoneNumber),
132 DECLARE_NAPI_FUNCTION("formatPhoneNumber", FormatPhoneNumber),
133 DECLARE_NAPI_FUNCTION("formatPhoneNumberToE164", FormatPhoneNumberToE164),
134 DECLARE_NAPI_FUNCTION("on", ObserverOn),
135 DECLARE_NAPI_FUNCTION("off", ObserverOff),
136 DECLARE_NAPI_FUNCTION("reportOttCallDetailsInfo", ReportOttCallDetailsInfo),
137 DECLARE_NAPI_FUNCTION("reportOttCallEventInfo", ReportOttCallEventInfo),
138 DECLARE_NAPI_FUNCTION("removeMissedIncomingCallNotification", RemoveMissedIncomingCallNotification),
139 DECLARE_NAPI_FUNCTION("setVoIPCallState", SetVoIPCallState),
140 };
141 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
142 return exports;
143 }
144
DeclareCallMultimediaInterface(napi_env env,napi_value exports)145 napi_value NapiCallManager::DeclareCallMultimediaInterface(napi_env env, napi_value exports)
146 {
147 napi_property_descriptor desc[] = {
148 DECLARE_NAPI_FUNCTION("setMuted", SetMuted),
149 DECLARE_NAPI_FUNCTION("cancelMuted", CancelMuted),
150 DECLARE_NAPI_FUNCTION("muteRinger", MuteRinger),
151 DECLARE_NAPI_FUNCTION("setAudioDevice", SetAudioDevice),
152 DECLARE_NAPI_FUNCTION("controlCamera", ControlCamera),
153 DECLARE_NAPI_FUNCTION("setPreviewSurface", SetPreviewWindow),
154 DECLARE_NAPI_FUNCTION("setDisplaySurface", SetDisplayWindow),
155 DECLARE_NAPI_FUNCTION("setCameraZoom", SetCameraZoom),
156 DECLARE_NAPI_FUNCTION("setDeviceDirection", SetDeviceDirection),
157 DECLARE_NAPI_FUNCTION("updateImsCallMode", UpdateImsCallMode),
158 DECLARE_NAPI_FUNCTION("cancelCallUpgrade", CancelCallUpgrade),
159 };
160 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
161 return exports;
162 }
163
DeclareCallImsInterface(napi_env env,napi_value exports)164 napi_value NapiCallManager::DeclareCallImsInterface(napi_env env, napi_value exports)
165 {
166 napi_property_descriptor desc[] = {
167 DECLARE_NAPI_FUNCTION("startRTT", StartRTT),
168 DECLARE_NAPI_FUNCTION("stopRTT", StopRTT),
169 DECLARE_NAPI_FUNCTION("joinConference", JoinConference),
170 };
171 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
172 return exports;
173 }
174
DeclareCallMediaEnum(napi_env env,napi_value exports)175 napi_value NapiCallManager::DeclareCallMediaEnum(napi_env env, napi_value exports)
176 {
177 napi_property_descriptor desc[] = {
178 // VideoStateType
179 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VOICE",
180 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_VOICE))),
181 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VIDEO_SEND_ONLY",
182 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_SEND_ONLY))),
183 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VIDEO_RECEIVE_ONLY",
184 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_RECEIVE_ONLY))),
185 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VIDEO_BIDIRECTIONAL",
186 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_VIDEO))),
187 // ImsCallMode
188 DECLARE_NAPI_STATIC_PROPERTY(
189 "CALL_MODE_AUDIO_ONLY", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_AUDIO_ONLY)),
190 DECLARE_NAPI_STATIC_PROPERTY(
191 "CALL_MODE_SEND_ONLY", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_SEND_ONLY)),
192 DECLARE_NAPI_STATIC_PROPERTY(
193 "CALL_MODE_RECEIVE_ONLY", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_RECEIVE_ONLY)),
194 DECLARE_NAPI_STATIC_PROPERTY(
195 "CALL_MODE_SEND_RECEIVE", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_SEND_RECEIVE)),
196 DECLARE_NAPI_STATIC_PROPERTY(
197 "CALL_MODE_VIDEO_PAUSED", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_VIDEO_PAUSED)),
198 // VideoRequestResultType
199 DECLARE_NAPI_STATIC_PROPERTY(
200 "TYPE_REQUEST_SUCCESS", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_SUCCESS)),
201 DECLARE_NAPI_STATIC_PROPERTY(
202 "TYPE_REQUEST_FAILURE", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_FAIL)),
203 DECLARE_NAPI_STATIC_PROPERTY(
204 "TYPE_REQUEST_INVALID", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_INVALID)),
205 DECLARE_NAPI_STATIC_PROPERTY(
206 "TYPE_REQUEST_TIMED_OUT", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_TIMED_OUT)),
207 DECLARE_NAPI_STATIC_PROPERTY(
208 "TYPE_REQUEST_REJECTED_BY_REMOTE", NapiCallManagerUtils::ToInt32Value(env, REQUEST_REJECTED_BY_REMOTE)),
209 DECLARE_NAPI_STATIC_PROPERTY(
210 "TYPE_REQUEST_UPGRADE_CANCELED", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_UPGRADE_CANCELED)),
211 DECLARE_NAPI_STATIC_PROPERTY(
212 "TYPE_DOWNGRADE_RTP_OR_RTCP_TIMEOUT",
213 NapiCallManagerUtils::ToInt32Value(env, TYPE_MODIFY_DOWNGRADE_RTP_OR_RTCP_TIMEOUT)),
214 DECLARE_NAPI_STATIC_PROPERTY(
215 "TYPE_DOWNGRADE_RTP_AND_RTCP_TIMEOUT",
216 NapiCallManagerUtils::ToInt32Value(env, TYPE_MODIFY_DOWNGRADE_RTP_AND_RTCP_TIMEOUT)),
217 // DeviceDirection
218 DECLARE_NAPI_STATIC_PROPERTY(
219 "DEVICE_DIRECTION_0", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_0)),
220 DECLARE_NAPI_STATIC_PROPERTY(
221 "DEVICE_DIRECTION_90", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_90)),
222 DECLARE_NAPI_STATIC_PROPERTY(
223 "DEVICE_DIRECTION_180", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_180)),
224 DECLARE_NAPI_STATIC_PROPERTY(
225 "DEVICE_DIRECTION_270", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_270)),
226 };
227 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
228 return exports;
229 }
230
DeclareCallDialEnum(napi_env env,napi_value exports)231 napi_value NapiCallManager::DeclareCallDialEnum(napi_env env, napi_value exports)
232 {
233 napi_property_descriptor desc[] = {
234 // DialScene
235 DECLARE_NAPI_STATIC_PROPERTY(
236 "CALL_NORMAL", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialScene::CALL_NORMAL))),
237 DECLARE_NAPI_STATIC_PROPERTY("CALL_PRIVILEGED",
238 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialScene::CALL_PRIVILEGED))),
239 DECLARE_NAPI_STATIC_PROPERTY(
240 "CALL_EMERGENCY", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialScene::CALL_EMERGENCY))),
241 // CallType
242 DECLARE_NAPI_STATIC_PROPERTY(
243 "TYPE_CS", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_CS))),
244 DECLARE_NAPI_STATIC_PROPERTY(
245 "TYPE_IMS", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_IMS))),
246 DECLARE_NAPI_STATIC_PROPERTY(
247 "TYPE_OTT", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_OTT))),
248 DECLARE_NAPI_STATIC_PROPERTY(
249 "TYPE_VOIP", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_VOIP))),
250 DECLARE_NAPI_STATIC_PROPERTY(
251 "TYPE_ERR_CALL", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_ERR_CALL))),
252 // DialType
253 DECLARE_NAPI_STATIC_PROPERTY("DIAL_CARRIER_TYPE",
254 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialType::DIAL_CARRIER_TYPE))),
255 DECLARE_NAPI_STATIC_PROPERTY("DIAL_VOICE_MAIL_TYPE",
256 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialType::DIAL_VOICE_MAIL_TYPE))),
257 DECLARE_NAPI_STATIC_PROPERTY(
258 "DIAL_OTT_TYPE", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialType::DIAL_OTT_TYPE))),
259 };
260 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
261 return exports;
262 }
263
DeclareCallStateEnum(napi_env env,napi_value exports)264 napi_value NapiCallManager::DeclareCallStateEnum(napi_env env, napi_value exports)
265 {
266 napi_property_descriptor desc[] = {
267 // TelCallState
268 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_ACTIVE",
269 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_ACTIVE))),
270 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_HOLDING",
271 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_HOLDING))),
272 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_DIALING",
273 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_DIALING))),
274 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_ALERTING",
275 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_ALERTING))),
276 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_INCOMING",
277 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_INCOMING))),
278 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_WAITING",
279 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_WAITING))),
280 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_DISCONNECTED",
281 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_DISCONNECTED))),
282 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_DISCONNECTING",
283 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_DISCONNECTING))),
284 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_IDLE",
285 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_IDLE))),
286 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_ANSWERED",
287 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_ANSWERED))),
288 // TelConferenceState
289 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_IDLE",
290 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_IDLE))),
291 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_ACTIVE",
292 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_ACTIVE))),
293 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_HOLDING",
294 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_HOLDING))),
295 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_DISCONNECTING",
296 NapiCallManagerUtils::ToInt32Value(
297 env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_DISCONNECTING))),
298 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_DISCONNECTED",
299 NapiCallManagerUtils::ToInt32Value(
300 env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_DISCONNECTED))),
301 // CallStateToApp
302 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_UNKNOWN",
303 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_UNKNOWN))),
304 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_IDLE",
305 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_IDLE))),
306 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_RINGING",
307 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_RINGING))),
308 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_OFFHOOK",
309 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_OFFHOOK))),
310 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_ANSWERED",
311 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_ANSWERED))),
312 };
313 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
314 return exports;
315 }
316
DeclareCallEventEnum(napi_env env,napi_value exports)317 napi_value NapiCallManager::DeclareCallEventEnum(napi_env env, napi_value exports)
318 {
319 napi_property_descriptor desc[] = {
320 // CallAbilityEventId
321 DECLARE_NAPI_STATIC_PROPERTY("EVENT_DIAL_NO_CARRIER",
322 NapiCallManagerUtils::ToInt32Value(
323 env, static_cast<int32_t>(CallAbilityEventId::EVENT_DIAL_NO_CARRIER))),
324 DECLARE_NAPI_STATIC_PROPERTY("EVENT_INVALID_FDN_NUMBER",
325 NapiCallManagerUtils::ToInt32Value(
326 env, static_cast<int32_t>(CallAbilityEventId::EVENT_INVALID_FDN_NUMBER))),
327 DECLARE_NAPI_STATIC_PROPERTY("EVENT_HOLD_CALL_FAILED",
328 NapiCallManagerUtils::ToInt32Value(
329 env, static_cast<int32_t>(CallAbilityEventId::EVENT_HOLD_CALL_FAILED))),
330 DECLARE_NAPI_STATIC_PROPERTY("EVENT_SWAP_CALL_FAILED",
331 NapiCallManagerUtils::ToInt32Value(
332 env, static_cast<int32_t>(CallAbilityEventId::EVENT_SWAP_CALL_FAILED))),
333 DECLARE_NAPI_STATIC_PROPERTY("EVENT_COMBINE_CALL_FAILED",
334 NapiCallManagerUtils::ToInt32Value(
335 env, static_cast<int32_t>(CallAbilityEventId::EVENT_COMBINE_CALL_FAILED))),
336 DECLARE_NAPI_STATIC_PROPERTY("EVENT_SPLIT_CALL_FAILED",
337 NapiCallManagerUtils::ToInt32Value(
338 env, static_cast<int32_t>(CallAbilityEventId::EVENT_SPLIT_CALL_FAILED))),
339 // CallSessionEventId
340 DECLARE_NAPI_STATIC_PROPERTY("EVENT_CONTROL_CAMERA_FAILURE",
341 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallSessionEventId::EVENT_CAMERA_FAILURE))),
342 DECLARE_NAPI_STATIC_PROPERTY("EVENT_CONTROL_CAMERA_READY",
343 NapiCallManagerUtils::ToInt32Value(
344 env, static_cast<int32_t>(CallSessionEventId::EVENT_CAMERA_READY))),
345 DECLARE_NAPI_STATIC_PROPERTY("EVENT_DISPLAY_SURFACE_RELEASED",
346 NapiCallManagerUtils::ToInt32Value(
347 env, static_cast<int32_t>(CallSessionEventId::EVENT_RELEASE_DISPLAY_SURFACE))),
348 DECLARE_NAPI_STATIC_PROPERTY("EVENT_PREVIEW_SURFACE_RELEASED",
349 NapiCallManagerUtils::ToInt32Value(
350 env, static_cast<int32_t>(CallSessionEventId::EVENT_RELEASE_PREVIEW_SURFACE))),
351 };
352 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
353 return exports;
354 }
355
DeclareCallRestrictionEnum(napi_env env,napi_value exports)356 napi_value NapiCallManager::DeclareCallRestrictionEnum(napi_env env, napi_value exports)
357 {
358 napi_property_descriptor desc[] = {
359 // CallRestrictionType
360 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_INCOMING_SERVICES",
361 NapiCallManagerUtils::ToInt32Value(
362 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_INCOMING_SERVICES))),
363 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_OUTGOING_SERVICES",
364 NapiCallManagerUtils::ToInt32Value(
365 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_OUTGOING_SERVICES))),
366 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ALL_CALLS",
367 NapiCallManagerUtils::ToInt32Value(
368 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ALL_CALLS))),
369 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ROAMING_INCOMING",
370 NapiCallManagerUtils::ToInt32Value(
371 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ROAMING_INCOMING))),
372 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ALL_INCOMING",
373 NapiCallManagerUtils::ToInt32Value(
374 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING))),
375 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME",
376 NapiCallManagerUtils::ToInt32Value(
377 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME))),
378 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_INTERNATIONAL",
379 NapiCallManagerUtils::ToInt32Value(
380 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_INTERNATIONAL))),
381 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ALL_OUTGOING",
382 NapiCallManagerUtils::ToInt32Value(
383 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ALL_OUTGOING))),
384 // CallRestrictionMode
385 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_MODE_DEACTIVATION",
386 NapiCallManagerUtils::ToInt32Value(
387 env, static_cast<int32_t>(CallRestrictionMode::RESTRICTION_MODE_DEACTIVATION))),
388 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_MODE_ACTIVATION",
389 NapiCallManagerUtils::ToInt32Value(
390 env, static_cast<int32_t>(CallRestrictionMode::RESTRICTION_MODE_ACTIVATION))),
391 // RestrictionStatus
392 DECLARE_NAPI_STATIC_PROPERTY(
393 "RESTRICTION_DISABLE", NapiCallManagerUtils::ToInt32Value(env, RESTRICTION_DISABLE)),
394 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_ENABLE", NapiCallManagerUtils::ToInt32Value(env, RESTRICTION_ENABLE)),
395 };
396 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
397 return exports;
398 }
399
DeclareCallWaitingEnum(napi_env env,napi_value exports)400 napi_value NapiCallManager::DeclareCallWaitingEnum(napi_env env, napi_value exports)
401 {
402 napi_property_descriptor desc[] = {
403 // CallWaitingStatus
404 DECLARE_NAPI_STATIC_PROPERTY(
405 "CALL_WAITING_DISABLE", NapiCallManagerUtils::ToInt32Value(env, CALL_WAITING_DISABLE)),
406 DECLARE_NAPI_STATIC_PROPERTY(
407 "CALL_WAITING_ENABLE", NapiCallManagerUtils::ToInt32Value(env, CALL_WAITING_ENABLE)),
408 };
409 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
410 return exports;
411 }
412
DeclareCallTransferEnum(napi_env env,napi_value exports)413 napi_value NapiCallManager::DeclareCallTransferEnum(napi_env env, napi_value exports)
414 {
415 napi_property_descriptor desc[] = {
416 // TransferStatus
417 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_DISABLE", NapiCallManagerUtils::ToInt32Value(env, TRANSFER_DISABLE)),
418 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_ENABLE", NapiCallManagerUtils::ToInt32Value(env, TRANSFER_ENABLE)),
419 // CallTransferType
420 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_UNCONDITIONAL",
421 NapiCallManagerUtils::ToInt32Value(
422 env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_UNCONDITIONAL))),
423 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_BUSY",
424 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_BUSY))),
425 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_NO_REPLY",
426 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NO_REPLY))),
427 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_NOT_REACHABLE",
428 NapiCallManagerUtils::ToInt32Value(
429 env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NOT_REACHABLE))),
430 // CallTransferSettingType
431 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_ENABLE",
432 NapiCallManagerUtils::ToInt32Value(
433 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_ENABLE))),
434 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_DISABLE",
435 NapiCallManagerUtils::ToInt32Value(
436 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_DISABLE))),
437 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_REGISTRATION",
438 NapiCallManagerUtils::ToInt32Value(
439 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_REGISTRATION))),
440 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_ERASURE",
441 NapiCallManagerUtils::ToInt32Value(
442 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_ERASURE))),
443 };
444 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
445 return exports;
446 }
447
448 /**
449 * Enumeration type extension.
450 */
DeclareVoNRStateEnum(napi_env env,napi_value exports)451 napi_value NapiCallManager::DeclareVoNRStateEnum(napi_env env, napi_value exports)
452 {
453 napi_property_descriptor desc[] = {
454 DECLARE_NAPI_STATIC_PROPERTY("VONR_STATE_ON",
455 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VoNRState::VONR_STATE_ON))),
456 DECLARE_NAPI_STATIC_PROPERTY("VONR_STATE_OFF",
457 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VoNRState::VONR_STATE_OFF))),
458 };
459 napi_value result = nullptr;
460 napi_define_class(env, "VoNRState", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
461 sizeof(desc) / sizeof(*desc), desc, &result);
462 napi_set_named_property(env, exports, "VoNRState", result);
463 return exports;
464 }
465
DeclareAudioDeviceEnum(napi_env env,napi_value exports)466 napi_value NapiCallManager::DeclareAudioDeviceEnum(napi_env env, napi_value exports)
467 {
468 // AudioDeviceType
469 napi_property_descriptor desc[] = {
470 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_UNKNOWN",
471 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_UNKNOWN))),
472 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_DISABLE",
473 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_DISABLE))),
474 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_BLUETOOTH_SCO",
475 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_BLUETOOTH_SCO))),
476 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_DISTRIBUTED_AUTOMOTIVE",
477 NapiCallManagerUtils::ToInt32Value(env,
478 static_cast<int32_t>(AudioDeviceType::DEVICE_DISTRIBUTED_AUTOMOTIVE))),
479 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_DISTRIBUTED_PHONE",
480 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_DISTRIBUTED_PHONE))),
481 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_DISTRIBUTED_PAD",
482 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_DISTRIBUTED_PAD))),
483 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_WIRED_HEADSET",
484 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_WIRED_HEADSET))),
485 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_SPEAKER",
486 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_SPEAKER))),
487 DECLARE_NAPI_STATIC_PROPERTY("DEVICE_EARPIECE",
488 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(AudioDeviceType::DEVICE_EARPIECE))),
489 };
490 napi_value result = nullptr;
491 napi_define_class(env, "AudioDeviceType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
492 sizeof(desc) / sizeof(*desc), desc, &result);
493 napi_set_named_property(env, exports, "AudioDeviceType", result);
494 return exports;
495 }
496
DeclareVideoStateTypeEnum(napi_env env,napi_value exports)497 napi_value NapiCallManager::DeclareVideoStateTypeEnum(napi_env env, napi_value exports)
498 {
499 napi_property_descriptor desc[] = {
500 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VOICE",
501 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_VOICE))),
502 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VIDEO_SEND_ONLY",
503 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_SEND_ONLY))),
504 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VIDEO_RECEIVE_ONLY",
505 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_RECEIVE_ONLY))),
506 DECLARE_NAPI_STATIC_PROPERTY("TYPE_VIDEO_BIDIRECTIONAL",
507 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(VideoStateType::TYPE_VIDEO))),
508 };
509 napi_value result = nullptr;
510 napi_define_class(env, "VideoStateType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
511 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
512 napi_set_named_property(env, exports, "VideoStateType", result);
513 return exports;
514 }
515
DeclareVideoRequestResultEnum(napi_env env,napi_value exports)516 napi_value NapiCallManager::DeclareVideoRequestResultEnum(napi_env env, napi_value exports)
517 {
518 napi_property_descriptor desc[] = {
519 DECLARE_NAPI_STATIC_PROPERTY(
520 "TYPE_REQUEST_SUCCESS", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_SUCCESS)),
521 DECLARE_NAPI_STATIC_PROPERTY(
522 "TYPE_REQUEST_FAILURE", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_FAIL)),
523 DECLARE_NAPI_STATIC_PROPERTY(
524 "TYPE_REQUEST_INVALID", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_INVALID)),
525 DECLARE_NAPI_STATIC_PROPERTY(
526 "TYPE_REQUEST_TIMED_OUT", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_TIMED_OUT)),
527 DECLARE_NAPI_STATIC_PROPERTY(
528 "TYPE_REQUEST_REJECTED_BY_REMOTE", NapiCallManagerUtils::ToInt32Value(env, REQUEST_REJECTED_BY_REMOTE)),
529 DECLARE_NAPI_STATIC_PROPERTY(
530 "TYPE_REQUEST_UPGRADE_CANCELED", NapiCallManagerUtils::ToInt32Value(env, TYPE_REQUEST_UPGRADE_CANCELED)),
531 DECLARE_NAPI_STATIC_PROPERTY(
532 "TYPE_DOWNGRADE_RTP_OR_RTCP_TIMEOUT",
533 NapiCallManagerUtils::ToInt32Value(env, TYPE_MODIFY_DOWNGRADE_RTP_OR_RTCP_TIMEOUT)),
534 DECLARE_NAPI_STATIC_PROPERTY(
535 "TYPE_DOWNGRADE_RTP_AND_RTCP_TIMEOUT",
536 NapiCallManagerUtils::ToInt32Value(env, TYPE_MODIFY_DOWNGRADE_RTP_AND_RTCP_TIMEOUT)),
537 };
538 napi_value result = nullptr;
539 napi_define_class(env, "VideoRequestResultType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
540 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
541 napi_set_named_property(env, exports, "VideoRequestResultType", result);
542 return exports;
543 }
544
DeclareImsCallModeEnum(napi_env env,napi_value exports)545 napi_value NapiCallManager::DeclareImsCallModeEnum(napi_env env, napi_value exports)
546 {
547 napi_property_descriptor desc[] = {
548 DECLARE_NAPI_STATIC_PROPERTY(
549 "CALL_MODE_AUDIO_ONLY", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_AUDIO_ONLY)),
550 DECLARE_NAPI_STATIC_PROPERTY(
551 "CALL_MODE_SEND_ONLY", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_SEND_ONLY)),
552 DECLARE_NAPI_STATIC_PROPERTY(
553 "CALL_MODE_RECEIVE_ONLY", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_RECEIVE_ONLY)),
554 DECLARE_NAPI_STATIC_PROPERTY(
555 "CALL_MODE_SEND_RECEIVE", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_SEND_RECEIVE)),
556 DECLARE_NAPI_STATIC_PROPERTY(
557 "CALL_MODE_VIDEO_PAUSED", NapiCallManagerUtils::ToInt32Value(env, CALL_MODE_VIDEO_PAUSED)),
558 };
559 napi_value result = nullptr;
560 napi_define_class(env, "ImsCallMode", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
561 sizeof(desc) / sizeof(*desc), desc, &result);
562 napi_set_named_property(env, exports, "ImsCallMode", result);
563 return exports;
564 }
565
DeclareDeviceDirectionEnum(napi_env env,napi_value exports)566 napi_value NapiCallManager::DeclareDeviceDirectionEnum(napi_env env, napi_value exports)
567 {
568 napi_property_descriptor desc[] = {
569 // DeviceDirection
570 DECLARE_NAPI_STATIC_PROPERTY(
571 "DEVICE_DIRECTION_0", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_0)),
572 DECLARE_NAPI_STATIC_PROPERTY(
573 "DEVICE_DIRECTION_90", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_90)),
574 DECLARE_NAPI_STATIC_PROPERTY(
575 "DEVICE_DIRECTION_180", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_180)),
576 DECLARE_NAPI_STATIC_PROPERTY(
577 "DEVICE_DIRECTION_270", NapiCallManagerUtils::ToInt32Value(env, DEVICE_DIRECTION_270)),
578 };
579 napi_value result = nullptr;
580 napi_define_class(env, "DeviceDirection", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
581 sizeof(desc) / sizeof(*desc), desc, &result);
582 napi_set_named_property(env, exports, "DeviceDirection", result);
583 return exports;
584 }
585
DeclareDialSceneEnum(napi_env env,napi_value exports)586 napi_value NapiCallManager::DeclareDialSceneEnum(napi_env env, napi_value exports)
587 {
588 napi_property_descriptor desc[] = {
589 DECLARE_NAPI_STATIC_PROPERTY(
590 "CALL_NORMAL", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialScene::CALL_NORMAL))),
591 DECLARE_NAPI_STATIC_PROPERTY("CALL_PRIVILEGED",
592 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialScene::CALL_PRIVILEGED))),
593 DECLARE_NAPI_STATIC_PROPERTY("CALL_EMERGENCY",
594 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialScene::CALL_EMERGENCY))),
595 };
596 napi_value result = nullptr;
597 napi_define_class(env, "DialScene", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
598 sizeof(desc) / sizeof(*desc), desc, &result);
599 napi_set_named_property(env, exports, "DialScene", result);
600 return exports;
601 }
602
DeclareCallTypeEnum(napi_env env,napi_value exports)603 napi_value NapiCallManager::DeclareCallTypeEnum(napi_env env, napi_value exports)
604 {
605 napi_property_descriptor desc[] = {
606 DECLARE_NAPI_STATIC_PROPERTY(
607 "TYPE_CS", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_CS))),
608 DECLARE_NAPI_STATIC_PROPERTY(
609 "TYPE_IMS", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_IMS))),
610 DECLARE_NAPI_STATIC_PROPERTY(
611 "TYPE_OTT", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_OTT))),
612 DECLARE_NAPI_STATIC_PROPERTY(
613 "TYPE_VOIP", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_VOIP))),
614 DECLARE_NAPI_STATIC_PROPERTY(
615 "TYPE_ERR_CALL", NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallType::TYPE_ERR_CALL))),
616 };
617 napi_value result = nullptr;
618 napi_define_class(env, "CallType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
619 sizeof(desc) / sizeof(*desc), desc, &result);
620 napi_set_named_property(env, exports, "CallType", result);
621 return exports;
622 }
623
DeclareDialTypeEnum(napi_env env,napi_value exports)624 napi_value NapiCallManager::DeclareDialTypeEnum(napi_env env, napi_value exports)
625 {
626 napi_property_descriptor desc[] = {
627 DECLARE_NAPI_STATIC_PROPERTY("DIAL_CARRIER_TYPE",
628 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialType::DIAL_CARRIER_TYPE))),
629 DECLARE_NAPI_STATIC_PROPERTY("DIAL_VOICE_MAIL_TYPE",
630 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialType::DIAL_VOICE_MAIL_TYPE))),
631 DECLARE_NAPI_STATIC_PROPERTY("DIAL_OTT_TYPE",
632 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DialType::DIAL_OTT_TYPE))),
633 };
634 napi_value result = nullptr;
635 napi_define_class(env, "DialType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
636 sizeof(desc) / sizeof(*desc), desc, &result);
637 napi_set_named_property(env, exports, "DialType", result);
638 return exports;
639 }
640
DeclareTelCallStateEnum(napi_env env,napi_value exports)641 napi_value NapiCallManager::DeclareTelCallStateEnum(napi_env env, napi_value exports)
642 {
643 napi_property_descriptor desc[] = {
644 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_IDLE",
645 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_IDLE))),
646 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_DISCONNECTING",
647 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_DISCONNECTING))),
648 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_DISCONNECTED",
649 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_DISCONNECTED))),
650 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_WAITING",
651 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_WAITING))),
652 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_INCOMING",
653 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_INCOMING))),
654 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_ALERTING",
655 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_ALERTING))),
656 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_DIALING",
657 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_DIALING))),
658 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_HOLDING",
659 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_HOLDING))),
660 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_ACTIVE",
661 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_ACTIVE))),
662 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATUS_ANSWERED",
663 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelCallState::CALL_STATUS_ANSWERED))),
664 };
665 napi_value result = nullptr;
666 napi_define_class(env, "TelCallState", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
667 sizeof(desc) / sizeof(*desc), desc, &result);
668 napi_set_named_property(env, exports, "TelCallState", result);
669 return exports;
670 }
671
DeclareConferenceStateEnum(napi_env env,napi_value exports)672 napi_value NapiCallManager::DeclareConferenceStateEnum(napi_env env, napi_value exports)
673 {
674 napi_property_descriptor desc[] = {
675 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_DISCONNECTED",
676 NapiCallManagerUtils::ToInt32Value(
677 env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_DISCONNECTED))),
678 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_DISCONNECTING",
679 NapiCallManagerUtils::ToInt32Value(
680 env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_DISCONNECTING))),
681 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_HOLDING",
682 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_HOLDING))),
683 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_ACTIVE",
684 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_ACTIVE))),
685 DECLARE_NAPI_STATIC_PROPERTY("TEL_CONFERENCE_IDLE",
686 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(TelConferenceState::TEL_CONFERENCE_IDLE))),
687 };
688 napi_value result = nullptr;
689 napi_define_class(env, "ConferenceState", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
690 sizeof(desc) / sizeof(*desc), desc, &result);
691 napi_set_named_property(env, exports, "ConferenceState", result);
692 return exports;
693 }
694
DeclareCallStateToAppEnum(napi_env env,napi_value exports)695 napi_value NapiCallManager::DeclareCallStateToAppEnum(napi_env env, napi_value exports)
696 {
697 napi_property_descriptor desc[] = {
698 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_UNKNOWN",
699 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_UNKNOWN))),
700 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_IDLE",
701 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_IDLE))),
702 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_RINGING",
703 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_RINGING))),
704 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_OFFHOOK",
705 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_OFFHOOK))),
706 DECLARE_NAPI_STATIC_PROPERTY("CALL_STATE_ANSWERED",
707 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallStateToApp::CALL_STATE_ANSWERED))),
708 };
709 napi_value result = nullptr;
710 napi_define_class(env, "CallState", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
711 sizeof(desc) / sizeof(*desc), desc, &result);
712 napi_set_named_property(env, exports, "CallState", result);
713 return exports;
714 }
715
DeclareCallEventEnumEx(napi_env env,napi_value exports)716 napi_value NapiCallManager::DeclareCallEventEnumEx(napi_env env, napi_value exports)
717 {
718 napi_property_descriptor desc[] = {
719 // CallAbilityEventId
720 DECLARE_NAPI_STATIC_PROPERTY("EVENT_DIAL_NO_CARRIER",
721 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallAbilityEventId::EVENT_DIAL_NO_CARRIER))),
722 DECLARE_NAPI_STATIC_PROPERTY("EVENT_INVALID_FDN_NUMBER",
723 NapiCallManagerUtils::ToInt32Value(
724 env, static_cast<int32_t>(CallAbilityEventId::EVENT_INVALID_FDN_NUMBER))),
725 DECLARE_NAPI_STATIC_PROPERTY("EVENT_HOLD_CALL_FAILED",
726 NapiCallManagerUtils::ToInt32Value(
727 env, static_cast<int32_t>(CallAbilityEventId::EVENT_HOLD_CALL_FAILED))),
728 DECLARE_NAPI_STATIC_PROPERTY("EVENT_SWAP_CALL_FAILED",
729 NapiCallManagerUtils::ToInt32Value(
730 env, static_cast<int32_t>(CallAbilityEventId::EVENT_SWAP_CALL_FAILED))),
731 DECLARE_NAPI_STATIC_PROPERTY("EVENT_COMBINE_CALL_FAILED",
732 NapiCallManagerUtils::ToInt32Value(
733 env, static_cast<int32_t>(CallAbilityEventId::EVENT_COMBINE_CALL_FAILED))),
734 DECLARE_NAPI_STATIC_PROPERTY("EVENT_SPLIT_CALL_FAILED",
735 NapiCallManagerUtils::ToInt32Value(
736 env, static_cast<int32_t>(CallAbilityEventId::EVENT_SPLIT_CALL_FAILED))),
737 };
738 napi_value result = nullptr;
739 napi_define_class(env, "CallAbilityEventId", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
740 sizeof(desc) / sizeof(*desc), desc, &result);
741 napi_set_named_property(env, exports, "CallAbilityEventId", result);
742 return exports;
743 }
744
DeclareCallSessionEventEnumEx(napi_env env,napi_value exports)745 napi_value NapiCallManager::DeclareCallSessionEventEnumEx(napi_env env, napi_value exports)
746 {
747 napi_property_descriptor desc[] = {
748 // CallSessionEventId
749 DECLARE_NAPI_STATIC_PROPERTY("EVENT_CONTROL_CAMERA_FAILURE",
750 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallSessionEventId::EVENT_CAMERA_FAILURE))),
751 DECLARE_NAPI_STATIC_PROPERTY("EVENT_CONTROL_CAMERA_READY",
752 NapiCallManagerUtils::ToInt32Value(
753 env, static_cast<int32_t>(CallSessionEventId::EVENT_CAMERA_READY))),
754 DECLARE_NAPI_STATIC_PROPERTY("EVENT_DISPLAY_SURFACE_RELEASED",
755 NapiCallManagerUtils::ToInt32Value(
756 env, static_cast<int32_t>(CallSessionEventId::EVENT_RELEASE_DISPLAY_SURFACE))),
757 DECLARE_NAPI_STATIC_PROPERTY("EVENT_PREVIEW_SURFACE_RELEASED",
758 NapiCallManagerUtils::ToInt32Value(
759 env, static_cast<int32_t>(CallSessionEventId::EVENT_RELEASE_PREVIEW_SURFACE))),
760 };
761 napi_value result = nullptr;
762 napi_define_class(env, "CallSessionEventId", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
763 sizeof(desc) / sizeof(*desc), desc, &result);
764 napi_set_named_property(env, exports, "CallSessionEventId", result);
765 return exports;
766 }
767
DeclareRestrictionTypeEnum(napi_env env,napi_value exports)768 napi_value NapiCallManager::DeclareRestrictionTypeEnum(napi_env env, napi_value exports)
769 {
770 napi_property_descriptor desc[] = {
771 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ALL_OUTGOING",
772 NapiCallManagerUtils::ToInt32Value(
773 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ALL_OUTGOING))),
774 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_INTERNATIONAL",
775 NapiCallManagerUtils::ToInt32Value(
776 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_INTERNATIONAL))),
777 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME",
778 NapiCallManagerUtils::ToInt32Value(
779 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME))),
780 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ALL_INCOMING",
781 NapiCallManagerUtils::ToInt32Value(
782 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING))),
783 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ROAMING_INCOMING",
784 NapiCallManagerUtils::ToInt32Value(
785 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ROAMING_INCOMING))),
786 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_ALL_CALLS",
787 NapiCallManagerUtils::ToInt32Value(
788 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_ALL_CALLS))),
789 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_OUTGOING_SERVICES",
790 NapiCallManagerUtils::ToInt32Value(
791 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_OUTGOING_SERVICES))),
792 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_TYPE_INCOMING_SERVICES",
793 NapiCallManagerUtils::ToInt32Value(
794 env, static_cast<int32_t>(CallRestrictionType::RESTRICTION_TYPE_INCOMING_SERVICES))),
795 };
796 napi_value result = nullptr;
797 napi_define_class(env, "CallRestrictionType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
798 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
799 napi_set_named_property(env, exports, "CallRestrictionType", result);
800 return exports;
801 }
802
DeclareRestrictionModeEnum(napi_env env,napi_value exports)803 napi_value NapiCallManager::DeclareRestrictionModeEnum(napi_env env, napi_value exports)
804 {
805 napi_property_descriptor desc[] = {
806 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_MODE_DEACTIVATION",
807 NapiCallManagerUtils::ToInt32Value(
808 env, static_cast<int32_t>(CallRestrictionMode::RESTRICTION_MODE_DEACTIVATION))),
809 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_MODE_ACTIVATION",
810 NapiCallManagerUtils::ToInt32Value(
811 env, static_cast<int32_t>(CallRestrictionMode::RESTRICTION_MODE_ACTIVATION))),
812 };
813 napi_value result = nullptr;
814 napi_define_class(env, "CallRestrictionMode", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
815 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
816 napi_set_named_property(env, exports, "CallRestrictionMode", result);
817 return exports;
818 }
819
DeclareRestrictionStatusEnum(napi_env env,napi_value exports)820 napi_value NapiCallManager::DeclareRestrictionStatusEnum(napi_env env, napi_value exports)
821 {
822 napi_property_descriptor desc[] = {
823 DECLARE_NAPI_STATIC_PROPERTY(
824 "RESTRICTION_DISABLE", NapiCallManagerUtils::ToInt32Value(env, RESTRICTION_DISABLE)),
825 DECLARE_NAPI_STATIC_PROPERTY("RESTRICTION_ENABLE", NapiCallManagerUtils::ToInt32Value(env, RESTRICTION_ENABLE)),
826 };
827 napi_value result = nullptr;
828 napi_define_class(env, "RestrictionStatus", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
829 sizeof(desc) / sizeof(*desc), desc, &result);
830 napi_set_named_property(env, exports, "RestrictionStatus", result);
831 return exports;
832 }
833
DeclareCallWaitingEnumEx(napi_env env,napi_value exports)834 napi_value NapiCallManager::DeclareCallWaitingEnumEx(napi_env env, napi_value exports)
835 {
836 napi_property_descriptor desc[] = {
837 DECLARE_NAPI_STATIC_PROPERTY(
838 "CALL_WAITING_DISABLE", NapiCallManagerUtils::ToInt32Value(env, CALL_WAITING_DISABLE)),
839 DECLARE_NAPI_STATIC_PROPERTY(
840 "CALL_WAITING_ENABLE", NapiCallManagerUtils::ToInt32Value(env, CALL_WAITING_ENABLE)),
841 };
842 napi_value result = nullptr;
843 napi_define_class(env, "CallWaitingStatus", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
844 sizeof(desc) / sizeof(*desc), desc, &result);
845 napi_set_named_property(env, exports, "CallWaitingStatus", result);
846 return exports;
847 }
848
DeclareTransferStatusEnum(napi_env env,napi_value exports)849 napi_value NapiCallManager::DeclareTransferStatusEnum(napi_env env, napi_value exports)
850 {
851 napi_property_descriptor desc[] = {
852 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_DISABLE", NapiCallManagerUtils::ToInt32Value(env, TRANSFER_DISABLE)),
853 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_ENABLE", NapiCallManagerUtils::ToInt32Value(env, TRANSFER_ENABLE)),
854 };
855 napi_value result = nullptr;
856 napi_define_class(env, "TransferStatus", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
857 sizeof(desc) / sizeof(*desc), desc, &result);
858 napi_set_named_property(env, exports, "TransferStatus", result);
859 return exports;
860 }
861
DeclareTransferTypeEnum(napi_env env,napi_value exports)862 napi_value NapiCallManager::DeclareTransferTypeEnum(napi_env env, napi_value exports)
863 {
864 napi_property_descriptor desc[] = {
865 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_NOT_REACHABLE",
866 NapiCallManagerUtils::ToInt32Value(
867 env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NOT_REACHABLE))),
868 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_NO_REPLY",
869 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NO_REPLY))),
870 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_BUSY",
871 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_BUSY))),
872 DECLARE_NAPI_STATIC_PROPERTY("TRANSFER_TYPE_UNCONDITIONAL",
873 NapiCallManagerUtils::ToInt32Value(
874 env, static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_UNCONDITIONAL))),
875 };
876 napi_value result = nullptr;
877 napi_define_class(env, "CallTransferType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor, nullptr,
878 sizeof(desc) / sizeof(*desc), desc, &result);
879 napi_set_named_property(env, exports, "CallTransferType", result);
880 return exports;
881 }
882
DeclareTransferSettingTypeEnum(napi_env env,napi_value exports)883 napi_value NapiCallManager::DeclareTransferSettingTypeEnum(napi_env env, napi_value exports)
884 {
885 napi_property_descriptor desc[] = {
886 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_ERASURE",
887 NapiCallManagerUtils::ToInt32Value(
888 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_ERASURE))),
889 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_REGISTRATION",
890 NapiCallManagerUtils::ToInt32Value(
891 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_REGISTRATION))),
892 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_DISABLE",
893 NapiCallManagerUtils::ToInt32Value(
894 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_DISABLE))),
895 DECLARE_NAPI_STATIC_PROPERTY("CALL_TRANSFER_ENABLE",
896 NapiCallManagerUtils::ToInt32Value(
897 env, static_cast<int32_t>(CallTransferSettingType::CALL_TRANSFER_ENABLE))),
898 };
899 napi_value result = nullptr;
900 napi_define_class(env, "CallTransferSettingType", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
901 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
902 napi_set_named_property(env, exports, "CallTransferSettingType", result);
903 return exports;
904 }
905
DeclareMmiCodeResultEnum(napi_env env,napi_value exports)906 napi_value NapiCallManager::DeclareMmiCodeResultEnum(napi_env env, napi_value exports)
907 {
908 napi_property_descriptor desc[] = {
909 DECLARE_NAPI_STATIC_PROPERTY("MMI_CODE_SUCCESS",
910 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(MmiCodeResult::MMI_CODE_SUCCESS))),
911 DECLARE_NAPI_STATIC_PROPERTY("MMI_CODE_FAILED",
912 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(MmiCodeResult::MMI_CODE_FAILED))),
913 };
914 napi_value result = nullptr;
915 napi_define_class(env, "MmiCodeResult", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
916 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
917 napi_set_named_property(env, exports, "MmiCodeResult", result);
918 return exports;
919 }
920
DeclareDisconnectedReasonEnum(napi_env env,napi_value exports)921 napi_value NapiCallManager::DeclareDisconnectedReasonEnum(napi_env env, napi_value exports)
922 {
923 napi_property_descriptor desc[] = {
924 DECLARE_NAPI_STATIC_PROPERTY("UNASSIGNED_NUMBER",
925 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::UNASSIGNED_NUMBER))),
926 DECLARE_NAPI_STATIC_PROPERTY("NO_ROUTE_TO_DESTINATION",
927 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NO_ROUTE_TO_DESTINATION))),
928 DECLARE_NAPI_STATIC_PROPERTY("CHANNEL_UNACCEPTABLE",
929 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::CHANNEL_UNACCEPTABLE))),
930 DECLARE_NAPI_STATIC_PROPERTY("OPERATOR_DETERMINED_BARRING",
931 NapiCallManagerUtils::ToInt32Value(env,
932 static_cast<int32_t>(DisconnectedReason::OPERATOR_DETERMINED_BARRING))),
933 DECLARE_NAPI_STATIC_PROPERTY("CALL_COMPLETED_ELSEWHERE",
934 NapiCallManagerUtils::ToInt32Value(env,
935 static_cast<int32_t>(DisconnectedReason::CALL_COMPLETED_ELSEWHERE))),
936 DECLARE_NAPI_STATIC_PROPERTY("NORMAL_CALL_CLEARING",
937 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NORMAL_CALL_CLEARING))),
938 DECLARE_NAPI_STATIC_PROPERTY("USER_BUSY",
939 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::USER_BUSY))),
940 DECLARE_NAPI_STATIC_PROPERTY("NO_USER_RESPONDING",
941 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NO_USER_RESPONDING))),
942 DECLARE_NAPI_STATIC_PROPERTY("USER_ALERTING_NO_ANSWER",
943 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::USER_ALERTING_NO_ANSWER))),
944 DECLARE_NAPI_STATIC_PROPERTY("CALL_REJECTED",
945 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::CALL_REJECTED))),
946 DECLARE_NAPI_STATIC_PROPERTY("NUMBER_CHANGED",
947 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NUMBER_CHANGED))),
948 DECLARE_NAPI_STATIC_PROPERTY("CALL_REJECTED_DUE_TO_FEATURE_AT_THE_DESTINATION",
949 NapiCallManagerUtils::ToInt32Value(env,
950 static_cast<int32_t>(DisconnectedReason::CALL_REJECTED_DUE_TO_FEATURE_AT_THE_DESTINATION))),
951 DECLARE_NAPI_STATIC_PROPERTY("FAILED_PRE_EMPTION",
952 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::FAILED_PRE_EMPTION))),
953 DECLARE_NAPI_STATIC_PROPERTY("NON_SELECTED_USER_CLEARING",
954 NapiCallManagerUtils::ToInt32Value(env,
955 static_cast<int32_t>(DisconnectedReason::NON_SELECTED_USER_CLEARING))),
956 DECLARE_NAPI_STATIC_PROPERTY("DESTINATION_OUT_OF_ORDER",
957 NapiCallManagerUtils::ToInt32Value(env,
958 static_cast<int32_t>(DisconnectedReason::DESTINATION_OUT_OF_ORDER))),
959 DECLARE_NAPI_STATIC_PROPERTY("INVALID_NUMBER_FORMAT",
960 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::INVALID_NUMBER_FORMAT))),
961 DECLARE_NAPI_STATIC_PROPERTY("FACILITY_REJECTED",
962 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::FACILITY_REJECTED))),
963 DECLARE_NAPI_STATIC_PROPERTY("RESPONSE_TO_STATUS_ENQUIRY",
964 NapiCallManagerUtils::ToInt32Value(env,
965 static_cast<int32_t>(DisconnectedReason::RESPONSE_TO_STATUS_ENQUIRY))),
966 DECLARE_NAPI_STATIC_PROPERTY("NORMAL_UNSPECIFIED",
967 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NORMAL_UNSPECIFIED))),
968 DECLARE_NAPI_STATIC_PROPERTY("NO_CIRCUIT_CHANNEL_AVAILABLE",
969 NapiCallManagerUtils::ToInt32Value(env,
970 static_cast<int32_t>(DisconnectedReason::NO_CIRCUIT_CHANNEL_AVAILABLE))),
971 DECLARE_NAPI_STATIC_PROPERTY("NETWORK_OUT_OF_ORDER",
972 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NETWORK_OUT_OF_ORDER))),
973 DECLARE_NAPI_STATIC_PROPERTY("TEMPORARY_FAILURE",
974 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::TEMPORARY_FAILURE))),
975 DECLARE_NAPI_STATIC_PROPERTY("SWITCHING_EQUIPMENT_CONGESTION",
976 NapiCallManagerUtils::ToInt32Value(env,
977 static_cast<int32_t>(DisconnectedReason::SWITCHING_EQUIPMENT_CONGESTION))),
978 DECLARE_NAPI_STATIC_PROPERTY("ACCESS_INFORMATION_DISCARDED",
979 NapiCallManagerUtils::ToInt32Value(env,
980 static_cast<int32_t>(DisconnectedReason::ACCESS_INFORMATION_DISCARDED))),
981 DECLARE_NAPI_STATIC_PROPERTY("REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE",
982 NapiCallManagerUtils::ToInt32Value(env,
983 static_cast<int32_t>(DisconnectedReason::REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE))),
984 DECLARE_NAPI_STATIC_PROPERTY("RESOURCES_UNAVAILABLE_UNSPECIFIED",
985 NapiCallManagerUtils::ToInt32Value(env,
986 static_cast<int32_t>(DisconnectedReason::RESOURCES_UNAVAILABLE_UNSPECIFIED))),
987 DECLARE_NAPI_STATIC_PROPERTY("QUALITY_OF_SERVICE_UNAVAILABLE",
988 NapiCallManagerUtils::ToInt32Value(env,
989 static_cast<int32_t>(DisconnectedReason::QUALITY_OF_SERVICE_UNAVAILABLE))),
990 DECLARE_NAPI_STATIC_PROPERTY("REQUESTED_FACILITY_NOT_SUBSCRIBED",
991 NapiCallManagerUtils::ToInt32Value(env,
992 static_cast<int32_t>(DisconnectedReason::REQUESTED_FACILITY_NOT_SUBSCRIBED))),
993 DECLARE_NAPI_STATIC_PROPERTY("INCOMING_CALLS_BARRED_WITHIN_THE_CUG",
994 NapiCallManagerUtils::ToInt32Value(env,
995 static_cast<int32_t>(DisconnectedReason::INCOMING_CALLS_BARRED_WITHIN_THE_CUG))),
996 DECLARE_NAPI_STATIC_PROPERTY("BEARER_CAPABILITY_NOT_AUTHORIZED",
997 NapiCallManagerUtils::ToInt32Value(env,
998 static_cast<int32_t>(DisconnectedReason::BEARER_CAPABILITY_NOT_AUTHORIZED))),
999 DECLARE_NAPI_STATIC_PROPERTY("BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE",
1000 NapiCallManagerUtils::ToInt32Value(env,
1001 static_cast<int32_t>(DisconnectedReason::BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE))),
1002 DECLARE_NAPI_STATIC_PROPERTY("SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED",
1003 NapiCallManagerUtils::ToInt32Value(env,
1004 static_cast<int32_t>(DisconnectedReason::SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED))),
1005 DECLARE_NAPI_STATIC_PROPERTY("BEARER_SERVICE_NOT_IMPLEMENTED",
1006 NapiCallManagerUtils::ToInt32Value(env,
1007 static_cast<int32_t>(DisconnectedReason::BEARER_SERVICE_NOT_IMPLEMENTED))),
1008 DECLARE_NAPI_STATIC_PROPERTY("ACM_EQUALTO_OR_GREATER_THAN_THE_MAXIMUM_VALUE",
1009 NapiCallManagerUtils::ToInt32Value(env,
1010 static_cast<int32_t>(DisconnectedReason::ACM_EQUALTO_OR_GREATE_THAN_ACMMAX))),
1011 DECLARE_NAPI_STATIC_PROPERTY("REQUESTED_FACILITY_NOT_IMPLEMENTED",
1012 NapiCallManagerUtils::ToInt32Value(env,
1013 static_cast<int32_t>(DisconnectedReason::REQUESTED_FACILITY_NOT_IMPLEMENTED))),
1014 DECLARE_NAPI_STATIC_PROPERTY("ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE",
1015 NapiCallManagerUtils::ToInt32Value(env,
1016 static_cast<int32_t>(DisconnectedReason::ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE))),
1017 DECLARE_NAPI_STATIC_PROPERTY("SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED",
1018 NapiCallManagerUtils::ToInt32Value(env,
1019 static_cast<int32_t>(DisconnectedReason::SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED))),
1020 DECLARE_NAPI_STATIC_PROPERTY("INVALID_TRANSACTION_IDENTIFIER_VALUE",
1021 NapiCallManagerUtils::ToInt32Value(env,
1022 static_cast<int32_t>(DisconnectedReason::INVALID_TRANSACTION_IDENTIFIER_VALUE))),
1023 DECLARE_NAPI_STATIC_PROPERTY("USER_NOT_MEMBER_OF_CUG",
1024 NapiCallManagerUtils::ToInt32Value(env,
1025 static_cast<int32_t>(DisconnectedReason::USER_NOT_MEMBER_OF_CUG))),
1026 DECLARE_NAPI_STATIC_PROPERTY("INCOMPATIBLE_DESTINATION",
1027 NapiCallManagerUtils::ToInt32Value(env,
1028 static_cast<int32_t>(DisconnectedReason::INCOMPATIBLE_DESTINATION))),
1029 DECLARE_NAPI_STATIC_PROPERTY("INVALID_TRANSIT_NETWORK_SELECTION",
1030 NapiCallManagerUtils::ToInt32Value(env,
1031 static_cast<int32_t>(DisconnectedReason::INVALID_TRANSIT_NETWORK_SELECTION))),
1032 DECLARE_NAPI_STATIC_PROPERTY("SEMANTICALLY_INCORRECT_MESSAGE",
1033 NapiCallManagerUtils::ToInt32Value(env,
1034 static_cast<int32_t>(DisconnectedReason::SEMANTICALLY_INCORRECT_MESSAGE))),
1035 DECLARE_NAPI_STATIC_PROPERTY("INVALID_MANDATORY_INFORMATION",
1036 NapiCallManagerUtils::ToInt32Value(env,
1037 static_cast<int32_t>(DisconnectedReason::INVALID_MANDATORY_INFORMATION))),
1038 DECLARE_NAPI_STATIC_PROPERTY("MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED",
1039 NapiCallManagerUtils::ToInt32Value(env,
1040 static_cast<int32_t>(DisconnectedReason::MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED))),
1041 DECLARE_NAPI_STATIC_PROPERTY("MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE",
1042 NapiCallManagerUtils::ToInt32Value(env,
1043 static_cast<int32_t>(DisconnectedReason::MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE))),
1044 DECLARE_NAPI_STATIC_PROPERTY("INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED",
1045 NapiCallManagerUtils::ToInt32Value(env,
1046 static_cast<int32_t>(DisconnectedReason::INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED))),
1047 DECLARE_NAPI_STATIC_PROPERTY("CONDITIONAL_IE_ERROR",
1048 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::CONDITIONAL_IE_ERROR))),
1049 DECLARE_NAPI_STATIC_PROPERTY("MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE",
1050 NapiCallManagerUtils::ToInt32Value(env,
1051 static_cast<int32_t>(DisconnectedReason::MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE))),
1052 DECLARE_NAPI_STATIC_PROPERTY("RECOVERY_ON_TIMER_EXPIRED",
1053 NapiCallManagerUtils::ToInt32Value(env,
1054 static_cast<int32_t>(DisconnectedReason::RECOVERY_ON_TIMER_EXPIRED))),
1055 DECLARE_NAPI_STATIC_PROPERTY("PROTOCOL_ERROR_UNSPECIFIED",
1056 NapiCallManagerUtils::ToInt32Value(env,
1057 static_cast<int32_t>(DisconnectedReason::PROTOCOL_ERROR_UNSPECIFIED))),
1058 DECLARE_NAPI_STATIC_PROPERTY("INTERWORKING_UNSPECIFIED",
1059 NapiCallManagerUtils::ToInt32Value(env,
1060 static_cast<int32_t>(DisconnectedReason::INTERWORKING_UNSPECIFIED))),
1061 DECLARE_NAPI_STATIC_PROPERTY("CALL_BARRED",
1062 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::CALL_BARRED))),
1063 DECLARE_NAPI_STATIC_PROPERTY("FDN_BLOCKED",
1064 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::FDN_BLOCKED))),
1065 DECLARE_NAPI_STATIC_PROPERTY("IMSI_UNKNOWN_IN_VLR",
1066 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::IMSI_UNKNOWN_IN_VLR))),
1067 DECLARE_NAPI_STATIC_PROPERTY("IMEI_NOT_ACCEPTED",
1068 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::IMEI_NOT_ACCEPTED))),
1069 DECLARE_NAPI_STATIC_PROPERTY("DIAL_MODIFIED_TO_USSD",
1070 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::DIAL_MODIFIED_TO_USSD))),
1071 DECLARE_NAPI_STATIC_PROPERTY("DIAL_MODIFIED_TO_SS",
1072 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::DIAL_MODIFIED_TO_SS))),
1073 DECLARE_NAPI_STATIC_PROPERTY("DIAL_MODIFIED_TO_DIAL",
1074 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::DIAL_MODIFIED_TO_DIAL))),
1075 DECLARE_NAPI_STATIC_PROPERTY("RADIO_OFF",
1076 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_OFF))),
1077 DECLARE_NAPI_STATIC_PROPERTY("OUT_OF_SERVICE",
1078 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::OUT_OF_SERVICE))),
1079 DECLARE_NAPI_STATIC_PROPERTY("NO_VALID_SIM",
1080 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NO_VALID_SIM))),
1081 DECLARE_NAPI_STATIC_PROPERTY("RADIO_INTERNAL_ERROR",
1082 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_INTERNAL_ERROR))),
1083 DECLARE_NAPI_STATIC_PROPERTY("NETWORK_RESP_TIMEOUT",
1084 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NETWORK_RESP_TIMEOUT))),
1085 DECLARE_NAPI_STATIC_PROPERTY("NETWORK_REJECT",
1086 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NETWORK_REJECT))),
1087 DECLARE_NAPI_STATIC_PROPERTY("RADIO_ACCESS_FAILURE",
1088 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_ACCESS_FAILURE))),
1089 DECLARE_NAPI_STATIC_PROPERTY("RADIO_LINK_FAILURE",
1090 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_LINK_FAILURE))),
1091 DECLARE_NAPI_STATIC_PROPERTY("RADIO_LINK_LOST",
1092 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_LINK_LOST))),
1093 DECLARE_NAPI_STATIC_PROPERTY("RADIO_UPLINK_FAILURE",
1094 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_UPLINK_FAILURE))),
1095 DECLARE_NAPI_STATIC_PROPERTY("RADIO_SETUP_FAILURE",
1096 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_SETUP_FAILURE))),
1097 DECLARE_NAPI_STATIC_PROPERTY("RADIO_RELEASE_NORMAL",
1098 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_RELEASE_NORMAL))),
1099 DECLARE_NAPI_STATIC_PROPERTY("RADIO_RELEASE_ABNORMAL",
1100 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::RADIO_RELEASE_ABNORMAL))),
1101 DECLARE_NAPI_STATIC_PROPERTY("ACCESS_CLASS_BLOCKED",
1102 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::ACCESS_CLASS_BLOCKED))),
1103 DECLARE_NAPI_STATIC_PROPERTY("NETWORK_DETACH",
1104 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::NETWORK_DETACH))),
1105 DECLARE_NAPI_STATIC_PROPERTY("INVALID_PARAMETER",
1106 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::INVALID_PARAMETER))),
1107 DECLARE_NAPI_STATIC_PROPERTY("SIM_NOT_EXIT",
1108 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::SIM_NOT_EXIT))),
1109 DECLARE_NAPI_STATIC_PROPERTY("SIM_PIN_NEED",
1110 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::SIM_PIN_NEED))),
1111 DECLARE_NAPI_STATIC_PROPERTY("CALL_NOT_ALLOW",
1112 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::CALL_NOT_ALLOW))),
1113 DECLARE_NAPI_STATIC_PROPERTY("SIM_INVALID",
1114 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::SIM_INVALID))),
1115 DECLARE_NAPI_STATIC_PROPERTY("UNKNOWN",
1116 NapiCallManagerUtils::ToInt32Value(env, static_cast<int32_t>(DisconnectedReason::FAILED_UNKNOWN))),
1117 };
1118 napi_value result = nullptr;
1119 napi_define_class(env, "DisconnectedReason", NAPI_AUTO_LENGTH, NapiCallManagerUtils::CreateEnumConstructor,
1120 nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
1121 napi_set_named_property(env, exports, "DisconnectedReason", result);
1122 return exports;
1123 }
1124
1125 /**
1126 * The call_manager is initialized.
1127 */
RegisterCallManagerFunc(napi_env env,napi_value exports)1128 napi_value NapiCallManager::RegisterCallManagerFunc(napi_env env, napi_value exports)
1129 {
1130 // Interface initialization
1131 DeclareCallBasisInterface(env, exports);
1132 DeclareCallConferenceInterface(env, exports);
1133 DeclareCallSupplementInterface(env, exports);
1134 DeclareCallExtendInterface(env, exports);
1135 DeclareCallMultimediaInterface(env, exports);
1136 // Enumeration class initialization
1137 DeclareCallMediaEnum(env, exports);
1138 DeclareCallDialEnum(env, exports);
1139 DeclareCallStateEnum(env, exports);
1140 DeclareCallEventEnum(env, exports);
1141 DeclareCallRestrictionEnum(env, exports);
1142 DeclareCallWaitingEnum(env, exports);
1143 DeclareCallTransferEnum(env, exports);
1144 DeclareCallImsInterface(env, exports);
1145 // Enumeration class extension initialization
1146 DeclareVoNRStateEnum(env, exports);
1147 DeclareAudioDeviceEnum(env, exports);
1148 DeclareVideoStateTypeEnum(env, exports);
1149 DeclareVideoRequestResultEnum(env, exports);
1150 DeclareImsCallModeEnum(env, exports);
1151 DeclareDeviceDirectionEnum(env, exports);
1152 DeclareDialSceneEnum(env, exports);
1153 DeclareCallTypeEnum(env, exports);
1154 DeclareDialTypeEnum(env, exports);
1155 DeclareTelCallStateEnum(env, exports);
1156 DeclareConferenceStateEnum(env, exports);
1157 DeclareCallStateToAppEnum(env, exports);
1158 DeclareCallEventEnumEx(env, exports);
1159 DeclareCallSessionEventEnumEx(env, exports);
1160 DeclareRestrictionTypeEnum(env, exports);
1161 DeclareRestrictionModeEnum(env, exports);
1162 DeclareRestrictionStatusEnum(env, exports);
1163 DeclareCallWaitingEnumEx(env, exports);
1164 DeclareTransferStatusEnum(env, exports);
1165 DeclareTransferTypeEnum(env, exports);
1166 DeclareTransferSettingTypeEnum(env, exports);
1167 DeclareMmiCodeResultEnum(env, exports);
1168 DeclareDisconnectedReasonEnum(env, exports);
1169 Init();
1170 RegisterCallBack();
1171 return exports;
1172 }
1173
Dial(napi_env env,napi_callback_info info)1174 napi_value NapiCallManager::Dial(napi_env env, napi_callback_info info)
1175 {
1176 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
1177 NAPI_ASSERT(env, argc <= VALUE_MAXIMUM_LIMIT, "parameter error!");
1178 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_string);
1179 NAPI_ASSERT(env, matchFlag, "Dial type error, should be string type");
1180 auto asyncContext = (std::make_unique<DialAsyncContext>());
1181 if (asyncContext == nullptr) {
1182 std::string errorCode = std::to_string(napi_generic_failure);
1183 std::string errorMessage = "Dial error at baseContext is nullptr";
1184 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
1185 return nullptr;
1186 }
1187 napi_get_value_string_utf8(
1188 env, argv[ARRAY_INDEX_FIRST], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
1189 if (argc == TWO_VALUE_LIMIT) {
1190 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_undefined) ||
1191 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_null)) {
1192 TELEPHONY_LOGI("undefined or null param is detected, second param is ignored.");
1193 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
1194 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1195 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_object)) {
1196 GetDialInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1197 }
1198 } else if (argc == VALUE_MAXIMUM_LIMIT &&
1199 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_object)) {
1200 GetDialInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1201 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1202 }
1203 return HandleAsyncWork(env, asyncContext.release(), "Dial", NativeDial, NativeDialCallBack);
1204 }
1205
MatchStringAndVariableObjectParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1206 bool NapiCallManager::MatchStringAndVariableObjectParameters(
1207 napi_env env, const napi_value parameters[], const size_t parameterCount)
1208 {
1209 TELEPHONY_LOGD("Telephony_CallManager MatchStringAndVariableObjectParameters %{public}zu", parameterCount);
1210 switch (parameterCount) {
1211 case ONLY_ONE_VALUE:
1212 return NapiUtil::MatchParameters(env, parameters, { napi_string });
1213 case TWO_VALUE_LIMIT:
1214 return NapiUtil::MatchParameters(env, parameters, { napi_string, napi_function }) ||
1215 NapiUtil::MatchParameters(env, parameters, { napi_string, napi_null}) ||
1216 NapiUtil::MatchParameters(env, parameters, { napi_string, napi_undefined }) ||
1217 NapiUtil::MatchParameters(env, parameters, { napi_string, napi_object });
1218 case VALUE_MAXIMUM_LIMIT:
1219 return NapiUtil::MatchParameters(env, parameters, { napi_string, napi_object, napi_function });
1220 default:
1221 return false;
1222 }
1223 }
1224
DialCall(napi_env env,napi_callback_info info)1225 napi_value NapiCallManager::DialCall(napi_env env, napi_callback_info info)
1226 {
1227 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
1228 if (!MatchStringAndVariableObjectParameters(env, argv, argc)) {
1229 TELEPHONY_LOGE("MatchStringAndVariableObjectParameters failed.");
1230 NapiUtil::ThrowParameterError(env);
1231 return nullptr;
1232 }
1233 auto asyncContext = (std::make_unique<DialAsyncContext>());
1234 if (asyncContext == nullptr) {
1235 NapiUtil::ThrowParameterError(env);
1236 TELEPHONY_LOGE("asyncContext is nullptr.");
1237 return nullptr;
1238 }
1239 napi_get_value_string_utf8(
1240 env, argv[ARRAY_INDEX_FIRST], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
1241 if (argc == TWO_VALUE_LIMIT) {
1242 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
1243 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1244 } else {
1245 GetDialInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1246 }
1247 } else if (argc == VALUE_MAXIMUM_LIMIT &&
1248 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_object) &&
1249 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_THIRD], napi_function)) {
1250 GetDialInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1251 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1252 }
1253 return HandleAsyncWork(env, asyncContext.release(), "DialCall", NativeDialCall, NativeVoidCallBackWithErrorCode);
1254 }
1255
MakeCall(napi_env env,napi_callback_info info)1256 napi_value NapiCallManager::MakeCall(napi_env env, napi_callback_info info)
1257 {
1258 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
1259 if (!MatchOneStringParameter(env, argv, argc)) {
1260 TELEPHONY_LOGE("NapiCallManager::MakeCall MatchOneStringParameter failed.");
1261 NapiUtil::ThrowParameterError(env);
1262 return nullptr;
1263 }
1264 auto asyncContext = std::make_unique<AsyncContext>();
1265 if (asyncContext == nullptr) {
1266 NapiUtil::ThrowParameterError(env);
1267 return nullptr;
1268 }
1269 napi_get_value_string_utf8(
1270 env, argv[ARRAY_INDEX_FIRST], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
1271 if (argc == TWO_VALUE_LIMIT) {
1272 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1273 }
1274 return HandleAsyncWork(env, asyncContext.release(), "MakeCall", NativeMakeCall, NativeVoidCallBackWithErrorCode);
1275 }
1276
AnswerCall(napi_env env,napi_callback_info info)1277 napi_value NapiCallManager::AnswerCall(napi_env env, napi_callback_info info)
1278 {
1279 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1280 if (!MatchOneOptionalNumberParameter(env, argv, argc)) {
1281 TELEPHONY_LOGE("MatchOneOptionalNumberParameter failed.");
1282 NapiUtil::ThrowParameterError(env);
1283 return nullptr;
1284 }
1285 auto answerAsyncContext = std::make_unique<AnswerAsyncContext>();
1286 if (answerAsyncContext == nullptr) {
1287 TELEPHONY_LOGE("answerAsyncContext is nullptr.");
1288 NapiUtil::ThrowParameterError(env);
1289 return nullptr;
1290 }
1291
1292 if (argc == ZERO_VALUE) {
1293 TELEPHONY_LOGI("no param input");
1294 } else if (argc == ONLY_ONE_VALUE) {
1295 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_undefined) ||
1296 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_null)) {
1297 TELEPHONY_LOGI("undefined or null param is detected, treating as no param input.");
1298 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_function)) {
1299 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(answerAsyncContext->callbackRef));
1300 } else {
1301 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &answerAsyncContext->callId);
1302 }
1303 } else if (argc == TWO_VALUE_LIMIT) {
1304 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
1305 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &answerAsyncContext->callId);
1306 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(answerAsyncContext->callbackRef));
1307 } else {
1308 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &answerAsyncContext->videoState);
1309 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &answerAsyncContext->callId);
1310 }
1311 }
1312
1313 return HandleAsyncWork(
1314 env, answerAsyncContext.release(), "AnswerCall", NativeAnswerCall, NativeVoidCallBackWithErrorCode);
1315 }
1316
AnswerVideoCall(napi_env env,napi_callback_info info)1317 napi_value NapiCallManager::AnswerVideoCall(napi_env env, napi_callback_info info)
1318 {
1319 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
1320 if (!MatchAnswerCallParameter(env, argv, argc)) {
1321 TELEPHONY_LOGE("MatchOneOptionalNumberParameter failed.");
1322 NapiUtil::ThrowParameterError(env);
1323 return nullptr;
1324 }
1325 auto answerAsyncContext = std::make_unique<AnswerAsyncContext>();
1326 if (answerAsyncContext == nullptr) {
1327 TELEPHONY_LOGE("answerAsyncContext is nullptr.");
1328 NapiUtil::ThrowParameterError(env);
1329 return nullptr;
1330 }
1331 if (argc == ZERO_VALUE) {
1332 TELEPHONY_LOGI("no param input");
1333 } else if (argc == ONLY_ONE_VALUE) {
1334 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &answerAsyncContext->videoState);
1335 } else if (argc == TWO_VALUE_LIMIT) {
1336 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
1337 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &answerAsyncContext->videoState);
1338 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(answerAsyncContext->callbackRef));
1339 } else {
1340 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &answerAsyncContext->videoState);
1341 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &answerAsyncContext->callId);
1342 }
1343 }
1344
1345 return HandleAsyncWork(
1346 env, answerAsyncContext.release(), "AnswerCall", NativeAnswerCall, NativeVoidCallBackWithErrorCode);
1347 }
1348
RejectCall(napi_env env,napi_callback_info info)1349 napi_value NapiCallManager::RejectCall(napi_env env, napi_callback_info info)
1350 {
1351 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
1352 if (!MatchRejectCallParameters(env, argv, argc)) {
1353 TELEPHONY_LOGE("MatchRejectCallParameters failed.");
1354 NapiUtil::ThrowParameterError(env);
1355 return nullptr;
1356 }
1357 auto asyncContext = std::make_unique<RejectAsyncContext>();
1358 if (asyncContext == nullptr) {
1359 TELEPHONY_LOGE("asyncContext is nullptr.");
1360 NapiUtil::ThrowParameterError(env);
1361 return nullptr;
1362 }
1363 asyncContext->isSendSms = false;
1364 if (argc == ZERO_VALUE) {
1365 TELEPHONY_LOGI("no param input.");
1366 } else if (argc == ONLY_ONE_VALUE) {
1367 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_undefined)) {
1368 TELEPHONY_LOGI("undefined or null param is detected, treating as no param input.");
1369 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_function)) {
1370 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1371 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number)) {
1372 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1373 } else {
1374 GetSmsInfo(env, argv[ARRAY_INDEX_FIRST], *asyncContext);
1375 }
1376 } else if (argc == TWO_VALUE_LIMIT) {
1377 if (MatchRejectCallTwoIllegalParameters(env, argv)) {
1378 TELEPHONY_LOGI("undefined or null params are detected, treating as no param input.");
1379 } else if (MatchRejectCallFirstIllegalParameters(env, argv)) {
1380 TELEPHONY_LOGI("undefined or null param is detected, first param is ignored.");
1381 GetSmsInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1382 } else if (MatchRejectCallSecondIllegalParameters(env, argv)) {
1383 TELEPHONY_LOGI("undefined or null param is detected, second param is ignored.");
1384 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1385 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_object) &&
1386 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
1387 GetSmsInfo(env, argv[ARRAY_INDEX_FIRST], *asyncContext);
1388 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1389 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number) &&
1390 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
1391 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1392 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1393 } else {
1394 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1395 GetSmsInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1396 }
1397 } else {
1398 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1399 GetSmsInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1400 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1401 }
1402
1403 return HandleAsyncWork(
1404 env, asyncContext.release(), "RejectCall", NativeRejectCall, NativeVoidCallBackWithErrorCode);
1405 }
1406
HangUpCall(napi_env env,napi_callback_info info)1407 napi_value NapiCallManager::HangUpCall(napi_env env, napi_callback_info info)
1408 {
1409 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1410 if (!MatchOneOptionalNumberParameter(env, argv, argc)) {
1411 TELEPHONY_LOGE("MatchOneOptionalNumberParameter failed.");
1412 NapiUtil::ThrowParameterError(env);
1413 return nullptr;
1414 }
1415 auto asyncContext = std::make_unique<AsyncContext>();
1416 if (asyncContext == nullptr) {
1417 TELEPHONY_LOGE("asyncContext is nullptr.");
1418 NapiUtil::ThrowParameterError(env);
1419 return nullptr;
1420 }
1421
1422 if (argc == ZERO_VALUE) {
1423 TELEPHONY_LOGI("no param input");
1424 } else if (argc == ONLY_ONE_VALUE) {
1425 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_undefined) ||
1426 NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_null)) {
1427 TELEPHONY_LOGI("undefined or null param is detected, treating as no param input.");
1428 } else if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_function)) {
1429 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1430 } else {
1431 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1432 }
1433 } else {
1434 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1435 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1436 }
1437
1438 return HandleAsyncWork(
1439 env, asyncContext.release(), "HangUpCall", NativeHangUpCall, NativeVoidCallBackWithErrorCode);
1440 }
1441
HoldCall(napi_env env,napi_callback_info info)1442 napi_value NapiCallManager::HoldCall(napi_env env, napi_callback_info info)
1443 {
1444 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1445 if (!MatchOneNumberParameter(env, argv, argc)) {
1446 TELEPHONY_LOGE("NapiCallManager::HoldCall MatchOneNumberParameter failed.");
1447 NapiUtil::ThrowParameterError(env);
1448 return nullptr;
1449 }
1450 auto asyncContext = std::make_unique<AsyncContext>();
1451 if (asyncContext == nullptr) {
1452 TELEPHONY_LOGE("NapiCallManager::HoldCall asyncContext is nullptr.");
1453 NapiUtil::ThrowParameterError(env);
1454 return nullptr;
1455 }
1456 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1457 if (argc == TWO_VALUE_LIMIT) {
1458 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1459 }
1460 return HandleAsyncWork(env, asyncContext.release(), "HoldCall", NativeHoldCall, NativeVoidCallBackWithErrorCode);
1461 }
1462
UnHoldCall(napi_env env,napi_callback_info info)1463 napi_value NapiCallManager::UnHoldCall(napi_env env, napi_callback_info info)
1464 {
1465 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1466 if (!MatchOneNumberParameter(env, argv, argc)) {
1467 TELEPHONY_LOGE("NapiCallManager::UnHoldCall MatchOneNumberParameter failed.");
1468 NapiUtil::ThrowParameterError(env);
1469 return nullptr;
1470 }
1471 auto asyncContext = std::make_unique<AsyncContext>();
1472 if (asyncContext == nullptr) {
1473 TELEPHONY_LOGE("NapiCallManager::UnHoldCall asyncContext is nullptr.");
1474 NapiUtil::ThrowParameterError(env);
1475 return nullptr;
1476 }
1477 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1478 if (argc == TWO_VALUE_LIMIT) {
1479 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1480 }
1481 return HandleAsyncWork(
1482 env, asyncContext.release(), "UnHoldCall", NativeUnHoldCall, NativeVoidCallBackWithErrorCode);
1483 }
1484
SwitchCall(napi_env env,napi_callback_info info)1485 napi_value NapiCallManager::SwitchCall(napi_env env, napi_callback_info info)
1486 {
1487 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1488 if (!MatchOneNumberParameter(env, argv, argc)) {
1489 TELEPHONY_LOGE("NapiCallManager::SwitchCall MatchOneNumberParameter failed.");
1490 NapiUtil::ThrowParameterError(env);
1491 return nullptr;
1492 }
1493 auto asyncContext = std::make_unique<AsyncContext>();
1494 if (asyncContext == nullptr) {
1495 TELEPHONY_LOGE("NapiCallManager::SwitchCall asyncContext is nullptr.");
1496 NapiUtil::ThrowParameterError(env);
1497 return nullptr;
1498 }
1499 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1500 if (argc == TWO_VALUE_LIMIT) {
1501 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1502 }
1503
1504 return HandleAsyncWork(
1505 env, asyncContext.release(), "SwitchCall", NativeSwitchCall, NativeVoidCallBackWithErrorCode);
1506 }
1507
CombineConference(napi_env env,napi_callback_info info)1508 napi_value NapiCallManager::CombineConference(napi_env env, napi_callback_info info)
1509 {
1510 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1511 if (!MatchOneNumberParameter(env, argv, argc)) {
1512 TELEPHONY_LOGE("NapiCallManager::CombineConference MatchOneNumberParameter failed.");
1513 NapiUtil::ThrowParameterError(env);
1514 return nullptr;
1515 }
1516 auto asyncContext = std::make_unique<AsyncContext>();
1517 if (asyncContext == nullptr) {
1518 TELEPHONY_LOGE("NapiCallManager::CombineConference asyncContext is nullptr.");
1519 NapiUtil::ThrowParameterError(env);
1520 return nullptr;
1521 }
1522 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1523 if (argc == TWO_VALUE_LIMIT) {
1524 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1525 }
1526
1527 return HandleAsyncWork(
1528 env, asyncContext.release(), "CombineConference", NativeCombineConference, NativeVoidCallBackWithErrorCode);
1529 }
1530
SeparateConference(napi_env env,napi_callback_info info)1531 napi_value NapiCallManager::SeparateConference(napi_env env, napi_callback_info info)
1532 {
1533 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1534 if (!MatchOneNumberParameter(env, argv, argc)) {
1535 TELEPHONY_LOGE("NapiCallManager::SeparateConference MatchOneNumberParameter failed.");
1536 NapiUtil::ThrowParameterError(env);
1537 return nullptr;
1538 }
1539 auto asyncContext = std::make_unique<AsyncContext>();
1540 if (asyncContext == nullptr) {
1541 TELEPHONY_LOGE("NapiCallManager::SeparateConference asyncContext is nullptr.");
1542 NapiUtil::ThrowParameterError(env);
1543 return nullptr;
1544 }
1545 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1546 if (argc == TWO_VALUE_LIMIT) {
1547 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1548 }
1549 return HandleAsyncWork(
1550 env, asyncContext.release(), "SeparateConference", NativeSeparateConference, NativeVoidCallBackWithErrorCode);
1551 }
1552
KickOutFromConference(napi_env env,napi_callback_info info)1553 napi_value NapiCallManager::KickOutFromConference(napi_env env, napi_callback_info info)
1554 {
1555 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1556 if (!MatchOneNumberParameter(env, argv, argc)) {
1557 TELEPHONY_LOGE("NapiCallManager::KickoutFromConference MatchOneNumberParameter failed.");
1558 NapiUtil::ThrowParameterError(env);
1559 return nullptr;
1560 }
1561 auto asyncContext = std::make_unique<AsyncContext>();
1562 if (asyncContext == nullptr) {
1563 TELEPHONY_LOGE("NapiCallManager::KickoutFromConference asyncContext is nullptr.");
1564 NapiUtil::ThrowParameterError(env);
1565 return nullptr;
1566 }
1567 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1568 if (argc == TWO_VALUE_LIMIT) {
1569 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1570 }
1571 return HandleAsyncWork(env, asyncContext.release(), "KickoutFromConference", NativeKickOutFromConference,
1572 NativeVoidCallBackWithErrorCode);
1573 }
1574
GetMainCallId(napi_env env,napi_callback_info info)1575 napi_value NapiCallManager::GetMainCallId(napi_env env, napi_callback_info info)
1576 {
1577 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1578 if (!MatchOneNumberParameter(env, argv, argc)) {
1579 TELEPHONY_LOGE("NapiCallManager::GetMainCallId MatchOneNumberParameter failed.");
1580 NapiUtil::ThrowParameterError(env);
1581 return nullptr;
1582 }
1583 auto asyncContext = std::make_unique<IntResultAsyncContext>();
1584 if (asyncContext == nullptr) {
1585 TELEPHONY_LOGE("NapiCallManager::GetMainCallId asyncContext is nullptr.");
1586 NapiUtil::ThrowParameterError(env);
1587 return nullptr;
1588 }
1589 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1590 if (argc == TWO_VALUE_LIMIT) {
1591 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1592 }
1593 return HandleAsyncWork(
1594 env, asyncContext.release(), "GetMainCallId", NativeGetMainCallId, NativeGetMainCallIdCallBack);
1595 }
1596
GetSubCallIdList(napi_env env,napi_callback_info info)1597 napi_value NapiCallManager::GetSubCallIdList(napi_env env, napi_callback_info info)
1598 {
1599 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1600 if (!MatchOneNumberParameter(env, argv, argc)) {
1601 TELEPHONY_LOGE("NapiCallManager::GetSubCallIdList MatchOneNumberParameter failed.");
1602 NapiUtil::ThrowParameterError(env);
1603 return nullptr;
1604 }
1605 auto asyncContext = std::make_unique<ListAsyncContext>();
1606 if (asyncContext == nullptr) {
1607 TELEPHONY_LOGE("NapiCallManager::GetSubCallIdList asyncContext is nullptr.");
1608 NapiUtil::ThrowParameterError(env);
1609 return nullptr;
1610 }
1611 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1612 if (argc == TWO_VALUE_LIMIT) {
1613 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1614 }
1615 return HandleAsyncWork(env, asyncContext.release(), "GetSubCallIdList", NativeGetSubCallIdList, NativeListCallBack);
1616 }
1617
GetCallIdListForConference(napi_env env,napi_callback_info info)1618 napi_value NapiCallManager::GetCallIdListForConference(napi_env env, napi_callback_info info)
1619 {
1620 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1621 if (!MatchOneNumberParameter(env, argv, argc)) {
1622 TELEPHONY_LOGE("NapiCallManager::GetCallIdListForConference MatchOneNumberParameter failed.");
1623 NapiUtil::ThrowParameterError(env);
1624 return nullptr;
1625 }
1626 auto asyncContext = std::make_unique<ListAsyncContext>();
1627 if (asyncContext == nullptr) {
1628 TELEPHONY_LOGE("NapiCallManager::GetCallIdListForConference asyncContext is nullptr.");
1629 NapiUtil::ThrowParameterError(env);
1630 return nullptr;
1631 }
1632 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
1633 if (argc == TWO_VALUE_LIMIT) {
1634 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1635 }
1636 return HandleAsyncWork(env, asyncContext.release(), "GetCallIdListForConference", NativeGetCallIdListForConference,
1637 NativeListCallBack);
1638 }
1639
MatchEmptyParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1640 bool NapiCallManager::MatchEmptyParameter(napi_env env, const napi_value parameters[], const size_t parameterCount)
1641 {
1642 TELEPHONY_LOGI("Telephony_CallManager MatchEmptyParameter %{public}zu", parameterCount);
1643 switch (parameterCount) {
1644 case ZERO_VALUE:
1645 return true;
1646 case ONLY_ONE_VALUE:
1647 return NapiUtil::MatchParameters(env, parameters, { napi_function });
1648 default:
1649 return false;
1650 }
1651 }
1652
MatchOneOptionalNumberParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1653 bool NapiCallManager::MatchOneOptionalNumberParameter(
1654 napi_env env, const napi_value parameters[], const size_t parameterCount)
1655 {
1656 TELEPHONY_LOGI("Telephony_CallManager MatchAnswerParameters %{public}zu", parameterCount);
1657 switch (parameterCount) {
1658 case ZERO_VALUE:
1659 return true;
1660 case ONLY_ONE_VALUE:
1661 return NapiUtil::MatchParameters(env, parameters, { napi_number }) ||
1662 NapiUtil::MatchParameters(env, parameters, { napi_function }) ||
1663 NapiUtil::MatchParameters(env, parameters, { napi_null }) ||
1664 NapiUtil::MatchParameters(env, parameters, { napi_undefined });
1665 case TWO_VALUE_LIMIT:
1666 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_number }) ||
1667 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_function });
1668 default:
1669 return false;
1670 }
1671 }
1672
MatchAnswerCallParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1673 bool NapiCallManager::MatchAnswerCallParameter(
1674 napi_env env, const napi_value parameters[], const size_t parameterCount)
1675 {
1676 TELEPHONY_LOGI("Telephony_CallManager MatchAnswerParameters %{public}zu", parameterCount);
1677 switch (parameterCount) {
1678 case ZERO_VALUE:
1679 return true;
1680 case ONLY_ONE_VALUE:
1681 return NapiUtil::MatchParameters(env, parameters, { napi_number });
1682 case TWO_VALUE_LIMIT:
1683 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_number }) ||
1684 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_function});
1685 case THREE_VALUE_MAXIMUM_LIMIT:
1686 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_number, napi_function });
1687 default:
1688 return false;
1689 }
1690 }
1691
MatchOneStringParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1692 bool NapiCallManager::MatchOneStringParameter(napi_env env, const napi_value parameters[], const size_t parameterCount)
1693 {
1694 TELEPHONY_LOGI("Telephony_CallManager MatchOneNumberParameter %{public}zu", parameterCount);
1695 switch (parameterCount) {
1696 case ONLY_ONE_VALUE:
1697 return NapiUtil::MatchParameters(env, parameters, { napi_string });
1698 case TWO_VALUE_LIMIT:
1699 return NapiUtil::MatchParameters(env, parameters, { napi_string, napi_function });
1700 default:
1701 return false;
1702 }
1703 }
1704
MatchObserverOffParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1705 bool NapiCallManager::MatchObserverOffParameter(
1706 napi_env env, const napi_value parameters[], const size_t parameterCount)
1707 {
1708 TELEPHONY_LOGI("parameter count: %{public}zu", parameterCount);
1709 switch (parameterCount) {
1710 case ONLY_ONE_VALUE:
1711 return NapiUtil::MatchParameters(env, parameters, { napi_string });
1712 case TWO_VALUE_LIMIT:
1713 return NapiUtil::MatchParameters(env, parameters, { napi_string, napi_function }) ||
1714 NapiUtil::MatchParameters(env, parameters, { napi_string, napi_null }) ||
1715 NapiUtil::MatchParameters(env, parameters, { napi_string, napi_undefined });
1716 default:
1717 return false;
1718 }
1719 }
1720
MatchOneNumberParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1721 bool NapiCallManager::MatchOneNumberParameter(napi_env env, const napi_value parameters[], const size_t parameterCount)
1722 {
1723 TELEPHONY_LOGI("Telephony_CallManager MatchOneNumberParameter %{public}zu", parameterCount);
1724 switch (parameterCount) {
1725 case ONLY_ONE_VALUE:
1726 return NapiUtil::MatchParameters(env, parameters, { napi_number });
1727 case TWO_VALUE_LIMIT:
1728 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_function });
1729 default:
1730 return false;
1731 }
1732 }
1733
MatchTwoNumberParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1734 bool NapiCallManager::MatchTwoNumberParameters(napi_env env, const napi_value parameters[], const size_t parameterCount)
1735 {
1736 TELEPHONY_LOGI("Telephony_CallManager MatchTwoNumberParameters %{public}zu", parameterCount);
1737 switch (parameterCount) {
1738 case TWO_VALUE_LIMIT:
1739 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_number });
1740 case THREE_VALUE_MAXIMUM_LIMIT:
1741 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_number, napi_function });
1742 default:
1743 return false;
1744 }
1745 }
1746
MatchTwoStringParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1747 bool NapiCallManager::MatchTwoStringParameter(napi_env env, const napi_value parameters[], const size_t parameterCount)
1748 {
1749 TELEPHONY_LOGI("Telephony_CallManager MatchTwoStringParameter %{public}zu", parameterCount);
1750 switch (parameterCount) {
1751 case TWO_VALUE_LIMIT:
1752 return NapiUtil::MatchParameters(env, parameters, { napi_string, napi_string });
1753 case THREE_VALUE_MAXIMUM_LIMIT:
1754 return NapiUtil::MatchParameters(env, parameters, { napi_string, napi_string, napi_function });
1755 default:
1756 return false;
1757 }
1758 }
1759
MatchNumberAndBoolParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1760 bool NapiCallManager::MatchNumberAndBoolParameters(
1761 napi_env env, const napi_value parameters[], const size_t parameterCount)
1762 {
1763 TELEPHONY_LOGI("Telephony_CallManager MatchNumberAndBoolParameters %{public}zu", parameterCount);
1764 switch (parameterCount) {
1765 case TWO_VALUE_LIMIT:
1766 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_boolean });
1767 case THREE_VALUE_MAXIMUM_LIMIT:
1768 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_boolean, napi_function });
1769 default:
1770 return false;
1771 }
1772 }
1773
MatchNumberAndStringParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1774 bool NapiCallManager::MatchNumberAndStringParameters(
1775 napi_env env, const napi_value parameters[], const size_t parameterCount)
1776 {
1777 TELEPHONY_LOGI("Telephony_CallManager MatchNumberAndBoolParameters %{public}zu", parameterCount);
1778 switch (parameterCount) {
1779 case TWO_VALUE_LIMIT:
1780 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_string });
1781 case THREE_VALUE_MAXIMUM_LIMIT:
1782 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_string, napi_function });
1783 default:
1784 return false;
1785 }
1786 }
1787
MatchAudioDeviceParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1788 bool NapiCallManager::MatchAudioDeviceParameters(
1789 napi_env env, const napi_value parameters[], const size_t parameterCount)
1790 {
1791 TELEPHONY_LOGI("Telephony_CallManager MatchNumberAndBoolParameters %{public}zu", parameterCount);
1792 switch (parameterCount) {
1793 case ONLY_ONE_VALUE:
1794 return NapiUtil::MatchParameters(env, parameters, { napi_object });
1795 case TWO_VALUE_LIMIT:
1796 return NapiUtil::MatchParameters(env, parameters, { napi_object, napi_function });
1797 default:
1798 return false;
1799 }
1800 }
1801
MatchRejectCallParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1802 bool NapiCallManager::MatchRejectCallParameters(
1803 napi_env env, const napi_value parameters[], const size_t parameterCount)
1804 {
1805 TELEPHONY_LOGI("Telephony_CallManager MatchNumberAndBoolParameters %{public}zu", parameterCount);
1806 switch (parameterCount) {
1807 case ZERO_VALUE:
1808 return true;
1809 case ONLY_ONE_VALUE:
1810 return NapiUtil::MatchParameters(env, parameters, { napi_number }) ||
1811 NapiUtil::MatchParameters(env, parameters, { napi_object }) ||
1812 NapiUtil::MatchParameters(env, parameters, { napi_function }) ||
1813 NapiUtil::MatchParameters(env, parameters, { napi_null }) ||
1814 NapiUtil::MatchParameters(env, parameters, { napi_undefined });
1815 case TWO_VALUE_LIMIT:
1816 return NapiUtil::MatchParameters(env, parameters, { napi_object, napi_function }) ||
1817 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_function }) ||
1818 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_object }) ||
1819 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_null }) ||
1820 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_undefined }) ||
1821 NapiUtil::MatchParameters(env, parameters, { napi_null, napi_object }) ||
1822 NapiUtil::MatchParameters(env, parameters, { napi_undefined, napi_object }) ||
1823 NapiUtil::MatchParameters(env, parameters, { napi_undefined, napi_undefined }) ||
1824 NapiUtil::MatchParameters(env, parameters, { napi_null, napi_null });
1825 case THREE_VALUE_MAXIMUM_LIMIT:
1826 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_object, napi_function });
1827 default:
1828 return false;
1829 }
1830 }
1831
MatchRejectCallFirstIllegalParameters(napi_env env,const napi_value parameters[])1832 bool NapiCallManager::MatchRejectCallFirstIllegalParameters(napi_env env, const napi_value parameters[])
1833 {
1834 return NapiUtil::MatchParameters(env, parameters, { napi_null, napi_object }) ||
1835 NapiUtil::MatchParameters(env, parameters, { napi_undefined, napi_object });
1836 }
1837
MatchRejectCallSecondIllegalParameters(napi_env env,const napi_value parameters[])1838 bool NapiCallManager::MatchRejectCallSecondIllegalParameters(napi_env env, const napi_value parameters[])
1839 {
1840 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_null }) ||
1841 NapiUtil::MatchParameters(env, parameters, { napi_number, napi_undefined });
1842 }
1843
MatchRejectCallTwoIllegalParameters(napi_env env,const napi_value parameters[])1844 bool NapiCallManager::MatchRejectCallTwoIllegalParameters(napi_env env, const napi_value parameters[])
1845 {
1846 return NapiUtil::MatchParameters(env, parameters, { napi_undefined, napi_undefined }) ||
1847 NapiUtil::MatchParameters(env, parameters, { napi_null, napi_null });
1848 }
1849
MatchNumberAndObjectParameters(napi_env env,const napi_value parameters[],const size_t parameterCount)1850 bool NapiCallManager::MatchNumberAndObjectParameters(
1851 napi_env env, const napi_value parameters[], const size_t parameterCount)
1852 {
1853 TELEPHONY_LOGI("Telephony_CallManager MatchNumberAndObjectParameters %{public}zu", parameterCount);
1854 switch (parameterCount) {
1855 case TWO_VALUE_LIMIT:
1856 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_object });
1857 case THREE_VALUE_MAXIMUM_LIMIT:
1858 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_object, napi_function });
1859 default:
1860 return false;
1861 }
1862 }
1863
MatchCallRestrictionPasswordParameter(napi_env env,const napi_value parameters[],const size_t parameterCount)1864 bool NapiCallManager::MatchCallRestrictionPasswordParameter(
1865 napi_env env, const napi_value parameters[], const size_t parameterCount)
1866 {
1867 TELEPHONY_LOGI("Match parmameter count %{public}zu", parameterCount);
1868 switch (parameterCount) {
1869 case THREE_VALUE_MAXIMUM_LIMIT:
1870 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_string, napi_string });
1871 case FOUR_VALUE_MAXIMUM_LIMIT:
1872 return NapiUtil::MatchParameters(env, parameters, { napi_number, napi_string, napi_string, napi_function });
1873 default:
1874 return false;
1875 }
1876 }
1877
GetCallWaiting(napi_env env,napi_callback_info info)1878 napi_value NapiCallManager::GetCallWaiting(napi_env env, napi_callback_info info)
1879 {
1880 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
1881 if (!MatchOneNumberParameter(env, argv, argc)) {
1882 TELEPHONY_LOGE("NapiCallManager::GetCallWaiting MatchOneNumberParameter failed.");
1883 NapiUtil::ThrowParameterError(env);
1884 return nullptr;
1885 }
1886 auto asyncContext = std::make_unique<SupplementAsyncContext>();
1887 if (asyncContext == nullptr) {
1888 TELEPHONY_LOGE("NapiCallManager::GetCallWaiting asyncContext is nullptr.");
1889 NapiUtil::ThrowParameterError(env);
1890 return nullptr;
1891 }
1892 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
1893 if (argc == TWO_VALUE_LIMIT) {
1894 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1895 }
1896 asyncContext->env = env;
1897 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
1898 return HandleAsyncWork(env, asyncContext.release(), "GetCallWaiting", NativeGetCallWaiting, NativeCallBack);
1899 }
1900
SetCallWaiting(napi_env env,napi_callback_info info)1901 napi_value NapiCallManager::SetCallWaiting(napi_env env, napi_callback_info info)
1902 {
1903 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
1904 if (!MatchNumberAndBoolParameters(env, argv, argc)) {
1905 TELEPHONY_LOGE("NapiCallManager::SetCallWaiting MatchNumberAndBoolParameters failed.");
1906 NapiUtil::ThrowParameterError(env);
1907 return nullptr;
1908 }
1909 auto asyncContext = std::make_unique<SupplementAsyncContext>();
1910 if (asyncContext == nullptr) {
1911 TELEPHONY_LOGE("NapiCallManager::SetCallWaiting asyncContext is nullptr.");
1912 NapiUtil::ThrowParameterError(env);
1913 return nullptr;
1914 }
1915 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
1916 napi_get_value_bool(env, argv[ARRAY_INDEX_SECOND], &asyncContext->flag);
1917 if (argc == VALUE_MAXIMUM_LIMIT) {
1918 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1919 }
1920 asyncContext->env = env;
1921 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
1922 return HandleAsyncWork(env, asyncContext.release(), "SetCallWaiting", NativeSetCallWaiting, NativeCallBack);
1923 }
1924
GetCallRestriction(napi_env env,napi_callback_info info)1925 napi_value NapiCallManager::GetCallRestriction(napi_env env, napi_callback_info info)
1926 {
1927 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
1928 if (!MatchTwoNumberParameters(env, argv, argc)) {
1929 TELEPHONY_LOGE("NapiCallManager::GetCallRestriction MatchTwoNumberParameters failed.");
1930 NapiUtil::ThrowParameterError(env);
1931 return nullptr;
1932 }
1933 auto restrictionAsyncContext = std::make_unique<SupplementAsyncContext>();
1934 if (restrictionAsyncContext == nullptr) {
1935 TELEPHONY_LOGE("NapiCallManager::GetCallRestriction asyncContext is nullptr.");
1936 NapiUtil::ThrowParameterError(env);
1937 return nullptr;
1938 }
1939 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &restrictionAsyncContext->slotId);
1940 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &restrictionAsyncContext->type);
1941 if (argc == VALUE_MAXIMUM_LIMIT) {
1942 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(restrictionAsyncContext->callbackRef));
1943 }
1944 restrictionAsyncContext->env = env;
1945 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(restrictionAsyncContext->thisVar));
1946 return HandleAsyncWork(
1947 env, restrictionAsyncContext.release(), "GetCallRestriction", NativeGetCallRestriction, NativeCallBack);
1948 }
1949
SetCallRestriction(napi_env env,napi_callback_info info)1950 napi_value NapiCallManager::SetCallRestriction(napi_env env, napi_callback_info info)
1951 {
1952 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
1953 if (!MatchNumberAndObjectParameters(env, argv, argc)) {
1954 TELEPHONY_LOGE("NapiCallManager::SetCallRestriction MatchNumberAndObjectParameters failed.");
1955 NapiUtil::ThrowParameterError(env);
1956 return nullptr;
1957 }
1958 auto asyncContext = std::make_unique<CallRestrictionAsyncContext>();
1959 if (asyncContext == nullptr) {
1960 TELEPHONY_LOGE("NapiCallManager::SetCallRestriction asyncContext is nullptr.");
1961 NapiUtil::ThrowParameterError(env);
1962 return nullptr;
1963 }
1964 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
1965 asyncContext->errorCode = GetRestrictionInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
1966 if (asyncContext->errorCode == ERROR_PARAMETER_TYPE_INVALID) {
1967 NapiUtil::ThrowParameterError(env);
1968 return nullptr;
1969 }
1970 if (argc == VALUE_MAXIMUM_LIMIT) {
1971 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
1972 }
1973 asyncContext->env = env;
1974 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
1975 return HandleAsyncWork(env, asyncContext.release(), "SetCallRestriction", NativeSetCallRestriction, NativeCallBack);
1976 }
1977
SetCallRestrictionPassword(napi_env env,napi_callback_info info)1978 napi_value NapiCallManager::SetCallRestrictionPassword(napi_env env, napi_callback_info info)
1979 {
1980 GET_PARAMS(env, info, FOUR_VALUE_MAXIMUM_LIMIT);
1981 if (!MatchCallRestrictionPasswordParameter(env, argv, argc)) {
1982 TELEPHONY_LOGE("MatchCallRestrictionPasswordParameter failed.");
1983 NapiUtil::ThrowParameterError(env);
1984 return nullptr;
1985 }
1986 auto asyncContext = std::make_unique<CallBarringPasswordAsyncContext>();
1987 if (asyncContext == nullptr) {
1988 TELEPHONY_LOGE("CallBarringPasswordAsyncContext is nullptr.");
1989 NapiUtil::ThrowParameterError(env);
1990 return nullptr;
1991 }
1992 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
1993 size_t strLen = 0;
1994 napi_get_value_string_utf8(
1995 env, argv[ARRAY_INDEX_SECOND], asyncContext->oldPassword, PHONE_NUMBER_MAXIMUM_LIMIT, &strLen);
1996 napi_get_value_string_utf8(
1997 env, argv[ARRAY_INDEX_THIRD], asyncContext->newPassword, PHONE_NUMBER_MAXIMUM_LIMIT, &strLen);
1998 if (argc == FOUR_VALUE_MAXIMUM_LIMIT) {
1999 napi_create_reference(env, argv[ARRAY_INDEX_FOURTH], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2000 }
2001 asyncContext->env = env;
2002 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
2003 return HandleAsyncWork(
2004 env, asyncContext.release(), "SetCallRestrictionPassword", NativeSetCallRestrictionPassword, NativeCallBack);
2005 }
2006
GetCallTransferInfo(napi_env env,napi_callback_info info)2007 napi_value NapiCallManager::GetCallTransferInfo(napi_env env, napi_callback_info info)
2008 {
2009 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2010 if (!MatchTwoNumberParameters(env, argv, argc)) {
2011 TELEPHONY_LOGE("NapiCallManager::GetCallTransferInfo MatchTwoNumberParameters failed.");
2012 NapiUtil::ThrowParameterError(env);
2013 return nullptr;
2014 }
2015 auto asyncContext = std::make_unique<SupplementAsyncContext>();
2016 if (asyncContext == nullptr) {
2017 TELEPHONY_LOGE("NapiCallManager::GetCallTransferInfo asyncContext is nullptr.");
2018 NapiUtil::ThrowParameterError(env);
2019 return nullptr;
2020 }
2021 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2022 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &asyncContext->type);
2023 if (argc == VALUE_MAXIMUM_LIMIT) {
2024 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2025 }
2026 asyncContext->env = env;
2027 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
2028 return HandleAsyncWork(env, asyncContext.release(), "GetCallTransferInfo", NativeGetTransferNumber, NativeCallBack);
2029 }
2030
SetCallTransferInfo(napi_env env,napi_callback_info info)2031 napi_value NapiCallManager::SetCallTransferInfo(napi_env env, napi_callback_info info)
2032 {
2033 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2034 if (!MatchNumberAndObjectParameters(env, argv, argc)) {
2035 TELEPHONY_LOGE("NapiCallManager::SetCallTransferInfo MatchNumberAndObjectParameters failed.");
2036 NapiUtil::ThrowParameterError(env);
2037 return nullptr;
2038 }
2039 auto asyncContext = std::make_unique<CallTransferAsyncContext>();
2040 if (asyncContext == nullptr) {
2041 TELEPHONY_LOGE("NapiCallManager::SetCallTransferInfo asyncContext is nullptr.");
2042 NapiUtil::ThrowParameterError(env);
2043 return nullptr;
2044 }
2045 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2046 asyncContext->errorCode = GetTransferInfo(env, argv[ARRAY_INDEX_SECOND], *asyncContext);
2047 if (asyncContext->errorCode == ERROR_PARAMETER_TYPE_INVALID) {
2048 NapiUtil::ThrowParameterError(env);
2049 return nullptr;
2050 }
2051 if (argc == VALUE_MAXIMUM_LIMIT) {
2052 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2053 }
2054 asyncContext->env = env;
2055 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
2056 return HandleAsyncWork(env, asyncContext.release(), "SetCallTransferInfo", NativeSetTransferNumber, NativeCallBack);
2057 }
2058
IsValidSlotId(int32_t slotId)2059 static inline bool IsValidSlotId(int32_t slotId)
2060 {
2061 return ((slotId >= DEFAULT_SIM_SLOT_ID) && (slotId < SIM_SLOT_COUNT));
2062 }
2063
CanSetCallTransferTime(napi_env env,napi_callback_info info)2064 napi_value NapiCallManager::CanSetCallTransferTime(napi_env env, napi_callback_info info)
2065 {
2066 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2067 if (!MatchOneNumberParameter(env, argv, argc)) {
2068 TELEPHONY_LOGE("MatchOneNumberParameter failed.");
2069 NapiUtil::ThrowParameterError(env);
2070 return nullptr;
2071 }
2072 auto asyncContext = std::make_unique<BoolResultAsyncContext>();
2073 asyncContext->eventId = CALL_MANAGER_CAN_SET_CALL_TRANSFER_TIME;
2074 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2075 if (argc == TWO_VALUE_LIMIT) {
2076 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2077 }
2078 return HandleAsyncWork(env, asyncContext.release(), "CanSetCallTransferTime", NativeCanSetCallTransferTime,
2079 NativeBoolCallBackWithErrorCode);
2080 }
2081
EnableImsSwitch(napi_env env,napi_callback_info info)2082 napi_value NapiCallManager::EnableImsSwitch(napi_env env, napi_callback_info info)
2083 {
2084 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2085 if (!MatchOneNumberParameter(env, argv, argc)) {
2086 TELEPHONY_LOGE("NapiCallManager::EnableImsSwitch MatchOneNumberParameter failed.");
2087 NapiUtil::ThrowParameterError(env);
2088 return nullptr;
2089 }
2090 auto asyncContext = std::make_unique<ImsSwitchAsyncContext>();
2091 if (asyncContext == nullptr) {
2092 TELEPHONY_LOGE("NapiCallManager::EnableImsSwitch asyncContext is nullptr.");
2093 NapiUtil::ThrowParameterError(env);
2094 return nullptr;
2095 }
2096 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2097 if (argc == TWO_VALUE_LIMIT) {
2098 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2099 }
2100
2101 return HandleAsyncWork(
2102 env, asyncContext.release(), "EnableImsSwitch", NativeEnableImsSwitch, NativeVoidCallBackWithErrorCode);
2103 }
2104
DisableImsSwitch(napi_env env,napi_callback_info info)2105 napi_value NapiCallManager::DisableImsSwitch(napi_env env, napi_callback_info info)
2106 {
2107 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2108 if (!MatchOneNumberParameter(env, argv, argc)) {
2109 TELEPHONY_LOGE("NapiCallManager::DisableImsSwitch MatchOneNumberParameter failed.");
2110 NapiUtil::ThrowParameterError(env);
2111 return nullptr;
2112 }
2113 auto asyncContext = std::make_unique<ImsSwitchAsyncContext>();
2114 if (asyncContext == nullptr) {
2115 TELEPHONY_LOGE("NapiCallManager::DisableImsSwitch asyncContext is nullptr.");
2116 NapiUtil::ThrowParameterError(env);
2117 return nullptr;
2118 }
2119 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2120 if (argc == TWO_VALUE_LIMIT) {
2121 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2122 }
2123
2124 return HandleAsyncWork(
2125 env, asyncContext.release(), "DisableImsSwitch", NativeDisableImsSwitch, NativeVoidCallBackWithErrorCode);
2126 }
2127
IsImsSwitchEnabled(napi_env env,napi_callback_info info)2128 napi_value NapiCallManager::IsImsSwitchEnabled(napi_env env, napi_callback_info info)
2129 {
2130 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2131 if (!MatchOneNumberParameter(env, argv, argc)) {
2132 TELEPHONY_LOGE("NapiCallManager::IsImsSwitchEnabled MatchOneNumberParameter failed.");
2133 NapiUtil::ThrowParameterError(env);
2134 return nullptr;
2135 }
2136 auto asyncContext = std::make_unique<ImsSwitchAsyncContext>();
2137 if (asyncContext == nullptr) {
2138 TELEPHONY_LOGE("NapiCallManager::IsImsSwitchEnabled asyncContext is nullptr.");
2139 NapiUtil::ThrowParameterError(env);
2140 return nullptr;
2141 }
2142 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2143 if (argc == TWO_VALUE_LIMIT) {
2144 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2145 }
2146 return HandleAsyncWork(
2147 env, asyncContext.release(), "IsImsSwitchEnabled", NativeIsImsSwitchEnabled, NativeIsImsSwitchEnabledCallBack);
2148 }
2149
SetVoNRState(napi_env env,napi_callback_info info)2150 napi_value NapiCallManager::SetVoNRState(napi_env env, napi_callback_info info)
2151 {
2152 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2153 if (!MatchTwoNumberParameters(env, argv, argc)) {
2154 TELEPHONY_LOGE("NapiCallManager::SetVoNRState MatchTwoNumberParameters failed.");
2155 NapiUtil::ThrowParameterError(env);
2156 return nullptr;
2157 }
2158 auto asyncContext = std::make_unique<VoNRSwitchAsyncContext>();
2159 if (asyncContext == nullptr) {
2160 TELEPHONY_LOGE("NapiCallManager::SetVoNRState asyncContext is nullptr.");
2161 NapiUtil::ThrowParameterError(env);
2162 return nullptr;
2163 }
2164 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2165 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &asyncContext->state);
2166 if (argc == VALUE_MAXIMUM_LIMIT) {
2167 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2168 }
2169 return HandleAsyncWork(
2170 env, asyncContext.release(), "SetVoNRState", NativeSetVoNRState, NativeVoidCallBackWithErrorCode);
2171 }
2172
GetVoNRState(napi_env env,napi_callback_info info)2173 napi_value NapiCallManager::GetVoNRState(napi_env env, napi_callback_info info)
2174 {
2175 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2176 if (!MatchOneNumberParameter(env, argv, argc)) {
2177 TELEPHONY_LOGE("NapiCallManager::GetVoNRState MatchOneNumberParameter failed.");
2178 NapiUtil::ThrowParameterError(env);
2179 return nullptr;
2180 }
2181 auto asyncContext = std::make_unique<VoNRSwitchAsyncContext>();
2182 if (asyncContext == nullptr) {
2183 TELEPHONY_LOGE("NapiCallManager::GetVoNRState asyncContext is nullptr.");
2184 NapiUtil::ThrowParameterError(env);
2185 return nullptr;
2186 }
2187 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
2188 if (argc == TWO_VALUE_LIMIT) {
2189 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2190 }
2191 return HandleAsyncWork(
2192 env, asyncContext.release(), "GetVoNRState", NativeGetVoNRState, NativeGetVoNRStateCallBack);
2193 }
2194
StartDTMF(napi_env env,napi_callback_info info)2195 napi_value NapiCallManager::StartDTMF(napi_env env, napi_callback_info info)
2196 {
2197 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2198 if (!MatchNumberAndStringParameters(env, argv, argc)) {
2199 TELEPHONY_LOGE("NapiCallManager::StartDTMF MatchNumberAndStringParameters failed.");
2200 NapiUtil::ThrowParameterError(env);
2201 return nullptr;
2202 }
2203 auto asyncContext = std::make_unique<SupplementAsyncContext>();
2204 if (asyncContext == nullptr) {
2205 TELEPHONY_LOGE("NapiCallManager::StartDTMF asyncContext is nullptr.");
2206 NapiUtil::ThrowParameterError(env);
2207 return nullptr;
2208 }
2209 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2210 napi_get_value_string_utf8(
2211 env, argv[ARRAY_INDEX_SECOND], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
2212 if (argc == VALUE_MAXIMUM_LIMIT) {
2213 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2214 }
2215 return HandleAsyncWork(env, asyncContext.release(), "StartDTMF", NativeStartDTMF, NativeVoidCallBackWithErrorCode);
2216 }
2217
StopDTMF(napi_env env,napi_callback_info info)2218 napi_value NapiCallManager::StopDTMF(napi_env env, napi_callback_info info)
2219 {
2220 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2221 if (!MatchOneNumberParameter(env, argv, argc)) {
2222 TELEPHONY_LOGE("NapiCallManager::StopDTMF MatchOneNumberParameter failed.");
2223 NapiUtil::ThrowParameterError(env);
2224 return nullptr;
2225 }
2226 auto asyncContext = std::make_unique<AsyncContext>();
2227 if (asyncContext == nullptr) {
2228 TELEPHONY_LOGE("NapiCallManager::StopDTMF asyncContext is nullptr.");
2229 NapiUtil::ThrowParameterError(env);
2230 return nullptr;
2231 }
2232 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2233 if (argc == TWO_VALUE_LIMIT) {
2234 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2235 }
2236 return HandleAsyncWork(env, asyncContext.release(), "StopDTMF", NativeStopDTMF, NativeVoidCallBackWithErrorCode);
2237 }
2238
PostDialProceed(napi_env env,napi_callback_info info)2239 napi_value NapiCallManager::PostDialProceed(napi_env env, napi_callback_info info)
2240 {
2241 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2242 if (!MatchNumberAndBoolParameters(env, argv, argc)) {
2243 TELEPHONY_LOGE("NapiCallManager::PostDialProceed MatchNumberAndBoolParameters failed.");
2244 NapiUtil::ThrowParameterError(env);
2245 return nullptr;
2246 }
2247 auto asyncContext = std::make_unique<PostDialAsyncContext>();
2248 if (asyncContext == nullptr) {
2249 TELEPHONY_LOGE("NapiCallManager::PostDialProceed asyncContext is nullptr.");
2250 NapiUtil::ThrowParameterError(env);
2251 return nullptr;
2252 }
2253 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2254 napi_get_value_bool(env, argv[ARRAY_INDEX_SECOND], &asyncContext->proceed);
2255 if (argc == VALUE_MAXIMUM_LIMIT) {
2256 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2257 }
2258 return HandleAsyncWork(env, asyncContext.release(), "PostDialProceed", NativePostDialProceed,
2259 NativeVoidCallBackWithErrorCode);
2260 }
2261
GetCallState(napi_env env,napi_callback_info info)2262 napi_value NapiCallManager::GetCallState(napi_env env, napi_callback_info info)
2263 {
2264 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2265 NAPI_ASSERT(env, argc < TWO_VALUE_LIMIT, "parameter error!");
2266 auto asyncContext = std::make_unique<AsyncContext>();
2267 if (asyncContext == nullptr) {
2268 std::string errorCode = std::to_string(napi_generic_failure);
2269 std::string errorMessage = "GetCallState error at asyncContext is nullptr";
2270 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2271 return nullptr;
2272 }
2273 if (argc == ONLY_ONE_VALUE) {
2274 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2275 }
2276 return HandleAsyncWork(env, asyncContext.release(), "GetCallState", NativeGetCallState, NativePropertyCallBack);
2277 }
2278
GetCallStateSync(napi_env env,napi_callback_info info)2279 napi_value NapiCallManager::GetCallStateSync(napi_env env, napi_callback_info info)
2280 {
2281 size_t parameterCount = 0;
2282 napi_value parameters[] = { nullptr };
2283 napi_get_cb_info(env, info, ¶meterCount, parameters, nullptr, nullptr);
2284 int32_t callState = static_cast<int32_t>(CallStateToApp::CALL_STATE_UNKNOWN);
2285 if (parameterCount == 0) {
2286 callState = DelayedSingleton<CallManagerClient>::GetInstance()->GetCallState();
2287 }
2288 napi_value value = nullptr;
2289 NAPI_CALL(env, napi_create_int32(env, callState, &value));
2290 return value;
2291 }
2292
IsRinging(napi_env env,napi_callback_info info)2293 napi_value NapiCallManager::IsRinging(napi_env env, napi_callback_info info)
2294 {
2295 GET_PARAMS(env, info, ONLY_ONE_VALUE);
2296 if (!MatchEmptyParameter(env, argv, argc)) {
2297 TELEPHONY_LOGE("NapiCallManager::IsRinging MatchEmptyParameter failed.");
2298 NapiUtil::ThrowParameterError(env);
2299 return nullptr;
2300 }
2301 auto asyncContext = std::make_unique<BoolResultAsyncContext>();
2302 if (asyncContext == nullptr) {
2303 TELEPHONY_LOGE("NapiCallManager::IsRinging asyncContext is nullptr.");
2304 NapiUtil::ThrowParameterError(env);
2305 return nullptr;
2306 }
2307 if (argc == ONLY_ONE_VALUE) {
2308 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2309 }
2310 return HandleAsyncWork(env, asyncContext.release(), "IsRinging", NativeIsRinging, NativeBoolCallBackWithErrorCode);
2311 }
2312
HasCall(napi_env env,napi_callback_info info)2313 napi_value NapiCallManager::HasCall(napi_env env, napi_callback_info info)
2314 {
2315 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2316 NAPI_ASSERT(env, argc < TWO_VALUE_LIMIT, "parameter error!");
2317 auto asyncContext = std::make_unique<AsyncContext>();
2318 if (asyncContext == nullptr) {
2319 std::string errorCode = std::to_string(napi_generic_failure);
2320 std::string errorMessage = "HasCall error at asyncContext is nullptr";
2321 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2322 return nullptr;
2323 }
2324 if (argc == ONLY_ONE_VALUE) {
2325 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2326 }
2327 return HandleAsyncWork(env, asyncContext.release(), "HasCall", NativeHasCall, NativeBoolCallBack);
2328 }
2329
HasCallSync(napi_env env,napi_callback_info info)2330 napi_value NapiCallManager::HasCallSync(napi_env env, napi_callback_info info)
2331 {
2332 size_t parameterCount = 0;
2333 napi_value parameters[] = { nullptr };
2334 napi_get_cb_info(env, info, ¶meterCount, parameters, nullptr, nullptr);
2335 bool hasCall = false;
2336 if (parameterCount == 0) {
2337 hasCall = DelayedSingleton<CallManagerClient>::GetInstance()->HasCall();
2338 }
2339 napi_value value = nullptr;
2340 NAPI_CALL(env, napi_get_boolean(env, hasCall, &value));
2341 return value;
2342 }
2343
IsNewCallAllowed(napi_env env,napi_callback_info info)2344 napi_value NapiCallManager::IsNewCallAllowed(napi_env env, napi_callback_info info)
2345 {
2346 GET_PARAMS(env, info, ONLY_ONE_VALUE);
2347 if (!MatchEmptyParameter(env, argv, argc)) {
2348 TELEPHONY_LOGE("NapiCallManager::IsNewCallAllowed MatchEmptyParameter failed.");
2349 NapiUtil::ThrowParameterError(env);
2350 return nullptr;
2351 }
2352 auto asyncContext = std::make_unique<BoolResultAsyncContext>();
2353 if (asyncContext == nullptr) {
2354 TELEPHONY_LOGE("NapiCallManager::IsNewCallAllowed asyncContext is nullptr.");
2355 NapiUtil::ThrowParameterError(env);
2356 return nullptr;
2357 }
2358 if (argc == ONLY_ONE_VALUE) {
2359 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2360 }
2361 return HandleAsyncWork(
2362 env, asyncContext.release(), "IsNewCallAllowed", NativeIsNewCallAllowed, NativeBoolCallBackWithErrorCode);
2363 }
2364
IsInEmergencyCall(napi_env env,napi_callback_info info)2365 napi_value NapiCallManager::IsInEmergencyCall(napi_env env, napi_callback_info info)
2366 {
2367 GET_PARAMS(env, info, ONLY_ONE_VALUE);
2368 if (!MatchEmptyParameter(env, argv, argc)) {
2369 TELEPHONY_LOGE("NapiCallManager::IsInEmergencyCall MatchEmptyParameter failed.");
2370 NapiUtil::ThrowParameterError(env);
2371 return nullptr;
2372 }
2373 auto asyncContext = std::make_unique<BoolResultAsyncContext>();
2374 if (asyncContext == nullptr) {
2375 TELEPHONY_LOGE("NapiCallManager::IsInEmergencyCall asyncContext is nullptr.");
2376 NapiUtil::ThrowParameterError(env);
2377 return nullptr;
2378 }
2379 if (argc == ONLY_ONE_VALUE) {
2380 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2381 }
2382 return HandleAsyncWork(
2383 env, asyncContext.release(), "IsInEmergencyCall", NativeIsInEmergencyCall, NativeBoolCallBackWithErrorCode);
2384 }
2385
IsEmergencyPhoneNumber(napi_env env,napi_callback_info info)2386 napi_value NapiCallManager::IsEmergencyPhoneNumber(napi_env env, napi_callback_info info)
2387 {
2388 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2389 if (!MatchStringAndVariableObjectParameters(env, argv, argc)) {
2390 TELEPHONY_LOGE("MatchStringAndVariableObjectParameters failed.");
2391 NapiUtil::ThrowParameterError(env);
2392 return nullptr;
2393 }
2394 auto emergencyAsyncContext = std::make_unique<UtilsAsyncContext>();
2395 if (emergencyAsyncContext == nullptr) {
2396 TELEPHONY_LOGE("emergencyAsyncContext is nullptr.");
2397 NapiUtil::ThrowParameterError(env);
2398 return nullptr;
2399 }
2400 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_FIRST], emergencyAsyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT,
2401 &(emergencyAsyncContext->numberLen));
2402 emergencyAsyncContext->slotId = 0;
2403 if (argc == TWO_VALUE_LIMIT) {
2404 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
2405 napi_create_reference(
2406 env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(emergencyAsyncContext->callbackRef));
2407 } else {
2408 emergencyAsyncContext->slotId =
2409 NapiCallManagerUtils::GetIntProperty(env, argv[ARRAY_INDEX_SECOND], "slotId");
2410 }
2411 }
2412 if (argc == VALUE_MAXIMUM_LIMIT) {
2413 emergencyAsyncContext->slotId = NapiCallManagerUtils::GetIntProperty(env, argv[ARRAY_INDEX_SECOND], "slotId");
2414 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(emergencyAsyncContext->callbackRef));
2415 }
2416 return HandleAsyncWork(env, emergencyAsyncContext.release(), "IsEmergencyPhoneNumber", NativeIsEmergencyPhoneNumber,
2417 NativeIsEmergencyPhoneNumberCallBack);
2418 }
2419
FormatPhoneNumber(napi_env env,napi_callback_info info)2420 napi_value NapiCallManager::FormatPhoneNumber(napi_env env, napi_callback_info info)
2421 {
2422 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2423 if (!MatchStringAndVariableObjectParameters(env, argv, argc)) {
2424 TELEPHONY_LOGE("MatchStringAndVariableObjectParameters failed.");
2425 NapiUtil::ThrowParameterError(env);
2426 return nullptr;
2427 }
2428 auto asyncContext = std::make_unique<UtilsAsyncContext>();
2429 if (asyncContext == nullptr) {
2430 TELEPHONY_LOGE("asyncContext is nullptr.");
2431 NapiUtil::ThrowParameterError(env);
2432 return nullptr;
2433 }
2434 asyncContext->code = "cn";
2435 napi_get_value_string_utf8(
2436 env, argv[ARRAY_INDEX_FIRST], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
2437 if (argc == TWO_VALUE_LIMIT) {
2438 if (NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function)) {
2439 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2440 } else {
2441 asyncContext->code = NapiCallManagerUtils::GetStringProperty(env, argv[ARRAY_INDEX_SECOND], "countryCode");
2442 }
2443 }
2444 if (argc == VALUE_MAXIMUM_LIMIT) {
2445 asyncContext->code = NapiCallManagerUtils::GetStringProperty(env, argv[ARRAY_INDEX_SECOND], "countryCode");
2446 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2447 }
2448 if ((argc >= TWO_VALUE_LIMIT) && (asyncContext->code == "")) {
2449 TELEPHONY_LOGI("country code is undefined, using default country code: 'cn'.");
2450 asyncContext->code = "cn";
2451 }
2452 return HandleAsyncWork(
2453 env, asyncContext.release(), "FormatPhoneNumber", NativeFormatPhoneNumber, NativeFormatNumberCallBack);
2454 }
2455
FormatPhoneNumberToE164(napi_env env,napi_callback_info info)2456 napi_value NapiCallManager::FormatPhoneNumberToE164(napi_env env, napi_callback_info info)
2457 {
2458 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2459 if (!MatchTwoStringParameter(env, argv, argc)) {
2460 TELEPHONY_LOGE("NapiCallManager::FormatPhoneNumberToE164 MatchTwoStringParameter failed.");
2461 NapiUtil::ThrowParameterError(env);
2462 return nullptr;
2463 }
2464 auto asyncContext = std::make_unique<UtilsAsyncContext>();
2465 if (asyncContext == nullptr) {
2466 TELEPHONY_LOGE("NapiCallManager::FormatPhoneNumberToE164 asyncContext is nullptr.");
2467 NapiUtil::ThrowParameterError(env);
2468 return nullptr;
2469 }
2470 napi_get_value_string_utf8(
2471 env, argv[ARRAY_INDEX_FIRST], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
2472 char tmpStr[kMaxNumberLen + 1] = {0};
2473 size_t strLen = 0;
2474 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_SECOND], tmpStr, PHONE_NUMBER_MAXIMUM_LIMIT, &strLen);
2475 std::string tmpCode(tmpStr, strLen);
2476 asyncContext->code = tmpCode;
2477 if (argc == VALUE_MAXIMUM_LIMIT) {
2478 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2479 }
2480 return HandleAsyncWork(env, asyncContext.release(), "FormatPhoneNumberToE164", NativeFormatPhoneNumberToE164,
2481 NativeFormatNumberCallBack);
2482 }
2483
ObserverOn(napi_env env,napi_callback_info info)2484 napi_value NapiCallManager::ObserverOn(napi_env env, napi_callback_info info)
2485 {
2486 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2487 if ((argc != TWO_VALUE_LIMIT) ||
2488 (!NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_string)) ||
2489 (!NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_function))) {
2490 NapiUtil::ThrowParameterError(env);
2491 return nullptr;
2492 }
2493 if (registerStatus_ != TELEPHONY_SUCCESS) {
2494 TELEPHONY_LOGE("RegisterCallBack failed!");
2495 if (registerStatus_ == TELEPHONY_ERR_PERMISSION_ERR) {
2496 NapiUtil::ThrowError(env, JS_ERROR_TELEPHONY_PERMISSION_DENIED, OBSERVER_ON_JS_PERMISSION_ERROR_STRING);
2497 return nullptr;
2498 }
2499 JsError error = NapiUtil::ConverErrorMessageForJs(registerStatus_);
2500 NapiUtil::ThrowError(env, error.errorCode, error.errorMessage);
2501 return nullptr;
2502 }
2503 char listenerType[PHONE_NUMBER_MAXIMUM_LIMIT + 1] = { 0 };
2504 size_t strLength = 0;
2505 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_FIRST], listenerType, PHONE_NUMBER_MAXIMUM_LIMIT, &strLength);
2506 std::string tmpStr = listenerType;
2507 TELEPHONY_LOGI("listenerType == %{public}s", tmpStr.c_str());
2508 EventCallback stateCallback;
2509 (void)memset_s(&stateCallback, sizeof(EventCallback), 0, sizeof(EventCallback));
2510 stateCallback.env = env;
2511 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &stateCallback.thisVar);
2512 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &stateCallback.callbackRef);
2513 RegisterNapiCallFuncCallback(tmpStr, stateCallback);
2514 napi_value result = nullptr;
2515 return result;
2516 }
2517
RegisterNapiCallFuncCallback(std::string tmpStr,EventCallback stateCallback)2518 void NapiCallManager::RegisterNapiCallFuncCallback(std::string tmpStr, EventCallback stateCallback)
2519 {
2520 if (tmpStr == "callDetailsChange") {
2521 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterCallStateCallback(stateCallback);
2522 DelayedSingleton<CallManagerClient>::GetInstance()->ObserverOnCallDetailsChange();
2523 } else if (tmpStr == "callEventChange") {
2524 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterCallEventCallback(stateCallback);
2525 } else if (tmpStr == "callOttRequest") {
2526 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterCallOttRequestCallback(stateCallback);
2527 } else if (tmpStr == "callDisconnectedCause") {
2528 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterDisconnectedCauseCallback(stateCallback);
2529 } else if (tmpStr == "mmiCodeResult") {
2530 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterMmiCodeCallback(stateCallback);
2531 } else if (tmpStr == "audioDeviceChange") {
2532 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterAudioDeviceCallback(stateCallback);
2533 int32_t result = DelayedSingleton<CallManagerClient>::GetInstance()->ReportAudioDeviceInfo();
2534 TELEPHONY_LOGI("result == %{public}d", result);
2535 } else if (tmpStr == "postDialDelay") {
2536 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterPostDialDelay(stateCallback);
2537 } else if (tmpStr == "imsCallModeChange") {
2538 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterImsCallModeChangeCallback(stateCallback);
2539 } else if (tmpStr == "callSessionEvent") {
2540 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterCallSessionEventChangeCallback(
2541 stateCallback);
2542 } else if (tmpStr == "peerDimensionsChange") {
2543 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterPeerDimensionsChangeCallback(stateCallback);
2544 } else if (tmpStr == "cameraCapabilitiesChange") {
2545 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterCameraCapabilitiesChangeCallback(
2546 stateCallback);
2547 }
2548 }
2549
ObserverOff(napi_env env,napi_callback_info info)2550 napi_value NapiCallManager::ObserverOff(napi_env env, napi_callback_info info)
2551 {
2552 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2553 if (!MatchObserverOffParameter(env, argv, argc)) {
2554 TELEPHONY_LOGE("MatchObserverOffParameter failed.");
2555 NapiUtil::ThrowParameterError(env);
2556 return nullptr;
2557 }
2558 auto asyncContext = std::make_unique<AsyncContext>();
2559 if (asyncContext == nullptr) {
2560 TELEPHONY_LOGE("asyncContext is nullptr.");
2561 NapiUtil::ThrowParameterError(env);
2562 return nullptr;
2563 }
2564 if (registerStatus_ != TELEPHONY_SUCCESS) {
2565 TELEPHONY_LOGE("RegisterCallBack failed!");
2566 if (registerStatus_ == TELEPHONY_ERR_PERMISSION_ERR) {
2567 NapiUtil::ThrowError(env, JS_ERROR_TELEPHONY_PERMISSION_DENIED, OBSERVER_OFF_JS_PERMISSION_ERROR_STRING);
2568 return nullptr;
2569 }
2570 JsError error = NapiUtil::ConverErrorMessageForJs(registerStatus_);
2571 NapiUtil::ThrowError(env, error.errorCode, error.errorMessage);
2572 return nullptr;
2573 }
2574 char listenerType[PHONE_NUMBER_MAXIMUM_LIMIT + 1] = { 0 };
2575 size_t strLength = 0;
2576 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_FIRST], listenerType, PHONE_NUMBER_MAXIMUM_LIMIT, &strLength);
2577 std::string tmpStr = listenerType;
2578 TELEPHONY_LOGI("listenerType == %{public}s", tmpStr.c_str());
2579 UnRegisterCallbackWithListenerType(tmpStr);
2580 if (argc == TWO_VALUE_LIMIT) {
2581 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2582 }
2583 return HandleAsyncWork(
2584 env, asyncContext.release(), "Off", [](napi_env env, void *data) {}, NativeOffCallBack);
2585 }
2586
UnRegisterCallbackWithListenerType(std::string tmpStr)2587 void NapiCallManager::UnRegisterCallbackWithListenerType(std::string tmpStr)
2588 {
2589 if (tmpStr == "callDetailsChange") {
2590 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterCallStateCallback();
2591 } else if (tmpStr == "callEventChange") {
2592 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterCallEventCallback();
2593 } else if (tmpStr == "callOttRequest") {
2594 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterCallOttRequestCallback();
2595 } else if (tmpStr == "callDisconnectedCause") {
2596 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterDisconnectedCauseCallback();
2597 } else if (tmpStr == "mmiCodeResult") {
2598 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterMmiCodeCallback();
2599 } else if (tmpStr == "audioDeviceChange") {
2600 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterAudioDeviceCallback();
2601 } else if (tmpStr == "postDialDelay") {
2602 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterPostDialDelayCallback();
2603 } else if (tmpStr == "imsCallModeChange") {
2604 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterImsCallModeChangeCallback();
2605 } else if (tmpStr == "callSessionEvent") {
2606 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterCallSessionEventChangeCallback();
2607 } else if (tmpStr == "peerDimensionsChange") {
2608 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterPeerDimensionsChangeCallback();
2609 } else if (tmpStr == "cameraCapabilitiesChange") {
2610 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterCameraCapabilitiesChangeCallback();
2611 }
2612 }
2613
SetMuted(napi_env env,napi_callback_info info)2614 napi_value NapiCallManager::SetMuted(napi_env env, napi_callback_info info)
2615 {
2616 GET_PARAMS(env, info, ONLY_ONE_VALUE);
2617 if (!MatchEmptyParameter(env, argv, argc)) {
2618 TELEPHONY_LOGE("NapiCallManager::SetMuted MatchEmptyParameter failed.");
2619 NapiUtil::ThrowParameterError(env);
2620 return nullptr;
2621 }
2622 auto asyncContext = std::make_unique<AudioAsyncContext>();
2623 if (asyncContext == nullptr) {
2624 TELEPHONY_LOGE("NapiCallManager::SetMuted asyncContext is nullptr.");
2625 NapiUtil::ThrowParameterError(env);
2626 return nullptr;
2627 }
2628 if (argc == ONLY_ONE_VALUE) {
2629 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2630 }
2631 return HandleAsyncWork(env, asyncContext.release(), "SetMuted", NativeSetMuted, NativeVoidCallBackWithErrorCode);
2632 }
2633
CancelMuted(napi_env env,napi_callback_info info)2634 napi_value NapiCallManager::CancelMuted(napi_env env, napi_callback_info info)
2635 {
2636 GET_PARAMS(env, info, ONLY_ONE_VALUE);
2637 if (!MatchEmptyParameter(env, argv, argc)) {
2638 TELEPHONY_LOGE("NapiCallManager::CancelMuted MatchEmptyParameter failed.");
2639 NapiUtil::ThrowParameterError(env);
2640 return nullptr;
2641 }
2642 auto asyncContext = std::make_unique<AudioAsyncContext>();
2643 if (asyncContext == nullptr) {
2644 TELEPHONY_LOGE("NapiCallManager::CancelMuted asyncContext is nullptr.");
2645 NapiUtil::ThrowParameterError(env);
2646 return nullptr;
2647 }
2648 if (argc == ONLY_ONE_VALUE) {
2649 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2650 }
2651 return HandleAsyncWork(
2652 env, asyncContext.release(), "CancelMuted", NativeCancelMuted, NativeVoidCallBackWithErrorCode);
2653 }
2654
MuteRinger(napi_env env,napi_callback_info info)2655 napi_value NapiCallManager::MuteRinger(napi_env env, napi_callback_info info)
2656 {
2657 GET_PARAMS(env, info, ONLY_ONE_VALUE);
2658 if (!MatchEmptyParameter(env, argv, argc)) {
2659 TELEPHONY_LOGE("NapiCallManager::MuteRinger MatchEmptyParameter failed.");
2660 NapiUtil::ThrowParameterError(env);
2661 return nullptr;
2662 }
2663 auto asyncContext = std::make_unique<AudioAsyncContext>();
2664 if (asyncContext == nullptr) {
2665 TELEPHONY_LOGE("NapiCallManager::MuteRinger asyncContext is nullptr.");
2666 NapiUtil::ThrowParameterError(env);
2667 return nullptr;
2668 }
2669 if (argc == ONLY_ONE_VALUE) {
2670 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2671 }
2672 return HandleAsyncWork(
2673 env, asyncContext.release(), "MuteRinger", NativeMuteRinger, NativeVoidCallBackWithErrorCode);
2674 }
2675
SetAudioDevice(napi_env env,napi_callback_info info)2676 napi_value NapiCallManager::SetAudioDevice(napi_env env, napi_callback_info info)
2677 {
2678 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2679 if (!MatchAudioDeviceParameters(env, argv, argc)) {
2680 TELEPHONY_LOGE("NapiCallManager::SetAudioDevice MatchAudioDeviceParameters failed.");
2681 NapiUtil::ThrowParameterError(env);
2682 return nullptr;
2683 }
2684 auto asyncContext = std::make_unique<AudioAsyncContext>();
2685 if (asyncContext == nullptr) {
2686 TELEPHONY_LOGE("NapiCallManager::SetAudioDevice asyncContext is nullptr.");
2687 NapiUtil::ThrowParameterError(env);
2688 return nullptr;
2689 }
2690 asyncContext->deviceType = NapiCallManagerUtils::GetIntProperty(env, argv[ARRAY_INDEX_FIRST], "deviceType");
2691 asyncContext->address = NapiCallManagerUtils::GetStringProperty(env, argv[ARRAY_INDEX_FIRST], "address");
2692 if (argc == TWO_VALUE_LIMIT) {
2693 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2694 }
2695
2696 return HandleAsyncWork(
2697 env, asyncContext.release(), "SetAudioDevice", NativeSetAudioDevice, NativeVoidCallBackWithErrorCode);
2698 }
2699
ControlCamera(napi_env env,napi_callback_info info)2700 napi_value NapiCallManager::ControlCamera(napi_env env, napi_callback_info info)
2701 {
2702 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2703 if (!MatchNumberAndStringParameters(env, argv, argc)) {
2704 TELEPHONY_LOGE("MatchNumberAndStringParameters failed.");
2705 NapiUtil::ThrowParameterError(env);
2706 return nullptr;
2707 }
2708 auto asyncContext = std::make_unique<VideoAsyncContext>();
2709 if (asyncContext == nullptr) {
2710 std::string errorCode = std::to_string(napi_generic_failure);
2711 std::string errorMessage = "ControlCamera error at baseContext is nullptr";
2712 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2713 return nullptr;
2714 }
2715 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2716 char tmpStr[kMaxNumberLen + 1] = {0};
2717 size_t strLen = 0;
2718 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_SECOND], tmpStr, PHONE_NUMBER_MAXIMUM_LIMIT, &strLen);
2719 std::string tmpCode(tmpStr, strLen);
2720 asyncContext->cameraId = tmpCode;
2721 if (argc == THREE_VALUE_MAXIMUM_LIMIT) {
2722 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2723 }
2724 return HandleAsyncWork(
2725 env, asyncContext.release(), "ControlCamera", NativeControlCamera, NativeVoidCallBackWithErrorCode);
2726 }
2727
SetPreviewWindow(napi_env env,napi_callback_info info)2728 napi_value NapiCallManager::SetPreviewWindow(napi_env env, napi_callback_info info)
2729 {
2730 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2731 if (!MatchNumberAndStringParameters(env, argv, argc)) {
2732 TELEPHONY_LOGE("MatchNumberAndStringParameters failed.");
2733 NapiUtil::ThrowParameterError(env);
2734 return nullptr;
2735 }
2736
2737 auto previwWindowContext = std::make_unique<VideoAsyncContext>();
2738 if (previwWindowContext == nullptr) {
2739 std::string errorCode = std::to_string(napi_generic_failure);
2740 std::string errorMessage = "SetPreviewWindow error at baseContext is nullptr";
2741 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2742 return nullptr;
2743 }
2744 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &previwWindowContext->callId);
2745 char tmpStr[kMaxNumberLen + 1] = { 0 };
2746 size_t strLen = 0;
2747 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_SECOND], tmpStr, MESSAGE_CONTENT_MAXIMUM_LIMIT, &strLen);
2748 std::string tmpCode(tmpStr, strLen);
2749 previwWindowContext->surfaceId = tmpCode;
2750 if (argc == THREE_VALUE_MAXIMUM_LIMIT) {
2751 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(previwWindowContext->callbackRef));
2752 }
2753 return HandleAsyncWork(env, previwWindowContext.release(), "SetPreviewWindow", NativeSetPreviewWindow,
2754 NativeVoidCallBackWithErrorCode);
2755 }
2756
SetDisplayWindow(napi_env env,napi_callback_info info)2757 napi_value NapiCallManager::SetDisplayWindow(napi_env env, napi_callback_info info)
2758 {
2759 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2760 if (!MatchNumberAndStringParameters(env, argv, argc)) {
2761 TELEPHONY_LOGE("MatchNumberAndStringParameters failed.");
2762 NapiUtil::ThrowParameterError(env);
2763 return nullptr;
2764 }
2765
2766 auto dislpayWindowContext = std::make_unique<VideoAsyncContext>();
2767 if (dislpayWindowContext == nullptr) {
2768 std::string errorCode = std::to_string(napi_generic_failure);
2769 std::string errorMessage = "SetDisplayWindow error at baseContext is nullptr";
2770 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2771 return nullptr;
2772 }
2773 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &dislpayWindowContext->callId);
2774 char tmpStr[kMaxNumberLen + 1] = { 0 };
2775 size_t strLen = 0;
2776 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_SECOND], tmpStr, MESSAGE_CONTENT_MAXIMUM_LIMIT, &strLen);
2777 std::string tmpCode(tmpStr, strLen);
2778 dislpayWindowContext->surfaceId = tmpCode;
2779 if (argc == THREE_VALUE_MAXIMUM_LIMIT) {
2780 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(dislpayWindowContext->callbackRef));
2781 }
2782 return HandleAsyncWork(env, dislpayWindowContext.release(), "SetDisplayWindow", NativeSetDisplayWindow,
2783 NativeVoidCallBackWithErrorCode);
2784 }
2785
SetCameraZoom(napi_env env,napi_callback_info info)2786 napi_value NapiCallManager::SetCameraZoom(napi_env env, napi_callback_info info)
2787 {
2788 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2789 NAPI_ASSERT(env, argc < VALUE_MAXIMUM_LIMIT, "parameter error!");
2790 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number);
2791 NAPI_ASSERT(env, matchFlag, "SetCameraZoom type error, should be number type");
2792
2793 auto asyncContext = std::make_unique<VideoAsyncContext>();
2794 if (asyncContext == nullptr) {
2795 std::string errorCode = std::to_string(napi_generic_failure);
2796 std::string errorMessage = "SetCameraZoom error at baseContext is nullptr";
2797 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2798 return nullptr;
2799 }
2800 napi_get_value_double(env, argv[ARRAY_INDEX_FIRST], &asyncContext->zoomRatio);
2801 if (argc == TWO_VALUE_LIMIT) {
2802 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2803 }
2804 return HandleAsyncWork(env, asyncContext.release(), "SetCameraZoom", NativeSetCameraZoom, NativeVoidCallBack);
2805 }
2806
SetPausePicture(napi_env env,napi_callback_info info)2807 napi_value NapiCallManager::SetPausePicture(napi_env env, napi_callback_info info)
2808 {
2809 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2810 if (!MatchOneNumberParameter(env, argv, argc)) {
2811 TELEPHONY_LOGE("MatchNumberAndStringParameters failed.");
2812 NapiUtil::ThrowParameterError(env);
2813 return nullptr;
2814 }
2815
2816 auto asyncContext = std::make_unique<VideoAsyncContext>();
2817 if (asyncContext == nullptr) {
2818 std::string errorCode = std::to_string(napi_generic_failure);
2819 std::string errorMessage = "SetPausePicture error at baseContext is nullptr";
2820 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2821 return nullptr;
2822 }
2823 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2824 if (argc == TWO_VALUE_LIMIT) {
2825 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2826 }
2827 return HandleAsyncWork(
2828 env, asyncContext.release(), "SetPausePicture", NativeSetPausePicture, NativeVoidCallBackWithErrorCode);
2829 }
2830
SetDeviceDirection(napi_env env,napi_callback_info info)2831 napi_value NapiCallManager::SetDeviceDirection(napi_env env, napi_callback_info info)
2832 {
2833 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2834 if (!MatchTwoNumberParameters(env, argv, argc)) {
2835 TELEPHONY_LOGE("NapiCallManager::SetDeviceDirection MatchTwoNumberParameters failed.");
2836 NapiUtil::ThrowParameterError(env);
2837 return nullptr;
2838 }
2839
2840 auto asyncContext = std::make_unique<VideoAsyncContext>();
2841 if (asyncContext == nullptr) {
2842 std::string errorCode = std::to_string(napi_generic_failure);
2843 std::string errorMessage = "SetDeviceDirection error at baseContext is nullptr";
2844 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2845 return nullptr;
2846 }
2847 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2848 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &asyncContext->rotation);
2849 if (argc == THREE_VALUE_MAXIMUM_LIMIT) {
2850 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2851 }
2852 return HandleAsyncWork(
2853 env, asyncContext.release(), "SetDeviceDirection", NativeSetDeviceDirection, NativeVoidCallBackWithErrorCode);
2854 }
2855
RequestCameraCapabilities(napi_env env,napi_callback_info info)2856 napi_value NapiCallManager::RequestCameraCapabilities(napi_env env, napi_callback_info info)
2857 {
2858 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2859 if (!MatchOneNumberParameter(env, argv, argc)) {
2860 TELEPHONY_LOGE("NapiCallManager::RequestCameraCapabilities MatchOneNumberParameter failed.");
2861 NapiUtil::ThrowParameterError(env);
2862 return nullptr;
2863 }
2864 auto asyncContext = std::make_unique<AsyncContext>();
2865 if (asyncContext == nullptr) {
2866 TELEPHONY_LOGE("NapiCallManager::RequestCameraCapabilities asyncContext is nullptr.");
2867 NapiUtil::ThrowParameterError(env);
2868 return nullptr;
2869 }
2870 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2871 if (argc == TWO_VALUE_LIMIT) {
2872 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2873 }
2874 return HandleAsyncWork(env, asyncContext.release(), "RequestCameraCapabilities",
2875 NativeRequestCameraCapabilities, NativeVoidCallBackWithErrorCode);
2876 }
2877
CancelCallUpgrade(napi_env env,napi_callback_info info)2878 napi_value NapiCallManager::CancelCallUpgrade(napi_env env, napi_callback_info info)
2879 {
2880 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
2881 if (!MatchOneNumberParameter(env, argv, argc)) {
2882 TELEPHONY_LOGE("NapiCallManager::CancelCallUpgrade MatchOneNumberParameter failed.");
2883 NapiUtil::ThrowParameterError(env);
2884 return nullptr;
2885 }
2886 auto asyncContext = std::make_unique<AsyncContext>();
2887 if (asyncContext == nullptr) {
2888 TELEPHONY_LOGE("NapiCallManager::CancelCallUpgrade asyncContext is nullptr.");
2889 NapiUtil::ThrowParameterError(env);
2890 return nullptr;
2891 }
2892 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2893 if (argc == TWO_VALUE_LIMIT) {
2894 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2895 }
2896 return HandleAsyncWork(env, asyncContext.release(), "CancelCallUpgrade", NativeCancelCallUpgrade,
2897 NativeVoidCallBackWithErrorCode);
2898 }
2899
SetCallPreferenceMode(napi_env env,napi_callback_info info)2900 napi_value NapiCallManager::SetCallPreferenceMode(napi_env env, napi_callback_info info)
2901 {
2902 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2903 NAPI_ASSERT(env, argc <= VALUE_MAXIMUM_LIMIT, "parameter error!");
2904 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number);
2905 NAPI_ASSERT(env, matchFlag, "SetCallPreferenceMode type error, should be number type");
2906 matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_number);
2907 NAPI_ASSERT(env, matchFlag, "SetCallPreferenceMode type error, should be number type");
2908 auto asyncContext = std::make_unique<SupplementAsyncContext>();
2909 if (asyncContext == nullptr) {
2910 std::string errorCode = std::to_string(napi_generic_failure);
2911 std::string errorMessage = "SetCallPreferenceMode error at baseContext is nullptr";
2912 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2913 return nullptr;
2914 }
2915 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2916 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &asyncContext->mode);
2917 if (argc == VALUE_MAXIMUM_LIMIT) {
2918 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2919 }
2920 return HandleAsyncWork(
2921 env, asyncContext.release(), "SetCallPreferenceMode", NativeSetCallPreferenceMode, NativeVoidCallBack);
2922 }
2923
StartRTT(napi_env env,napi_callback_info info)2924 napi_value NapiCallManager::StartRTT(napi_env env, napi_callback_info info)
2925 {
2926 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2927 NAPI_ASSERT(env, argc <= VALUE_MAXIMUM_LIMIT, "parameter error!");
2928 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number);
2929 NAPI_ASSERT(env, matchFlag, "StartRTT type error, should be number type");
2930 matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_SECOND], napi_string);
2931 NAPI_ASSERT(env, matchFlag, "StartRTT type error, should be string type");
2932 auto asyncContext = std::make_unique<SupplementAsyncContext>();
2933 if (asyncContext == nullptr) {
2934 std::string errorCode = std::to_string(napi_generic_failure);
2935 std::string errorMessage = "StartRTT error at supplementAsyncContext is nullptr";
2936 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2937 return nullptr;
2938 }
2939 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2940 char tmpStr[kMaxNumberLen + 1] = {0};
2941 size_t strLen = 0;
2942 napi_get_value_string_utf8(env, argv[ARRAY_INDEX_SECOND], tmpStr, PHONE_NUMBER_MAXIMUM_LIMIT, &strLen);
2943 std::string tmpCode(tmpStr, strLen);
2944 asyncContext->content = tmpCode;
2945 if (argc == VALUE_MAXIMUM_LIMIT) {
2946 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2947 }
2948 asyncContext->env = env;
2949 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
2950 return HandleAsyncWork(env, asyncContext.release(), "StartRTT", NativeStartRTT, NativeVoidCallBack);
2951 }
2952
StopRTT(napi_env env,napi_callback_info info)2953 napi_value NapiCallManager::StopRTT(napi_env env, napi_callback_info info)
2954 {
2955 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
2956 NAPI_ASSERT(env, argc < VALUE_MAXIMUM_LIMIT, "parameter error!");
2957 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number);
2958 NAPI_ASSERT(env, matchFlag, "StopRTT type error, should be number type");
2959 auto asyncContext = std::make_unique<SupplementAsyncContext>();
2960 if (asyncContext == nullptr) {
2961 std::string errorCode = std::to_string(napi_generic_failure);
2962 std::string errorMessage = "StopRTT error at supplementAsyncContext is nullptr";
2963 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
2964 return nullptr;
2965 }
2966 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2967 if (argc == TWO_VALUE_LIMIT) {
2968 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
2969 }
2970 asyncContext->env = env;
2971 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
2972 return HandleAsyncWork(env, asyncContext.release(), "StopRTT", NativeStopRTT, NativeVoidCallBack);
2973 }
2974
JoinConference(napi_env env,napi_callback_info info)2975 napi_value NapiCallManager::JoinConference(napi_env env, napi_callback_info info)
2976 {
2977 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
2978 if (!MatchNumberAndObjectParameters(env, argv, argc)) {
2979 TELEPHONY_LOGE("NapiCallManager::JoinConference MatchNumberAndObjectParameters failed.");
2980 NapiUtil::ThrowParameterError(env);
2981 return nullptr;
2982 }
2983 uint32_t arrayLength = 0;
2984 NAPI_CALL(env, napi_get_array_length(env, argv[ARRAY_INDEX_SECOND], &arrayLength));
2985 if (!NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_number) || arrayLength == 0) {
2986 TELEPHONY_LOGE("NapiCallManager::JoinConference parameter type matching failed.");
2987 NapiUtil::ThrowParameterError(env);
2988 return nullptr;
2989 }
2990 auto asyncContext = std::make_unique<ListAsyncContext>();
2991 if (asyncContext == nullptr) {
2992 TELEPHONY_LOGE("NapiCallManager::JoinConference asyncContext is nullptr.");
2993 NapiUtil::ThrowParameterError(env);
2994 return nullptr;
2995 }
2996 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
2997 (asyncContext->listResult).clear();
2998
2999 napi_value napiFormId;
3000 std::string str = "";
3001 size_t len = 0;
3002 char chars[PHONE_NUMBER_MAXIMUM_LIMIT + 1] = { 0 };
3003 napi_status getStringStatus = napi_invalid_arg;
3004 for (uint32_t i = 0; i < arrayLength; i++) {
3005 napi_get_element(env, argv[ARRAY_INDEX_SECOND], i, &napiFormId);
3006 if (!NapiCallManagerUtils::MatchValueType(env, napiFormId, napi_string)) {
3007 TELEPHONY_LOGE("NapiCallManager::JoinConference parameter type matching failed.");
3008 NapiUtil::ThrowParameterError(env);
3009 return nullptr;
3010 }
3011 getStringStatus = napi_get_value_string_utf8(env, napiFormId, chars, PHONE_NUMBER_MAXIMUM_LIMIT, &len);
3012 if (getStringStatus == napi_ok && len > 0) {
3013 str = std::string(chars, len);
3014 (asyncContext->listResult).push_back(Str8ToStr16(str));
3015 TELEPHONY_LOGI("napi_string %{public}s", str.c_str());
3016 }
3017 }
3018
3019 if (argc == VALUE_MAXIMUM_LIMIT) {
3020 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
3021 }
3022 return HandleAsyncWork(
3023 env, asyncContext.release(), "JoinConference", NativeJoinConference, NativeVoidCallBackWithErrorCode);
3024 }
3025
UpdateImsCallMode(napi_env env,napi_callback_info info)3026 napi_value NapiCallManager::UpdateImsCallMode(napi_env env, napi_callback_info info)
3027 {
3028 GET_PARAMS(env, info, THREE_VALUE_MAXIMUM_LIMIT);
3029 if (!MatchTwoNumberParameters(env, argv, argc)) {
3030 TELEPHONY_LOGE("NapiCallManager::UpdateImsCallMode MatchTwoNumberParameters failed.");
3031 NapiUtil::ThrowParameterError(env);
3032 return nullptr;
3033 }
3034 auto asyncContext = std::make_unique<SupplementAsyncContext>();
3035 if (asyncContext == nullptr) {
3036 TELEPHONY_LOGE("NapiCallManager::UpdateImsCallMode asyncContext is nullptr.");
3037 NapiUtil::ThrowParameterError(env);
3038 return nullptr;
3039 }
3040 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->callId);
3041 napi_get_value_int32(env, argv[ARRAY_INDEX_SECOND], &asyncContext->type);
3042 if (argc == VALUE_MAXIMUM_LIMIT) {
3043 napi_create_reference(env, argv[ARRAY_INDEX_THIRD], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
3044 }
3045 asyncContext->env = env;
3046 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
3047 return HandleAsyncWork(
3048 env, asyncContext.release(), "UpdateImsCallMode", NativeUpdateImsCallMode, NativeVoidCallBackWithErrorCode);
3049 }
3050
ReportOttCallDetailsInfo(napi_env env,napi_callback_info info)3051 napi_value NapiCallManager::ReportOttCallDetailsInfo(napi_env env, napi_callback_info info)
3052 {
3053 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
3054 NAPI_ASSERT(env, argc <= VALUE_MAXIMUM_LIMIT, "parameter error!");
3055 uint32_t arrayLength = 0;
3056 NAPI_CALL(env, napi_get_array_length(env, argv[ARRAY_INDEX_FIRST], &arrayLength));
3057 NAPI_ASSERT(env, arrayLength > 0, "Parameter cannot be empty");
3058 auto asyncContext = std::make_unique<OttCallAsyncContext>();
3059 if (asyncContext == nullptr) {
3060 std::string errorCode = std::to_string(napi_generic_failure);
3061 std::string errorMessage = "ReportOttCallDetailsInfo error at baseContext is nullptr";
3062 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
3063 return nullptr;
3064 }
3065 (asyncContext->ottVec).clear();
3066
3067 napi_value napiFormId;
3068 OttCallDetailsInfo tmpOttVec;
3069 (void)memset_s(&tmpOttVec, sizeof(OttCallDetailsInfo), 0, sizeof(OttCallDetailsInfo));
3070 for (uint32_t i = 0; i < arrayLength; i++) {
3071 napi_get_element(env, argv[ARRAY_INDEX_FIRST], i, &napiFormId);
3072 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, napiFormId, napi_object);
3073 NAPI_ASSERT(env, matchFlag, "ReportOttCallDetailsInfo type error, should be napi_object type");
3074 std::string tmpStr = NapiCallManagerUtils::GetStringProperty(env, napiFormId, "phoneNumber");
3075 if (tmpStr.length() > static_cast<size_t>(kMaxNumberLen)) {
3076 TELEPHONY_LOGE("Number out of limit!");
3077 return (napi_value) nullptr;
3078 }
3079 if (memcpy_s(tmpOttVec.phoneNum, kMaxNumberLen, tmpStr.c_str(), tmpStr.length()) != EOK) {
3080 return (napi_value) nullptr;
3081 }
3082 tmpStr = NapiCallManagerUtils::GetStringProperty(env, napiFormId, "bundleName");
3083 if (tmpStr.length() > static_cast<size_t>(kMaxNumberLen)) {
3084 TELEPHONY_LOGE("Number out of limit!");
3085 return (napi_value) nullptr;
3086 }
3087 if (memcpy_s(tmpOttVec.bundleName, kMaxNumberLen, tmpStr.c_str(), tmpStr.length()) != EOK) {
3088 return (napi_value) nullptr;
3089 }
3090 int32_t tmpValue = NapiCallManagerUtils::GetIntProperty(env, napiFormId, "videoState");
3091 tmpOttVec.videoState = static_cast<VideoStateType>(tmpValue);
3092 tmpValue = NapiCallManagerUtils::GetIntProperty(env, napiFormId, "callState");
3093 tmpOttVec.callState = static_cast<TelCallState>(tmpValue);
3094 (asyncContext->ottVec).push_back(tmpOttVec);
3095 }
3096
3097 return HandleAsyncWork(
3098 env, asyncContext.release(), "ReportOttCallDetailsInfo", NativeReportOttCallDetailsInfo, NativeVoidCallBack);
3099 }
3100
ReportOttCallEventInfo(napi_env env,napi_callback_info info)3101 napi_value NapiCallManager::ReportOttCallEventInfo(napi_env env, napi_callback_info info)
3102 {
3103 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
3104 NAPI_ASSERT(env, argc < VALUE_MAXIMUM_LIMIT, "parameter error!");
3105 bool matchFlag = NapiCallManagerUtils::MatchValueType(env, argv[ARRAY_INDEX_FIRST], napi_object);
3106 NAPI_ASSERT(env, matchFlag, "ReportOttCallEventInfo type error, should be object type");
3107 auto asyncContext = std::make_unique<OttEventAsyncContext>();
3108 if (asyncContext == nullptr) {
3109 std::string errorCode = std::to_string(napi_generic_failure);
3110 std::string errorMessage = "ReportOttCallEventInfo error at baseContext is nullptr";
3111 NAPI_CALL(env, napi_throw_error(env, errorCode.c_str(), errorMessage.c_str()));
3112 return nullptr;
3113 }
3114 (void)memset_s(&asyncContext->eventInfo, sizeof(OttCallEventInfo), 0, sizeof(OttCallEventInfo));
3115 int32_t eventId = NapiCallManagerUtils::GetIntProperty(env, argv[ARRAY_INDEX_FIRST], "eventId");
3116 std::string tmpStr = NapiCallManagerUtils::GetStringProperty(env, argv[ARRAY_INDEX_FIRST], "bundleName");
3117 if (tmpStr.length() > static_cast<size_t>(kMaxNumberLen)) {
3118 TELEPHONY_LOGE("Number out of limit!");
3119 return (napi_value) nullptr;
3120 }
3121 asyncContext->eventInfo.ottCallEventId = static_cast<OttCallEventId>(eventId);
3122 if (memcpy_s(asyncContext->eventInfo.bundleName, kMaxNumberLen, tmpStr.c_str(), tmpStr.length()) != EOK) {
3123 return (napi_value) nullptr;
3124 }
3125 return HandleAsyncWork(
3126 env, asyncContext.release(), "ReportOttCallEventInfo", NativeReportOttCallEventInfo, NativeVoidCallBack);
3127 }
3128
CloseUnFinishedUssd(napi_env env,napi_callback_info info)3129 napi_value NapiCallManager::CloseUnFinishedUssd(napi_env env, napi_callback_info info)
3130 {
3131 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
3132 if (!MatchOneNumberParameter(env, argv, argc)) {
3133 TELEPHONY_LOGE("NapiCallManager::CloseUnFinishedUssd MatchOneNumberParameter failed.");
3134 NapiUtil::ThrowParameterError(env);
3135 return nullptr;
3136 }
3137 auto asyncContext = std::make_unique<SupplementAsyncContext>();
3138 if (asyncContext == nullptr) {
3139 TELEPHONY_LOGE("NapiCallManager::CloseUnFinishedUssd asyncContext is nullptr.");
3140 NapiUtil::ThrowParameterError(env);
3141 return nullptr;
3142 }
3143 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->slotId);
3144 if (argc == TWO_VALUE_LIMIT) {
3145 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
3146 }
3147 asyncContext->env = env;
3148 napi_create_reference(env, thisVar, DATA_LENGTH_ONE, &(asyncContext->thisVar));
3149 return HandleAsyncWork(
3150 env, asyncContext.release(), "CloseUnFinishedUssd", NativeCloseUnFinishedUssd, NativeVoidCallBackWithErrorCode);
3151 }
3152
InputDialerSpecialCode(napi_env env,napi_callback_info info)3153 napi_value NapiCallManager::InputDialerSpecialCode(napi_env env, napi_callback_info info)
3154 {
3155 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
3156 if (!MatchOneStringParameter(env, argv, argc)) {
3157 TELEPHONY_LOGE("NapiCallManager::InputDialerSpecialCode MatchOneStringParameter failed.");
3158 NapiUtil::ThrowParameterError(env);
3159 return nullptr;
3160 }
3161
3162 auto asyncContext = std::make_unique<AsyncContext>();
3163 if (asyncContext == nullptr) {
3164 TELEPHONY_LOGE("NapiCallManager::InputDialerSpecialCode asyncContext is nullptr.");
3165 NapiUtil::ThrowParameterError(env);
3166 return nullptr;
3167 }
3168 napi_get_value_string_utf8(
3169 env, argv[ARRAY_INDEX_FIRST], asyncContext->number, PHONE_NUMBER_MAXIMUM_LIMIT, &(asyncContext->numberLen));
3170 if (argc == TWO_VALUE_LIMIT) {
3171 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
3172 }
3173 return HandleAsyncWork(env, asyncContext.release(), "InputDialerSpecialCode", NativeInputDialerSpecialCode,
3174 NativeVoidCallBackWithErrorCode);
3175 }
3176
RemoveMissedIncomingCallNotification(napi_env env,napi_callback_info info)3177 napi_value NapiCallManager::RemoveMissedIncomingCallNotification(napi_env env, napi_callback_info info)
3178 {
3179 GET_PARAMS(env, info, VALUE_MAXIMUM_LIMIT);
3180 if (!MatchEmptyParameter(env, argv, argc)) {
3181 TELEPHONY_LOGE("NapiCallManager::RemoveMissedIncomingCallNotification "
3182 "MatchEmptyParameter failed.");
3183 NapiUtil::ThrowParameterError(env);
3184 return nullptr;
3185 }
3186
3187 auto asyncContext = std::make_unique<AsyncContext>();
3188 if (asyncContext == nullptr) {
3189 TELEPHONY_LOGE("NapiCallManager::RemoveMissedIncomingCallNotification "
3190 "asyncContext is nullptr.");
3191 NapiUtil::ThrowParameterError(env);
3192 return nullptr;
3193 }
3194
3195 if (argc == ONLY_ONE_VALUE) {
3196 napi_create_reference(env, argv[ARRAY_INDEX_FIRST], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
3197 }
3198 return HandleAsyncWork(env, asyncContext.release(), "RemoveMissedIncomingCallNotification",
3199 NativeRemoveMissedIncomingCallNotification, NativeVoidCallBackWithErrorCode);
3200 }
3201
SetVoIPCallState(napi_env env,napi_callback_info info)3202 napi_value NapiCallManager::SetVoIPCallState(napi_env env, napi_callback_info info)
3203 {
3204 GET_PARAMS(env, info, TWO_VALUE_LIMIT);
3205 if (!MatchOneNumberParameter(env, argv, argc)) {
3206 TELEPHONY_LOGE("NapiCallManager::SetVoIPCallState MatchEmptyParameter failed.");
3207 NapiUtil::ThrowParameterError(env);
3208 return nullptr;
3209 }
3210 auto asyncContext = std::make_unique<VoIPCallStateAsyncContext>();
3211 if (asyncContext == nullptr) {
3212 TELEPHONY_LOGE("NapiCallManager::SetVoIPCallState asyncContext is nullptr.");
3213 NapiUtil::ThrowParameterError(env);
3214 return nullptr;
3215 }
3216 napi_get_value_int32(env, argv[ARRAY_INDEX_FIRST], &asyncContext->state);
3217 if (argc == TWO_VALUE_LIMIT) {
3218 napi_create_reference(env, argv[ARRAY_INDEX_SECOND], DATA_LENGTH_ONE, &(asyncContext->callbackRef));
3219 }
3220 return HandleAsyncWork(
3221 env, asyncContext.release(), "SetVoIPCallState", NativeSetVoIPCallState, NativeVoidCallBackWithErrorCode);
3222 }
3223
HasVoiceCapability(napi_env env,napi_callback_info)3224 napi_value NapiCallManager::HasVoiceCapability(napi_env env, napi_callback_info)
3225 {
3226 TELEPHONY_LOGI("napi_call HasVoiceCapability");
3227 napi_value result = nullptr;
3228 napi_get_boolean(env, DelayedSingleton<CallManagerClient>::GetInstance()->HasVoiceCapability(), &result);
3229 return result;
3230 }
3231
NativeCallBack(napi_env env,napi_status status,void * data)3232 void NapiCallManager::NativeCallBack(napi_env env, napi_status status, void *data)
3233 {
3234 if (data == nullptr) {
3235 TELEPHONY_LOGE("data is nullptr");
3236 NapiUtil::ThrowParameterError(env);
3237 return;
3238 }
3239 auto callBackContext = (AsyncContext *)data;
3240 if (callBackContext->deferred != nullptr) {
3241 if (callBackContext->resolved == TELEPHONY_SUCCESS) {
3242 napi_value promiseValue = nullptr;
3243 napi_create_int32(env, callBackContext->resolved, &promiseValue);
3244 napi_resolve_deferred(env, callBackContext->deferred, promiseValue);
3245 } else {
3246 napi_reject_deferred(env, callBackContext->deferred,
3247 NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3248 env, callBackContext->errorCode, callBackContext->eventId));
3249 }
3250 } else if (callBackContext->callbackRef != nullptr) {
3251 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3252 if (callBackContext->resolved == TELEPHONY_SUCCESS) {
3253 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3254 napi_create_int32(env, callBackContext->resolved, &callbackValue[ARRAY_INDEX_SECOND]);
3255 } else {
3256 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3257 env, callBackContext->errorCode, callBackContext->eventId);
3258 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3259 }
3260 napi_value callback = nullptr;
3261 napi_value result = nullptr;
3262 napi_get_reference_value(env, callBackContext->callbackRef, &callback);
3263 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3264 napi_delete_reference(env, callBackContext->callbackRef);
3265 }
3266 napi_delete_async_work(env, callBackContext->work);
3267 delete callBackContext;
3268 callBackContext = nullptr;
3269 }
3270
NativeDialCallBack(napi_env env,napi_status status,void * data)3271 void NapiCallManager::NativeDialCallBack(napi_env env, napi_status status, void *data)
3272 {
3273 if (data == nullptr) {
3274 TELEPHONY_LOGE("data is nullptr");
3275 return;
3276 }
3277 auto asyncContext = (AsyncContext *)data;
3278 if (asyncContext->deferred != nullptr) {
3279 if (asyncContext->resolved == TELEPHONY_SUCCESS) {
3280 napi_value promiseValue = nullptr;
3281 napi_get_boolean(env, true, &promiseValue);
3282 napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3283 } else {
3284 if (asyncContext->errorCode == SLOT_ID_INVALID) {
3285 napi_reject_deferred(env, asyncContext->deferred,
3286 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, "slotId is invalid", SLOT_ID_INVALID));
3287 } else {
3288 std::string errTip = std::to_string(asyncContext->resolved);
3289 napi_reject_deferred(
3290 env, asyncContext->deferred, NapiCallManagerUtils::CreateErrorMessage(env, errTip));
3291 }
3292 }
3293 } else if (asyncContext->callbackRef != nullptr) {
3294 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3295 if (asyncContext->resolved == TELEPHONY_SUCCESS) {
3296 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3297 napi_get_boolean(env, true, &callbackValue[ARRAY_INDEX_SECOND]);
3298 } else {
3299 if (asyncContext->errorCode == SLOT_ID_INVALID) {
3300 callbackValue[ARRAY_INDEX_FIRST] =
3301 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, "slotId is invalid", SLOT_ID_INVALID);
3302 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3303 } else {
3304 std::string errTip = std::to_string(asyncContext->resolved);
3305 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorMessage(env, errTip);
3306 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3307 }
3308 }
3309 napi_value callback = nullptr;
3310 napi_value result = nullptr;
3311 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3312 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3313 napi_delete_reference(env, asyncContext->callbackRef);
3314 }
3315 napi_delete_async_work(env, asyncContext->work);
3316 delete asyncContext;
3317 asyncContext = nullptr;
3318 }
3319
NativeVoidCallBack(napi_env env,napi_status status,void * data)3320 void NapiCallManager::NativeVoidCallBack(napi_env env, napi_status status, void *data)
3321 {
3322 if (data == nullptr) {
3323 TELEPHONY_LOGE("data is nullptr");
3324 return;
3325 }
3326 auto voidCallBackContext = (AsyncContext *)data;
3327 if (voidCallBackContext->deferred != nullptr) {
3328 if (voidCallBackContext->resolved == TELEPHONY_SUCCESS) {
3329 napi_value promiseValue = nullptr;
3330 napi_get_null(env, &promiseValue);
3331 napi_status ret = napi_resolve_deferred(env, voidCallBackContext->deferred, promiseValue);
3332 TELEPHONY_LOGI("promise successful result = %{public}d", ret);
3333 } else {
3334 std::string errTip = std::to_string(voidCallBackContext->resolved);
3335 napi_status ret = napi_reject_deferred(
3336 env, voidCallBackContext->deferred, NapiCallManagerUtils::CreateErrorMessage(env, errTip));
3337 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3338 }
3339 } else if (voidCallBackContext->callbackRef != nullptr) {
3340 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3341 if (voidCallBackContext->resolved == TELEPHONY_SUCCESS) {
3342 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3343 napi_get_null(env, &callbackValue[ARRAY_INDEX_SECOND]);
3344 } else {
3345 std::string errTip = std::to_string(voidCallBackContext->resolved);
3346 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorMessage(env, errTip);
3347 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3348 }
3349 napi_value callback = nullptr;
3350 napi_value result = nullptr;
3351 napi_get_reference_value(env, voidCallBackContext->callbackRef, &callback);
3352 napi_status ret = napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3353 TELEPHONY_LOGI("callback result = %{public}d", ret);
3354 napi_delete_reference(env, voidCallBackContext->callbackRef);
3355 }
3356 napi_delete_async_work(env, voidCallBackContext->work);
3357 delete voidCallBackContext;
3358 voidCallBackContext = nullptr;
3359 }
3360
NativeVoidCallBackWithErrorCode(napi_env env,napi_status status,void * data)3361 void NapiCallManager::NativeVoidCallBackWithErrorCode(napi_env env, napi_status status, void *data)
3362 {
3363 if (data == nullptr) {
3364 TELEPHONY_LOGE("NapiCallManager::NativeVoidCallBackWithErrorCode data is nullptr");
3365 NapiUtil::ThrowParameterError(env);
3366 return;
3367 }
3368 auto asyncContext = (AsyncContext *)data;
3369 if (asyncContext->deferred != nullptr) {
3370 if (asyncContext->resolved == TELEPHONY_SUCCESS) {
3371 napi_value promiseValue = nullptr;
3372 napi_get_null(env, &promiseValue);
3373 napi_status ret = napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3374 TELEPHONY_LOGI("promise successful result = %{public}d", ret);
3375 } else {
3376 napi_status ret = napi_reject_deferred(env, asyncContext->deferred,
3377 NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3378 env, asyncContext->errorCode, asyncContext->eventId));
3379 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3380 }
3381 } else if (asyncContext->callbackRef != nullptr) {
3382 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3383 if (asyncContext->resolved == TELEPHONY_SUCCESS) {
3384 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3385 napi_get_null(env, &callbackValue[ARRAY_INDEX_SECOND]);
3386 } else {
3387 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3388 env, asyncContext->errorCode, asyncContext->eventId);
3389 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3390 }
3391 napi_value callback = nullptr;
3392 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3393 napi_value result = nullptr;
3394 napi_status ret = napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3395 TELEPHONY_LOGI("callback result = %{public}d", ret);
3396 napi_delete_reference(env, asyncContext->callbackRef);
3397 }
3398 napi_delete_async_work(env, asyncContext->work);
3399 delete asyncContext;
3400 asyncContext = nullptr;
3401 }
3402
NativePropertyCallBack(napi_env env,napi_status status,void * data)3403 void NapiCallManager::NativePropertyCallBack(napi_env env, napi_status status, void *data)
3404 {
3405 if (data == nullptr) {
3406 TELEPHONY_LOGE("data is nullptr");
3407 return;
3408 }
3409 auto asyncContext = (AsyncContext *)data;
3410 if (asyncContext->deferred != nullptr) {
3411 napi_value promiseValue = nullptr;
3412 napi_create_int32(env, asyncContext->resolved, &promiseValue);
3413 napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3414 } else {
3415 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3416 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3417 napi_create_int32(env, asyncContext->resolved, &callbackValue[ARRAY_INDEX_SECOND]);
3418 napi_value callback = nullptr;
3419 napi_value result = nullptr;
3420 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3421 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3422 napi_delete_reference(env, asyncContext->callbackRef);
3423 }
3424 napi_delete_async_work(env, asyncContext->work);
3425 delete asyncContext;
3426 asyncContext = nullptr;
3427 }
3428
NativeGetMainCallIdCallBack(napi_env env,napi_status status,void * data)3429 void NapiCallManager::NativeGetMainCallIdCallBack(napi_env env, napi_status status, void *data)
3430 {
3431 if (data == nullptr) {
3432 TELEPHONY_LOGE("NapiCallManager::NativeGetMainCallIdCallBack data is nullptr");
3433 NapiUtil::ThrowParameterError(env);
3434 return;
3435 }
3436 auto asyncContext = (IntResultAsyncContext *)data;
3437 if (asyncContext->deferred != nullptr) {
3438 if (asyncContext->resolved == TELEPHONY_SUCCESS) {
3439 napi_value promiseValue = nullptr;
3440 napi_create_int32(env, asyncContext->result, &promiseValue);
3441 napi_status ret = napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3442 TELEPHONY_LOGI("promise successful result = %{public}d", ret);
3443 } else {
3444 JsError error = NapiUtil::ConverErrorMessageForJs(asyncContext->errorCode);
3445 napi_status ret = napi_reject_deferred(env, asyncContext->deferred,
3446 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode));
3447 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3448 }
3449 } else if (asyncContext->callbackRef != nullptr) {
3450 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3451 if (asyncContext->resolved == TELEPHONY_SUCCESS) {
3452 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3453 napi_create_int32(env, asyncContext->result, &callbackValue[ARRAY_INDEX_SECOND]);
3454 } else {
3455 JsError error = NapiUtil::ConverErrorMessageForJs(asyncContext->errorCode);
3456 callbackValue[ARRAY_INDEX_FIRST] =
3457 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode);
3458 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3459 }
3460 napi_value callback = nullptr;
3461 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3462 napi_value result = nullptr;
3463 napi_status ret = napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3464 TELEPHONY_LOGI("callback result = %{public}d", ret);
3465 napi_delete_reference(env, asyncContext->callbackRef);
3466 }
3467 napi_delete_async_work(env, asyncContext->work);
3468 delete asyncContext;
3469 asyncContext = nullptr;
3470 }
3471
NativeIsImsSwitchEnabledCallBack(napi_env env,napi_status status,void * data)3472 void NapiCallManager::NativeIsImsSwitchEnabledCallBack(napi_env env, napi_status status, void *data)
3473 {
3474 if (data == nullptr) {
3475 TELEPHONY_LOGE("NapiCallManager::NativeIsImsSwitchEnabledCallBack data is nullptr");
3476 NapiUtil::ThrowParameterError(env);
3477 return;
3478 }
3479 auto asyncContext = (ImsSwitchAsyncContext *)data;
3480 if (asyncContext->deferred != nullptr) {
3481 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3482 napi_value promiseValue = nullptr;
3483 napi_get_boolean(env, asyncContext->enabled, &promiseValue);
3484 napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3485 } else {
3486 JsError error = NapiUtil::ConverErrorMessageForJs(asyncContext->errorCode);
3487 napi_reject_deferred(env, asyncContext->deferred,
3488 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode));
3489 }
3490 } else {
3491 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3492 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3493 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3494 napi_get_boolean(env, asyncContext->enabled, &callbackValue[ARRAY_INDEX_SECOND]);
3495 } else {
3496 JsError error = NapiUtil::ConverErrorMessageForJs(asyncContext->errorCode);
3497 callbackValue[ARRAY_INDEX_FIRST] =
3498 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode);
3499 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3500 }
3501 napi_value callback = nullptr;
3502 napi_value result = nullptr;
3503 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3504 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3505 napi_delete_reference(env, asyncContext->callbackRef);
3506 }
3507 napi_delete_async_work(env, asyncContext->work);
3508 delete asyncContext;
3509 asyncContext = nullptr;
3510 }
3511
NativeGetVoNRStateCallBack(napi_env env,napi_status status,void * data)3512 void NapiCallManager::NativeGetVoNRStateCallBack(napi_env env, napi_status status, void *data)
3513 {
3514 if (data == nullptr) {
3515 TELEPHONY_LOGE("NapiCallManager::NativeGetVoNRStateCallBack data is nullptr");
3516 NapiUtil::ThrowParameterError(env);
3517 return;
3518 }
3519 auto getVoNRStateContext = (VoNRSwitchAsyncContext *)data;
3520 if (getVoNRStateContext->deferred != nullptr) {
3521 if (getVoNRStateContext->errorCode == TELEPHONY_SUCCESS) {
3522 napi_value promiseValue = nullptr;
3523 napi_create_int32(env, getVoNRStateContext->state, &promiseValue);
3524 napi_resolve_deferred(env, getVoNRStateContext->deferred, promiseValue);
3525 } else {
3526 napi_reject_deferred(env, getVoNRStateContext->deferred,
3527 NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3528 env, getVoNRStateContext->errorCode, getVoNRStateContext->eventId));
3529 }
3530 } else {
3531 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3532 if (getVoNRStateContext->errorCode == TELEPHONY_SUCCESS) {
3533 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3534 napi_create_int32(env, getVoNRStateContext->state, &callbackValue[ARRAY_INDEX_SECOND]);
3535 } else {
3536 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3537 env, getVoNRStateContext->errorCode, getVoNRStateContext->eventId);
3538 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3539 }
3540 napi_value callback = nullptr;
3541 napi_value result = nullptr;
3542 napi_get_reference_value(env, getVoNRStateContext->callbackRef, &callback);
3543 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3544 napi_delete_reference(env, getVoNRStateContext->callbackRef);
3545 }
3546 napi_delete_async_work(env, getVoNRStateContext->work);
3547 delete getVoNRStateContext;
3548 getVoNRStateContext = nullptr;
3549 }
3550
NativeBoolCallBack(napi_env env,napi_status status,void * data)3551 void NapiCallManager::NativeBoolCallBack(napi_env env, napi_status status, void *data)
3552 {
3553 if (data == nullptr) {
3554 TELEPHONY_LOGE("data is nullptr");
3555 return;
3556 }
3557 auto boolCallBackContext = (AsyncContext *)data;
3558 if (boolCallBackContext->deferred != nullptr) {
3559 if (boolCallBackContext->resolved == BOOL_VALUE_IS_TRUE) {
3560 napi_value promiseValue = nullptr;
3561 napi_get_boolean(env, true, &promiseValue);
3562 napi_resolve_deferred(env, boolCallBackContext->deferred, promiseValue);
3563 } else if (boolCallBackContext->errorCode == TELEPHONY_SUCCESS) {
3564 napi_value promiseValue = nullptr;
3565 napi_get_boolean(env, false, &promiseValue);
3566 napi_resolve_deferred(env, boolCallBackContext->deferred, promiseValue);
3567 } else if (boolCallBackContext->errorCode == SLOT_ID_INVALID) {
3568 napi_reject_deferred(env, boolCallBackContext->deferred,
3569 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, "slotId is invalid", SLOT_ID_INVALID));
3570 } else {
3571 std::string errTip = std::to_string(boolCallBackContext->errorCode);
3572 napi_reject_deferred(
3573 env, boolCallBackContext->deferred, NapiCallManagerUtils::CreateErrorMessage(env, errTip));
3574 }
3575 } else {
3576 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3577 if (boolCallBackContext->resolved == BOOL_VALUE_IS_TRUE) {
3578 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3579 napi_get_boolean(env, true, &callbackValue[ARRAY_INDEX_SECOND]);
3580 } else if (boolCallBackContext->errorCode == TELEPHONY_SUCCESS) {
3581 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3582 napi_get_boolean(env, false, &callbackValue[ARRAY_INDEX_SECOND]);
3583 } else if (boolCallBackContext->errorCode == SLOT_ID_INVALID) {
3584 callbackValue[ARRAY_INDEX_FIRST] =
3585 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, "slotId is invalid", SLOT_ID_INVALID);
3586 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3587 } else {
3588 std::string errTip = std::to_string(boolCallBackContext->errorCode);
3589 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorMessage(env, errTip);
3590 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3591 }
3592 napi_value callback = nullptr;
3593 napi_value result = nullptr;
3594 napi_get_reference_value(env, boolCallBackContext->callbackRef, &callback);
3595 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3596 napi_delete_reference(env, boolCallBackContext->callbackRef);
3597 }
3598 napi_delete_async_work(env, boolCallBackContext->work);
3599 delete boolCallBackContext;
3600 boolCallBackContext = nullptr;
3601 }
3602
NativeIsEmergencyPhoneNumberCallBack(napi_env env,napi_status status,void * data)3603 void NapiCallManager::NativeIsEmergencyPhoneNumberCallBack(napi_env env, napi_status status, void *data)
3604 {
3605 if (data == nullptr) {
3606 TELEPHONY_LOGE("NapiCallManager::NativeIsEmergencyPhoneNumberCallBack data is nullptr");
3607 NapiUtil::ThrowParameterError(env);
3608 return;
3609 }
3610 auto asyncContext = (UtilsAsyncContext *)data;
3611 if (asyncContext->deferred != nullptr) {
3612 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3613 napi_value promiseValue = nullptr;
3614 napi_get_boolean(env, asyncContext->enabled, &promiseValue);
3615 napi_status ret = napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3616 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3617 } else {
3618 JsError error = NapiUtil::ConverErrorMessageForJs(asyncContext->errorCode);
3619 napi_status ret = napi_reject_deferred(env, asyncContext->deferred,
3620 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode));
3621 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3622 }
3623 } else if (asyncContext->callbackRef != nullptr) {
3624 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3625 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3626 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3627 napi_get_boolean(env, asyncContext->enabled, &callbackValue[ARRAY_INDEX_SECOND]);
3628 } else {
3629 JsError error = NapiUtil::ConverErrorMessageForJs(asyncContext->errorCode);
3630 callbackValue[ARRAY_INDEX_FIRST] =
3631 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode);
3632 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3633 }
3634 napi_value callback = nullptr;
3635 napi_value result = nullptr;
3636 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3637 napi_status ret = napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3638 TELEPHONY_LOGI("callback result = %{public}d", ret);
3639 napi_delete_reference(env, asyncContext->callbackRef);
3640 }
3641 napi_delete_async_work(env, asyncContext->work);
3642 delete asyncContext;
3643 asyncContext = nullptr;
3644 }
3645
NativeBoolCallBackWithErrorCode(napi_env env,napi_status status,void * data)3646 void NapiCallManager::NativeBoolCallBackWithErrorCode(napi_env env, napi_status status, void *data)
3647 {
3648 if (data == nullptr) {
3649 TELEPHONY_LOGE("NapiCallManager::NativeBoolCallBackWithErrorCode data is nullptr");
3650 NapiUtil::ThrowParameterError(env);
3651 return;
3652 }
3653 auto asyncContext = (BoolResultAsyncContext *)data;
3654 if (asyncContext->deferred != nullptr) {
3655 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3656 napi_value promiseValue = nullptr;
3657 napi_get_boolean(env, asyncContext->enabled, &promiseValue);
3658 napi_status ret = napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3659 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3660 } else {
3661 napi_status ret = napi_reject_deferred(env, asyncContext->deferred,
3662 NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3663 env, asyncContext->errorCode, asyncContext->eventId));
3664 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3665 }
3666 } else if (asyncContext->callbackRef != nullptr) {
3667 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3668 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3669 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3670 napi_get_boolean(env, asyncContext->enabled, &callbackValue[ARRAY_INDEX_SECOND]);
3671 } else {
3672 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3673 env, asyncContext->errorCode, asyncContext->eventId);
3674 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3675 }
3676 napi_value callback = nullptr;
3677 napi_value result = nullptr;
3678 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3679 napi_status ret = napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3680 TELEPHONY_LOGI("callback result = %{public}d", ret);
3681 napi_delete_reference(env, asyncContext->callbackRef);
3682 }
3683 napi_delete_async_work(env, asyncContext->work);
3684 delete asyncContext;
3685 asyncContext = nullptr;
3686 }
3687
NativeFormatNumberCallBack(napi_env env,napi_status status,void * data)3688 void NapiCallManager::NativeFormatNumberCallBack(napi_env env, napi_status status, void *data)
3689 {
3690 if (data == nullptr) {
3691 TELEPHONY_LOGE("NapiCallManager::NativeFormatNumberCallBack data is nullptr");
3692 NapiUtil::ThrowParameterError(env);
3693 return;
3694 }
3695 auto formatNumberContext = (UtilsAsyncContext *)data;
3696 if (formatNumberContext->deferred != nullptr) {
3697 if (formatNumberContext->resolved == TELEPHONY_SUCCESS) {
3698 napi_value promiseValue = nullptr;
3699 napi_create_string_utf8(env, Str16ToStr8(formatNumberContext->formatNumber).data(),
3700 formatNumberContext->formatNumber.length(), &promiseValue);
3701 napi_status ret = napi_resolve_deferred(env, formatNumberContext->deferred, promiseValue);
3702 TELEPHONY_LOGD("promise successful result = %{public}d", ret);
3703 } else {
3704 JsError error = NapiUtil::ConverErrorMessageForJs(formatNumberContext->errorCode);
3705 napi_status ret = napi_reject_deferred(env, formatNumberContext->deferred,
3706 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode));
3707 TELEPHONY_LOGI("promise failed result = %{public}d", ret);
3708 }
3709 } else if (formatNumberContext->callbackRef != nullptr) {
3710 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3711 if (formatNumberContext->resolved == TELEPHONY_SUCCESS) {
3712 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3713 napi_create_string_utf8(env, Str16ToStr8(formatNumberContext->formatNumber).data(),
3714 formatNumberContext->formatNumber.length(), &callbackValue[ARRAY_INDEX_SECOND]);
3715 } else {
3716 JsError error = NapiUtil::ConverErrorMessageForJs(formatNumberContext->errorCode);
3717 callbackValue[ARRAY_INDEX_FIRST] =
3718 NapiCallManagerUtils::CreateErrorMessageWithErrorCode(env, error.errorMessage, error.errorCode);
3719 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3720 }
3721 napi_value callback = nullptr;
3722 napi_value result = nullptr;
3723 napi_get_reference_value(env, formatNumberContext->callbackRef, &callback);
3724 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3725 napi_delete_reference(env, formatNumberContext->callbackRef);
3726 }
3727 napi_delete_async_work(env, formatNumberContext->work);
3728 delete formatNumberContext;
3729 formatNumberContext = nullptr;
3730 }
3731
NativeListCallBack(napi_env env,napi_status status,void * data)3732 void NapiCallManager::NativeListCallBack(napi_env env, napi_status status, void *data)
3733 {
3734 if (data == nullptr) {
3735 NapiUtil::ThrowParameterError(env);
3736 return;
3737 }
3738 int32_t i = 0;
3739 napi_value info = nullptr;
3740 auto listCallBakcContext = (ListAsyncContext *)data;
3741 std::vector<std::u16string>::iterator it = listCallBakcContext->listResult.begin();
3742 if (listCallBakcContext->deferred != nullptr) {
3743 if (listCallBakcContext->resolved == TELEPHONY_SUCCESS) {
3744 napi_value promiseValue = nullptr;
3745 napi_create_array(env, &promiseValue);
3746 for (; it != listCallBakcContext->listResult.end(); ++it) {
3747 napi_create_string_utf8(env, Str16ToStr8(*it).data(), (*it).length(), &info);
3748 napi_set_element(env, promiseValue, i, info);
3749 ++i;
3750 }
3751 napi_resolve_deferred(env, listCallBakcContext->deferred, promiseValue);
3752 } else {
3753 napi_reject_deferred(env, listCallBakcContext->deferred,
3754 NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3755 env, listCallBakcContext->errorCode, listCallBakcContext->eventId));
3756 }
3757 } else if (listCallBakcContext->callbackRef != nullptr) {
3758 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3759 if (listCallBakcContext->resolved == TELEPHONY_SUCCESS) {
3760 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3761 napi_create_array(env, &callbackValue[ARRAY_INDEX_SECOND]);
3762 for (; it != listCallBakcContext->listResult.end(); ++it) {
3763 napi_create_string_utf8(env, Str16ToStr8(*it).data(), (*it).length(), &info);
3764 napi_set_element(env, callbackValue[ARRAY_INDEX_SECOND], i, info);
3765 ++i;
3766 }
3767 } else {
3768 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateErrorCodeAndMessageForJs(
3769 env, listCallBakcContext->errorCode, listCallBakcContext->eventId);
3770 callbackValue[ARRAY_INDEX_SECOND] = NapiCallManagerUtils::CreateUndefined(env);
3771 }
3772 napi_value callback = nullptr;
3773 napi_value result = nullptr;
3774 napi_get_reference_value(env, listCallBakcContext->callbackRef, &callback);
3775 napi_call_function(env, nullptr, callback, std::size(callbackValue), callbackValue, &result);
3776 napi_delete_reference(env, listCallBakcContext->callbackRef);
3777 }
3778 napi_delete_async_work(env, listCallBakcContext->work);
3779 delete listCallBakcContext;
3780 listCallBakcContext = nullptr;
3781 }
3782
NativeOffCallBack(napi_env env,napi_status status,void * data)3783 void NapiCallManager::NativeOffCallBack(napi_env env, napi_status status, void *data)
3784 {
3785 if (data == nullptr) {
3786 TELEPHONY_LOGE("NapiCallManager::NativeOffCallBack data is nullptr");
3787 NapiUtil::ThrowParameterError(env);
3788 return;
3789 }
3790 auto asyncContext = (AsyncContext *)data;
3791 if (asyncContext->deferred != nullptr) {
3792 napi_value promiseValue = nullptr;
3793 napi_get_null(env, &promiseValue);
3794 napi_status ret = napi_resolve_deferred(env, asyncContext->deferred, promiseValue);
3795 TELEPHONY_LOGI("promise result = %{public}d", ret);
3796 } else if (asyncContext->callbackRef != nullptr) {
3797 napi_value callbackValue[ARRAY_INDEX_THIRD] = { 0 };
3798 callbackValue[ARRAY_INDEX_FIRST] = NapiCallManagerUtils::CreateUndefined(env);
3799 napi_value callback = nullptr;
3800 napi_value result = nullptr;
3801 napi_get_reference_value(env, asyncContext->callbackRef, &callback);
3802 napi_status ret = napi_call_function(env, nullptr, callback, DATA_LENGTH_ONE, callbackValue, &result);
3803 TELEPHONY_LOGI("callback result = %{public}d", ret);
3804 napi_delete_reference(env, asyncContext->callbackRef);
3805 }
3806 napi_delete_async_work(env, asyncContext->work);
3807 delete asyncContext;
3808 asyncContext = nullptr;
3809 }
3810
GetDialInfo(napi_env env,napi_value objValue,DialAsyncContext & asyncContext)3811 void NapiCallManager::GetDialInfo(napi_env env, napi_value objValue, DialAsyncContext &asyncContext)
3812 {
3813 asyncContext.accountId = NapiCallManagerUtils::GetIntProperty(env, objValue, "accountId");
3814 asyncContext.videoState = NapiCallManagerUtils::GetIntProperty(env, objValue, "videoState");
3815 asyncContext.dialScene = NapiCallManagerUtils::GetIntProperty(env, objValue, "dialScene");
3816 asyncContext.dialType = NapiCallManagerUtils::GetIntProperty(env, objValue, "dialType");
3817 }
3818
GetSmsInfo(napi_env env,napi_value objValue,RejectAsyncContext & asyncContext)3819 void NapiCallManager::GetSmsInfo(napi_env env, napi_value objValue, RejectAsyncContext &asyncContext)
3820 {
3821 asyncContext.isSendSms = true;
3822 asyncContext.messageContent = NapiCallManagerUtils::GetStringProperty(env, objValue, "messageContent");
3823 }
3824
GetRestrictionInfo(napi_env env,napi_value objValue,CallRestrictionAsyncContext & asyncContext)3825 int32_t NapiCallManager::GetRestrictionInfo(
3826 napi_env env, napi_value objValue, CallRestrictionAsyncContext &asyncContext)
3827 {
3828 int32_t type = 0;
3829 int32_t mode = 0;
3830 std::string pw = "";
3831 if (!NapiCallManagerUtils::GetUssdIntProperty(env, objValue, "type", type) ||
3832 !NapiCallManagerUtils::GetUssdIntProperty(env, objValue, "mode", mode) ||
3833 !NapiCallManagerUtils::GetUssdStringProperty(env, objValue, "password", pw)) {
3834 NapiUtil::ThrowParameterError(env);
3835 return ERROR_PARAMETER_TYPE_INVALID;
3836 }
3837 if (pw.length() > static_cast<size_t>(kMaxNumberLen)) {
3838 TELEPHONY_LOGE("Number out of limit!");
3839 return TELEPHONY_ERR_ARGUMENT_INVALID;
3840 }
3841 if (memcpy_s(asyncContext.info.password, kMaxNumberLen, pw.c_str(), pw.length()) != EOK) {
3842 TELEPHONY_LOGE("memcpy_s failed!");
3843 return TELEPHONY_ERR_MEMCPY_FAIL;
3844 }
3845 asyncContext.info.fac = static_cast<CallRestrictionType>(type);
3846 asyncContext.info.mode = static_cast<CallRestrictionMode>(mode);
3847 TELEPHONY_LOGI("GetRestrictionInfo: type = %{public}d, mode = %{public}d",
3848 asyncContext.info.fac, asyncContext.info.mode);
3849 return TELEPHONY_SUCCESS;
3850 }
3851
GetTransferInfo(napi_env env,napi_value objValue,CallTransferAsyncContext & asyncContext)3852 int32_t NapiCallManager::GetTransferInfo(napi_env env, napi_value objValue, CallTransferAsyncContext &asyncContext)
3853 {
3854 int32_t type = 0;
3855 int32_t settingType = 0;
3856 std::string transferNum = "";
3857 if (!NapiCallManagerUtils::GetUssdIntProperty(env, objValue, "type", type) ||
3858 !NapiCallManagerUtils::GetUssdIntProperty(env, objValue, "settingType", settingType) ||
3859 !NapiCallManagerUtils::GetUssdStringProperty(env, objValue, "transferNum", transferNum)) {
3860 return ERROR_PARAMETER_TYPE_INVALID;
3861 }
3862 int32_t startHour = NapiCallManagerUtils::GetIntProperty(env, objValue, "startHour");
3863 int32_t startMinute = NapiCallManagerUtils::GetIntProperty(env, objValue, "startMinute");
3864 int32_t endHour = NapiCallManagerUtils::GetIntProperty(env, objValue, "endHour");
3865 int32_t endMinute = NapiCallManagerUtils::GetIntProperty(env, objValue, "endMinute");
3866 if (transferNum.length() > static_cast<size_t>(kMaxNumberLen)) {
3867 TELEPHONY_LOGE("Number out of limit!");
3868 return TELEPHONY_ERR_ARGUMENT_INVALID;
3869 }
3870 if (memcpy_s(asyncContext.info.transferNum, kMaxNumberLen, transferNum.c_str(), transferNum.length()) != EOK) {
3871 TELEPHONY_LOGE("memcpy_s failed!");
3872 return TELEPHONY_ERR_MEMCPY_FAIL;
3873 }
3874 asyncContext.info.settingType = static_cast<CallTransferSettingType>(settingType);
3875 asyncContext.info.type = static_cast<CallTransferType>(type);
3876 asyncContext.info.startHour = startHour;
3877 asyncContext.info.startMinute = startMinute;
3878 asyncContext.info.endHour = endHour;
3879 asyncContext.info.endMinute = endMinute;
3880 TELEPHONY_LOGI(
3881 "GetTransferInfo: type = %{public}d, settingType = %{public}d, startHour = %{public}d, startMinute = "
3882 "%{public}d, endHour = %{public}d, endMinute = %{public}d",
3883 asyncContext.info.type, asyncContext.info.settingType, asyncContext.info.startHour,
3884 asyncContext.info.startMinute, asyncContext.info.endHour, asyncContext.info.endMinute);
3885 return TELEPHONY_SUCCESS;
3886 }
3887
NativeDial(napi_env env,void * data)3888 void NapiCallManager::NativeDial(napi_env env, void *data)
3889 {
3890 if (data == nullptr) {
3891 TELEPHONY_LOGE("data is nullptr");
3892 return;
3893 }
3894 auto asyncContext = (DialAsyncContext *)data;
3895 if (!IsValidSlotId(asyncContext->accountId)) {
3896 TELEPHONY_LOGE("NativeDial slotId is invalid");
3897 asyncContext->errorCode = SLOT_ID_INVALID;
3898 return;
3899 }
3900 std::string phoneNumber(asyncContext->number, asyncContext->numberLen);
3901 OHOS::AppExecFwk::PacMap dialInfo;
3902 dialInfo.PutIntValue("accountId", asyncContext->accountId);
3903 dialInfo.PutIntValue("videoState", asyncContext->videoState);
3904 dialInfo.PutIntValue("dialScene", asyncContext->dialScene);
3905 dialInfo.PutIntValue("dialType", asyncContext->dialType);
3906 asyncContext->resolved =
3907 DelayedSingleton<CallManagerClient>::GetInstance()->DialCall(Str8ToStr16(phoneNumber), dialInfo);
3908 }
3909
NativeDialCall(napi_env env,void * data)3910 void NapiCallManager::NativeDialCall(napi_env env, void *data)
3911 {
3912 if (data == nullptr) {
3913 TELEPHONY_LOGE("NapiCallManager::NativeDialCall data is nullptr");
3914 NapiUtil::ThrowParameterError(env);
3915 return;
3916 }
3917 auto asyncContext = (DialAsyncContext *)data;
3918 if (!IsValidSlotId(asyncContext->accountId)) {
3919 TELEPHONY_LOGE("NativeDialCall slotId is invalid");
3920 asyncContext->errorCode = SLOT_ID_INVALID;
3921 return;
3922 }
3923 asyncContext->eventId = CALL_MANAGER_DIAL_CALL;
3924 std::string phoneNumber(asyncContext->number, asyncContext->numberLen);
3925 std::u16string tmpPhoneNumber = Str8ToStr16(phoneNumber);
3926 bool isEmergencyNumber = false;
3927 if (!(DelayedSingleton<CallManagerClient>::GetInstance()->IsEmergencyPhoneNumber(
3928 tmpPhoneNumber, asyncContext->accountId, isEmergencyNumber) == TELEPHONY_SUCCESS && isEmergencyNumber)) {
3929 int32_t state;
3930 DelayedSingleton<CallManagerClient>::GetInstance()->GetVoIPCallState(state);
3931 if (state == (int32_t)CallStateToApp::CALL_STATE_OFFHOOK
3932 || state == (int32_t)CallStateToApp::CALL_STATE_RINGING) {
3933 TELEPHONY_LOGE("VoIP CALL is active, cannot dial now");
3934 asyncContext->errorCode = CALL_ERR_CALL_COUNTS_EXCEED_LIMIT;
3935 return;
3936 }
3937 }
3938
3939 OHOS::AppExecFwk::PacMap dialInfo;
3940 dialInfo.PutIntValue("accountId", asyncContext->accountId);
3941 dialInfo.PutIntValue("videoState", asyncContext->videoState);
3942 dialInfo.PutIntValue("dialScene", asyncContext->dialScene);
3943 dialInfo.PutIntValue("dialType", asyncContext->dialType);
3944 asyncContext->errorCode =
3945 DelayedSingleton<CallManagerClient>::GetInstance()->DialCall(Str8ToStr16(phoneNumber), dialInfo);
3946 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3947 asyncContext->resolved = TELEPHONY_SUCCESS;
3948 }
3949 }
3950
NativeMakeCall(napi_env env,void * data)3951 void NapiCallManager::NativeMakeCall(napi_env env, void *data)
3952 {
3953 if (data == nullptr) {
3954 TELEPHONY_LOGE("NapiCallManager::NativeMakeCall data is nullptr");
3955 NapiUtil::ThrowParameterError(env);
3956 return;
3957 }
3958 auto asyncContext = (AsyncContext *)data;
3959 std::string phoneNumber(asyncContext->number, asyncContext->numberLen);
3960 AAFwk::Want want;
3961 AppExecFwk::ElementName element("", "com.ohos.contacts", "com.ohos.contacts.MainAbility");
3962 want.SetElement(element);
3963 AAFwk::WantParams wantParams;
3964 wantParams.SetParam("phoneNumber", AAFwk::String::Box(phoneNumber));
3965 wantParams.SetParam("pageFlag", AAFwk::String::Box("page_flag_edit_before_calling"));
3966 wantParams.SetParam(AAFwk::Want::PARAM_BACK_TO_OTHER_MISSION_STACK, AAFwk::Boolean::Box(true));
3967 want.SetParams(wantParams);
3968 ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want);
3969 if (err != ERR_OK) {
3970 TELEPHONY_LOGE("Fail to make call, err:%{public}d", err);
3971 asyncContext->errorCode = TELEPHONY_ERR_UNINIT;
3972 return;
3973 }
3974 asyncContext->resolved = TELEPHONY_SUCCESS;
3975 }
3976
NativeAnswerCall(napi_env env,void * data)3977 void NapiCallManager::NativeAnswerCall(napi_env env, void *data)
3978 {
3979 if (data == nullptr) {
3980 TELEPHONY_LOGE("NapiCallManager::NativeAnswerCall data is nullptr");
3981 NapiUtil::ThrowParameterError(env);
3982 return;
3983 }
3984 auto asyncContext = (AnswerAsyncContext *)data;
3985 asyncContext->errorCode =
3986 DelayedSingleton<CallManagerClient>::GetInstance()->AnswerCall(asyncContext->callId, asyncContext->videoState);
3987 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
3988 asyncContext->resolved = TELEPHONY_SUCCESS;
3989 }
3990 asyncContext->eventId = CALL_MANAGER_ANSWER_CALL;
3991 }
3992
NativeRejectCall(napi_env env,void * data)3993 void NapiCallManager::NativeRejectCall(napi_env env, void *data)
3994 {
3995 if (data == nullptr) {
3996 TELEPHONY_LOGE("NapiCallManager::NativeRejectCall data is nullptr");
3997 NapiUtil::ThrowParameterError(env);
3998 return;
3999 }
4000 auto asyncContext = (RejectAsyncContext *)data;
4001 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->RejectCall(
4002 asyncContext->callId, asyncContext->isSendSms, Str8ToStr16(asyncContext->messageContent));
4003 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4004 asyncContext->resolved = TELEPHONY_SUCCESS;
4005 }
4006 asyncContext->eventId = CALL_MANAGER_REJECT_CALL;
4007 }
4008
NativeHangUpCall(napi_env env,void * data)4009 void NapiCallManager::NativeHangUpCall(napi_env env, void *data)
4010 {
4011 if (data == nullptr) {
4012 TELEPHONY_LOGE("NapiCallManager::NativeHangUpCall data is nullptr");
4013 NapiUtil::ThrowParameterError(env);
4014 return;
4015 }
4016 auto asyncContext = (AsyncContext *)data;
4017 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->HangUpCall(asyncContext->callId);
4018 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4019 asyncContext->resolved = TELEPHONY_SUCCESS;
4020 }
4021 asyncContext->eventId = CALL_MANAGER_DISCONNECT_CALL;
4022 }
4023
NativeHoldCall(napi_env env,void * data)4024 void NapiCallManager::NativeHoldCall(napi_env env, void *data)
4025 {
4026 if (data == nullptr) {
4027 TELEPHONY_LOGE("NapiCallManager::NativeHoldCall data is nullptr");
4028 NapiUtil::ThrowParameterError(env);
4029 return;
4030 }
4031 auto asyncContext = (AsyncContext *)data;
4032 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->HoldCall(asyncContext->callId);
4033 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4034 asyncContext->resolved = TELEPHONY_SUCCESS;
4035 }
4036 asyncContext->eventId = CALL_MANAGER_HOLD_CALL;
4037 }
4038
NativeUnHoldCall(napi_env env,void * data)4039 void NapiCallManager::NativeUnHoldCall(napi_env env, void *data)
4040 {
4041 if (data == nullptr) {
4042 TELEPHONY_LOGE("NapiCallManager::NativeUnHoldCall data is nullptr");
4043 NapiUtil::ThrowParameterError(env);
4044 return;
4045 }
4046 auto asyncContext = (AsyncContext *)data;
4047 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->UnHoldCall(asyncContext->callId);
4048 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4049 asyncContext->resolved = TELEPHONY_SUCCESS;
4050 }
4051 asyncContext->eventId = CALL_MANAGER_UNHOLD_CALL;
4052 }
4053
NativeSwitchCall(napi_env env,void * data)4054 void NapiCallManager::NativeSwitchCall(napi_env env, void *data)
4055 {
4056 if (data == nullptr) {
4057 TELEPHONY_LOGE("NapiCallManager::NativeSwitchCall data is nullptr");
4058 NapiUtil::ThrowParameterError(env);
4059 return;
4060 }
4061 auto asyncContext = (AsyncContext *)data;
4062 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SwitchCall(asyncContext->callId);
4063 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4064 asyncContext->resolved = TELEPHONY_SUCCESS;
4065 }
4066 asyncContext->eventId = CALL_MANAGER_SWITCH_CALL;
4067 }
4068
NativeCombineConference(napi_env env,void * data)4069 void NapiCallManager::NativeCombineConference(napi_env env, void *data)
4070 {
4071 if (data == nullptr) {
4072 TELEPHONY_LOGE("NapiCallManager::NativeCombineConference data is nullptr");
4073 NapiUtil::ThrowParameterError(env);
4074 return;
4075 }
4076 auto asyncContext = (AsyncContext *)data;
4077 asyncContext->errorCode =
4078 DelayedSingleton<CallManagerClient>::GetInstance()->CombineConference(asyncContext->callId);
4079 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4080 asyncContext->resolved = TELEPHONY_SUCCESS;
4081 }
4082 }
4083
NativeSeparateConference(napi_env env,void * data)4084 void NapiCallManager::NativeSeparateConference(napi_env env, void *data)
4085 {
4086 if (data == nullptr) {
4087 TELEPHONY_LOGE("NapiCallManager::NativeSeparateConference data is nullptr");
4088 NapiUtil::ThrowParameterError(env);
4089 return;
4090 }
4091 auto asyncContext = (AsyncContext *)data;
4092 asyncContext->errorCode =
4093 DelayedSingleton<CallManagerClient>::GetInstance()->SeparateConference(asyncContext->callId);
4094 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4095 asyncContext->resolved = TELEPHONY_SUCCESS;
4096 }
4097 }
4098
NativeKickOutFromConference(napi_env env,void * data)4099 void NapiCallManager::NativeKickOutFromConference(napi_env env, void *data)
4100 {
4101 if (data == nullptr) {
4102 TELEPHONY_LOGE("NapiCallManager::NativeKickOutFromConference data is nullptr");
4103 NapiUtil::ThrowParameterError(env);
4104 return;
4105 }
4106 auto asyncContext = (AsyncContext *)data;
4107 asyncContext->errorCode =
4108 DelayedSingleton<CallManagerClient>::GetInstance()->KickOutFromConference(asyncContext->callId);
4109 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4110 asyncContext->resolved = TELEPHONY_SUCCESS;
4111 }
4112 }
4113
NativeGetMainCallId(napi_env env,void * data)4114 void NapiCallManager::NativeGetMainCallId(napi_env env, void *data)
4115 {
4116 if (data == nullptr) {
4117 TELEPHONY_LOGE("NapiCallManager::NativeGetMainCallId data is nullptr");
4118 NapiUtil::ThrowParameterError(env);
4119 return;
4120 }
4121 auto asyncContext = (IntResultAsyncContext *)data;
4122 asyncContext->result = 0;
4123 asyncContext->errorCode =
4124 DelayedSingleton<CallManagerClient>::GetInstance()->GetMainCallId(asyncContext->callId, asyncContext->result);
4125 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4126 asyncContext->resolved = TELEPHONY_SUCCESS;
4127 }
4128 }
4129
NativeGetSubCallIdList(napi_env env,void * data)4130 void NapiCallManager::NativeGetSubCallIdList(napi_env env, void *data)
4131 {
4132 if (data == nullptr) {
4133 TELEPHONY_LOGE("NapiCallManager::NativeGetSubCallIdList data is nullptr");
4134 NapiUtil::ThrowParameterError(env);
4135 return;
4136 }
4137 auto asyncContext = (ListAsyncContext *)data;
4138 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->GetSubCallIdList(
4139 asyncContext->callId, asyncContext->listResult);
4140 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4141 asyncContext->resolved = TELEPHONY_SUCCESS;
4142 }
4143 }
4144
NativeGetCallIdListForConference(napi_env env,void * data)4145 void NapiCallManager::NativeGetCallIdListForConference(napi_env env, void *data)
4146 {
4147 if (data == nullptr) {
4148 TELEPHONY_LOGE("NapiCallManager::NativeGetCallIdListForConference data is nullptr");
4149 NapiUtil::ThrowParameterError(env);
4150 return;
4151 }
4152 auto asyncContext = (ListAsyncContext *)data;
4153 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->GetCallIdListForConference(
4154 asyncContext->callId, asyncContext->listResult);
4155 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4156 asyncContext->resolved = TELEPHONY_SUCCESS;
4157 }
4158 }
4159
4160 /**
4161 * Register a callback to NapiCallAbilityCallback. When call_manager has data returned,
4162 * NapiCallAbilityCallback will notify JavaScript via the registered callback.
4163 * The whole process is asynchronous.
4164 */
NativeGetCallWaiting(napi_env env,void * data)4165 void NapiCallManager::NativeGetCallWaiting(napi_env env, void *data)
4166 {
4167 if (data == nullptr) {
4168 TELEPHONY_LOGE("NapiCallManager::NativeGetCallWaiting data is nullptr");
4169 NapiUtil::ThrowParameterError(env);
4170 return;
4171 }
4172 auto asyncContext = (SupplementAsyncContext *)data;
4173 if (!IsValidSlotId(asyncContext->slotId)) {
4174 TELEPHONY_LOGE("NativeGetCallWaiting slotId is invalid");
4175 asyncContext->errorCode = SLOT_ID_INVALID;
4176 return;
4177 }
4178 EventCallback infoListener;
4179 infoListener.env = asyncContext->env;
4180 infoListener.thisVar = asyncContext->thisVar;
4181 infoListener.callbackRef = asyncContext->callbackRef;
4182 infoListener.deferred = asyncContext->deferred;
4183 asyncContext->errorCode =
4184 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterGetWaitingCallback(infoListener);
4185 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4186 TELEPHONY_LOGE("RegisterGetWaitingCallback failed!");
4187 return;
4188 }
4189 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->GetCallWaiting(asyncContext->slotId);
4190 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4191 asyncContext->eventId = CALL_MANAGER_GET_CALL_WAITING;
4192 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterGetWaitingCallback();
4193 TELEPHONY_LOGE("GetCallWaiting failed!");
4194 return;
4195 }
4196 asyncContext->resolved = TELEPHONY_SUCCESS;
4197 asyncContext->callbackRef = nullptr;
4198 asyncContext->deferred = nullptr;
4199 }
4200
NativeSetCallWaiting(napi_env env,void * data)4201 void NapiCallManager::NativeSetCallWaiting(napi_env env, void *data)
4202 {
4203 if (data == nullptr) {
4204 TELEPHONY_LOGE("NapiCallManager::NativeSetCallWaiting data is nullptr");
4205 NapiUtil::ThrowParameterError(env);
4206 return;
4207 }
4208 auto asyncContext = (SupplementAsyncContext *)data;
4209 if (!IsValidSlotId(asyncContext->slotId)) {
4210 TELEPHONY_LOGE("NativeSetCallWaiting slotId is invalid");
4211 asyncContext->errorCode = SLOT_ID_INVALID;
4212 return;
4213 }
4214
4215 EventCallback infoListener;
4216 infoListener.env = asyncContext->env;
4217 infoListener.thisVar = asyncContext->thisVar;
4218 infoListener.callbackRef = asyncContext->callbackRef;
4219 infoListener.deferred = asyncContext->deferred;
4220 asyncContext->errorCode =
4221 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterSetWaitingCallback(infoListener);
4222 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4223 TELEPHONY_LOGE("RegisterSetWaitingCallback failed!");
4224 return;
4225 }
4226 asyncContext->errorCode =
4227 DelayedSingleton<CallManagerClient>::GetInstance()->SetCallWaiting(asyncContext->slotId, asyncContext->flag);
4228 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4229 asyncContext->eventId = CALL_MANAGER_SET_CALL_WAITING;
4230 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterSetWaitingCallback();
4231 TELEPHONY_LOGE("SetCallWaiting failed!");
4232 return;
4233 }
4234 asyncContext->resolved = TELEPHONY_SUCCESS;
4235 asyncContext->callbackRef = nullptr;
4236 asyncContext->deferred = nullptr;
4237 }
4238
NativeGetCallRestriction(napi_env env,void * data)4239 void NapiCallManager::NativeGetCallRestriction(napi_env env, void *data)
4240 {
4241 if (data == nullptr) {
4242 TELEPHONY_LOGE("NapiCallManager::NativeGetCallRestriction data is nullptr");
4243 NapiUtil::ThrowParameterError(env);
4244 return;
4245 }
4246 auto asyncContext = (SupplementAsyncContext *)data;
4247 if (!IsValidSlotId(asyncContext->slotId)) {
4248 TELEPHONY_LOGE("NativeGetCallRestriction slotId is invalid");
4249 asyncContext->errorCode = SLOT_ID_INVALID;
4250 return;
4251 }
4252 EventCallback infoListener;
4253 infoListener.env = asyncContext->env;
4254 infoListener.thisVar = asyncContext->thisVar;
4255 infoListener.callbackRef = asyncContext->callbackRef;
4256 infoListener.deferred = asyncContext->deferred;
4257 asyncContext->errorCode =
4258 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterGetRestrictionCallback(infoListener);
4259 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4260 TELEPHONY_LOGE("RegisterGetRestrictionCallback failed!");
4261 return;
4262 }
4263 CallRestrictionType type = static_cast<CallRestrictionType>(asyncContext->type);
4264 asyncContext->errorCode =
4265 DelayedSingleton<CallManagerClient>::GetInstance()->GetCallRestriction(asyncContext->slotId, type);
4266 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4267 asyncContext->eventId = CALL_MANAGER_GET_CALL_RESTRICTION;
4268 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterGetRestrictionCallback();
4269 TELEPHONY_LOGE("GetCallRestriction failed!");
4270 return;
4271 }
4272 asyncContext->resolved = TELEPHONY_SUCCESS;
4273 asyncContext->callbackRef = nullptr;
4274 asyncContext->deferred = nullptr;
4275 }
4276
NativeSetCallRestriction(napi_env env,void * data)4277 void NapiCallManager::NativeSetCallRestriction(napi_env env, void *data)
4278 {
4279 if (data == nullptr) {
4280 TELEPHONY_LOGE("NapiCallManager::NativeSetCallRestriction data is nullptr");
4281 NapiUtil::ThrowParameterError(env);
4282 return;
4283 }
4284 auto asyncContext = (CallRestrictionAsyncContext *)data;
4285 if (!IsValidSlotId(asyncContext->slotId)) {
4286 TELEPHONY_LOGE("NativeSetCallRestriction slotId is invalid");
4287 asyncContext->errorCode = SLOT_ID_INVALID;
4288 return;
4289 }
4290 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4291 TELEPHONY_LOGE("Data acquisition failure!");
4292 return;
4293 }
4294 EventCallback infoListener;
4295 infoListener.env = asyncContext->env;
4296 infoListener.thisVar = asyncContext->thisVar;
4297 infoListener.callbackRef = asyncContext->callbackRef;
4298 infoListener.deferred = asyncContext->deferred;
4299 asyncContext->errorCode =
4300 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterSetRestrictionCallback(infoListener);
4301 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4302 TELEPHONY_LOGE("RegisterSetRestrictionCallback failed!");
4303 return;
4304 }
4305 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetCallRestriction(
4306 asyncContext->slotId, asyncContext->info);
4307 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4308 asyncContext->eventId = CALL_MANAGER_SET_CALL_RESTRICTION;
4309 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterSetRestrictionCallback();
4310 TELEPHONY_LOGE("SetCallRestriction failed!");
4311 return;
4312 }
4313 asyncContext->resolved = TELEPHONY_SUCCESS;
4314 asyncContext->callbackRef = nullptr;
4315 asyncContext->deferred = nullptr;
4316 }
4317
NativeSetCallRestrictionPassword(napi_env env,void * data)4318 void NapiCallManager::NativeSetCallRestrictionPassword(napi_env env, void *data)
4319 {
4320 if (data == nullptr) {
4321 TELEPHONY_LOGE("data is nullptr");
4322 NapiUtil::ThrowParameterError(env);
4323 return;
4324 }
4325 auto asyncContext = (CallBarringPasswordAsyncContext *)data;
4326 if (!IsValidSlotId(asyncContext->slotId)) {
4327 TELEPHONY_LOGE("slotId is invalid");
4328 asyncContext->errorCode = SLOT_ID_INVALID;
4329 return;
4330 }
4331 EventCallback infoListener;
4332 infoListener.env = asyncContext->env;
4333 infoListener.thisVar = asyncContext->thisVar;
4334 infoListener.callbackRef = asyncContext->callbackRef;
4335 infoListener.deferred = asyncContext->deferred;
4336 asyncContext->errorCode =
4337 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterSetRestrictionPasswordCallback(infoListener);
4338 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4339 TELEPHONY_LOGE("RegisterSetRestrictionPasswordCallback failed!");
4340 return;
4341 }
4342 asyncContext->errorCode =
4343 DelayedSingleton<CallManagerClient>::GetInstance()->SetCallRestrictionPassword(asyncContext->slotId,
4344 CallRestrictionType::RESTRICTION_TYPE_ALL_CALLS, asyncContext->oldPassword, asyncContext->newPassword);
4345 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4346 asyncContext->eventId = CALL_MANAGER_SET_CALL_RESTRICTION_PASSWORD;
4347 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterSetRestrictionPasswordCallback();
4348 TELEPHONY_LOGE("SetCallRestrictionPassword failed!");
4349 return;
4350 }
4351 asyncContext->resolved = TELEPHONY_SUCCESS;
4352 asyncContext->callbackRef = nullptr;
4353 asyncContext->deferred = nullptr;
4354 (void)memset_s(asyncContext->oldPassword, sizeof(asyncContext->oldPassword), 0, sizeof(asyncContext->oldPassword));
4355 (void)memset_s(asyncContext->newPassword, sizeof(asyncContext->newPassword), 0, sizeof(asyncContext->newPassword));
4356 }
4357
NativeGetTransferNumber(napi_env env,void * data)4358 void NapiCallManager::NativeGetTransferNumber(napi_env env, void *data)
4359 {
4360 if (data == nullptr) {
4361 TELEPHONY_LOGE("NapiCallManager::NativeGetTransferNumber data is nullptr");
4362 NapiUtil::ThrowParameterError(env);
4363 return;
4364 }
4365 auto asyncContext = (SupplementAsyncContext *)data;
4366 if (!IsValidSlotId(asyncContext->slotId)) {
4367 TELEPHONY_LOGE("NativeGetTransferNumber slotId is invalid");
4368 asyncContext->errorCode = SLOT_ID_INVALID;
4369 return;
4370 }
4371 EventCallback infoListener;
4372 infoListener.env = asyncContext->env;
4373 infoListener.thisVar = asyncContext->thisVar;
4374 infoListener.callbackRef = asyncContext->callbackRef;
4375 infoListener.deferred = asyncContext->deferred;
4376 asyncContext->errorCode = DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterGetTransferCallback(
4377 infoListener, asyncContext->type);
4378 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4379 TELEPHONY_LOGE("RegisterGetTransferCallback failed!");
4380 return;
4381 }
4382 CallTransferType type = static_cast<CallTransferType>(asyncContext->type);
4383 asyncContext->errorCode =
4384 DelayedSingleton<CallManagerClient>::GetInstance()->GetCallTransferInfo(asyncContext->slotId, type);
4385 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4386 asyncContext->eventId = CALL_MANAGER_GET_CALL_TRANSFER;
4387 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterGetTransferCallback();
4388 TELEPHONY_LOGE("GetCallTransferInfo failed!");
4389 return;
4390 }
4391 asyncContext->resolved = TELEPHONY_SUCCESS;
4392 asyncContext->callbackRef = nullptr;
4393 asyncContext->deferred = nullptr;
4394 }
4395
NativeSetTransferNumber(napi_env env,void * data)4396 void NapiCallManager::NativeSetTransferNumber(napi_env env, void *data)
4397 {
4398 if (data == nullptr) {
4399 TELEPHONY_LOGE("NapiCallManager::NativeSetTransferNumber data is nullptr");
4400 NapiUtil::ThrowParameterError(env);
4401 return;
4402 }
4403 auto asyncContext = (CallTransferAsyncContext *)data;
4404 if (!IsValidSlotId(asyncContext->slotId)) {
4405 TELEPHONY_LOGE("NativeSetTransferNumber slotId is invalid");
4406 asyncContext->errorCode = SLOT_ID_INVALID;
4407 return;
4408 }
4409
4410 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4411 TELEPHONY_LOGE("Data acquisition failure!");
4412 return;
4413 }
4414 EventCallback infoListener;
4415 infoListener.env = asyncContext->env;
4416 infoListener.thisVar = asyncContext->thisVar;
4417 infoListener.callbackRef = asyncContext->callbackRef;
4418 infoListener.deferred = asyncContext->deferred;
4419 asyncContext->errorCode =
4420 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterSetTransferCallback(infoListener);
4421 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4422 TELEPHONY_LOGE("RegisterSetTransferCallback failed!");
4423 return;
4424 }
4425 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetCallTransferInfo(
4426 asyncContext->slotId, asyncContext->info);
4427 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
4428 asyncContext->eventId = CALL_MANAGER_SET_CALL_TRANSFER;
4429 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterSetTransferCallback();
4430 TELEPHONY_LOGE("SetCallTransferInfo failed!");
4431 return;
4432 }
4433 asyncContext->resolved = TELEPHONY_SUCCESS;
4434 asyncContext->callbackRef = nullptr;
4435 asyncContext->deferred = nullptr;
4436 }
4437
NativeCanSetCallTransferTime(napi_env env,void * data)4438 void NapiCallManager::NativeCanSetCallTransferTime(napi_env env, void *data)
4439 {
4440 if (data == nullptr) {
4441 TELEPHONY_LOGE("data is nullptr");
4442 NapiUtil::ThrowParameterError(env);
4443 return;
4444 }
4445 auto asyncContext = (BoolResultAsyncContext *)data;
4446 if (!IsValidSlotId(asyncContext->slotId)) {
4447 TELEPHONY_LOGE("[slot%{public}d]slotId is invalid", asyncContext->slotId);
4448 asyncContext->errorCode = SLOT_ID_INVALID;
4449 return;
4450 }
4451 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->CanSetCallTransferTime(
4452 asyncContext->slotId, asyncContext->enabled);
4453 }
4454
NativeEnableImsSwitch(napi_env env,void * data)4455 void NapiCallManager::NativeEnableImsSwitch(napi_env env, void *data)
4456 {
4457 if (data == nullptr) {
4458 TELEPHONY_LOGE("NapiCallManager::NativeEnableImsSwitch data is nullptr");
4459 NapiUtil::ThrowParameterError(env);
4460 return;
4461 }
4462 auto asyncContext = (ImsSwitchAsyncContext *)data;
4463 if (!IsValidSlotId(asyncContext->slotId)) {
4464 TELEPHONY_LOGE("NativeEnableImsSwitch slotId is invalid");
4465 asyncContext->errorCode = SLOT_ID_INVALID;
4466 return;
4467 }
4468 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->EnableImsSwitch(asyncContext->slotId);
4469 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4470 asyncContext->resolved = TELEPHONY_SUCCESS;
4471 }
4472 asyncContext->eventId = CALL_MANAGER_ENABLE_IMS_SWITCH;
4473 }
4474
NativeDisableImsSwitch(napi_env env,void * data)4475 void NapiCallManager::NativeDisableImsSwitch(napi_env env, void *data)
4476 {
4477 if (data == nullptr) {
4478 TELEPHONY_LOGE("NapiCallManager::NativeDisableImsSwitch data is nullptr");
4479 NapiUtil::ThrowParameterError(env);
4480 return;
4481 }
4482 auto asyncContext = (ImsSwitchAsyncContext *)data;
4483 if (!IsValidSlotId(asyncContext->slotId)) {
4484 TELEPHONY_LOGE("NativeDisableImsSwitch slotId is invalid");
4485 asyncContext->errorCode = SLOT_ID_INVALID;
4486 return;
4487 }
4488 asyncContext->errorCode =
4489 DelayedSingleton<CallManagerClient>::GetInstance()->DisableImsSwitch(asyncContext->slotId);
4490 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4491 asyncContext->resolved = TELEPHONY_SUCCESS;
4492 }
4493 asyncContext->eventId = CALL_MANAGER_DISABLE_IMS_SWITCH;
4494 }
4495
NativeIsImsSwitchEnabled(napi_env env,void * data)4496 void NapiCallManager::NativeIsImsSwitchEnabled(napi_env env, void *data)
4497 {
4498 if (data == nullptr) {
4499 TELEPHONY_LOGE("NapiCallManager::NativeIsImsSwitchEnabled data is nullptr");
4500 NapiUtil::ThrowParameterError(env);
4501 return;
4502 }
4503 auto asyncContext = (ImsSwitchAsyncContext *)data;
4504 if (!IsValidSlotId(asyncContext->slotId)) {
4505 TELEPHONY_LOGE("NativeIsImsSwitchEnabled slotId is invalid");
4506 asyncContext->errorCode = SLOT_ID_INVALID;
4507 return;
4508 }
4509 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->IsImsSwitchEnabled(
4510 asyncContext->slotId, asyncContext->enabled);
4511 if (asyncContext->enabled) {
4512 asyncContext->resolved = BOOL_VALUE_IS_TRUE;
4513 }
4514 }
4515
NativeSetVoNRState(napi_env env,void * data)4516 void NapiCallManager::NativeSetVoNRState(napi_env env, void *data)
4517 {
4518 if (data == nullptr) {
4519 TELEPHONY_LOGE("NapiCallManager::NativeSetVoNRState data is nullptr");
4520 NapiUtil::ThrowParameterError(env);
4521 return;
4522 }
4523 auto asyncContext = (VoNRSwitchAsyncContext *)data;
4524 if (!IsValidSlotId(asyncContext->slotId)) {
4525 TELEPHONY_LOGE("NativeSetVoNRState slotId is invalid");
4526 asyncContext->errorCode = SLOT_ID_INVALID;
4527 return;
4528 }
4529 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetVoNRState(
4530 asyncContext->slotId, asyncContext->state);
4531 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4532 asyncContext->resolved = TELEPHONY_SUCCESS;
4533 }
4534 asyncContext->eventId = CALL_MANAGER_SET_VONR_STATE;
4535 }
4536
NativeGetVoNRState(napi_env env,void * data)4537 void NapiCallManager::NativeGetVoNRState(napi_env env, void *data)
4538 {
4539 if (data == nullptr) {
4540 TELEPHONY_LOGE("NapiCallManager::NativeGetVoNRState data is nullptr");
4541 NapiUtil::ThrowParameterError(env);
4542 return;
4543 }
4544 auto asyncContext = (VoNRSwitchAsyncContext *)data;
4545 if (!IsValidSlotId(asyncContext->slotId)) {
4546 TELEPHONY_LOGE("NativeIsImsSwitchEnabled slotId is invalid");
4547 asyncContext->errorCode = SLOT_ID_INVALID;
4548 return;
4549 }
4550 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->GetVoNRState(
4551 asyncContext->slotId, asyncContext->state);
4552 asyncContext->eventId = CALL_MANAGER_GET_VONR_STATE;
4553 }
4554
NativeStartDTMF(napi_env env,void * data)4555 void NapiCallManager::NativeStartDTMF(napi_env env, void *data)
4556 {
4557 if (data == nullptr) {
4558 TELEPHONY_LOGE("NapiCallManager::NativeStartDTMF data is nullptr");
4559 NapiUtil::ThrowParameterError(env);
4560 return;
4561 }
4562 auto asyncContext = (AsyncContext *)data;
4563 if (asyncContext->numberLen < TWO_VALUE_LIMIT) {
4564 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->StartDtmf(
4565 asyncContext->callId, asyncContext->number[ARRAY_INDEX_FIRST]);
4566 } else {
4567 asyncContext->errorCode = TELEPHONY_ERR_ARGUMENT_INVALID;
4568 }
4569 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4570 asyncContext->resolved = TELEPHONY_SUCCESS;
4571 }
4572 }
4573
NativeStopDTMF(napi_env env,void * data)4574 void NapiCallManager::NativeStopDTMF(napi_env env, void *data)
4575 {
4576 if (data == nullptr) {
4577 TELEPHONY_LOGE("NapiCallManager::NativeStopDTMF data is nullptr");
4578 NapiUtil::ThrowParameterError(env);
4579 return;
4580 }
4581 auto asyncContext = (AsyncContext *)data;
4582 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->StopDtmf(asyncContext->callId);
4583 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4584 asyncContext->resolved = TELEPHONY_SUCCESS;
4585 }
4586 }
4587
NativePostDialProceed(napi_env env,void * data)4588 void NapiCallManager::NativePostDialProceed(napi_env env, void *data)
4589 {
4590 if (data == nullptr) {
4591 TELEPHONY_LOGE("NapiCallManager::NativePostDialProceed data is nullptr");
4592 NapiUtil::ThrowParameterError(env);
4593 return;
4594 }
4595 auto asyncContext = (PostDialAsyncContext *)data;
4596 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->PostDialProceed(
4597 asyncContext->callId, asyncContext->proceed);
4598 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4599 asyncContext->resolved = TELEPHONY_SUCCESS;
4600 }
4601 }
4602
NativeGetCallState(napi_env env,void * data)4603 void NapiCallManager::NativeGetCallState(napi_env env, void *data)
4604 {
4605 if (data == nullptr) {
4606 TELEPHONY_LOGE("data is nullptr");
4607 return;
4608 }
4609 auto asyncContext = (AsyncContext *)data;
4610 asyncContext->resolved = DelayedSingleton<CallManagerClient>::GetInstance()->GetCallState();
4611 }
4612
NativeIsRinging(napi_env env,void * data)4613 void NapiCallManager::NativeIsRinging(napi_env env, void *data)
4614 {
4615 if (data == nullptr) {
4616 TELEPHONY_LOGE("NapiCallManager::NativeIsRinging data is nullptr");
4617 NapiUtil::ThrowParameterError(env);
4618 return;
4619 }
4620 auto asyncContext = (BoolResultAsyncContext *)data;
4621 asyncContext->enabled = false;
4622 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->IsRinging(asyncContext->enabled);
4623 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4624 asyncContext->resolved = TELEPHONY_SUCCESS;
4625 }
4626 asyncContext->eventId = CALL_MANAGER_IS_RINGING;
4627 }
4628
NativeHasCall(napi_env env,void * data)4629 void NapiCallManager::NativeHasCall(napi_env env, void *data)
4630 {
4631 if (data == nullptr) {
4632 TELEPHONY_LOGE("data is nullptr");
4633 return;
4634 }
4635 auto asyncContext = (AsyncContext *)data;
4636 asyncContext->resolved = DelayedSingleton<CallManagerClient>::GetInstance()->HasCall();
4637 }
4638
NativeIsNewCallAllowed(napi_env env,void * data)4639 void NapiCallManager::NativeIsNewCallAllowed(napi_env env, void *data)
4640 {
4641 if (data == nullptr) {
4642 TELEPHONY_LOGE("NapiCallManager::NativeIsNewCallAllowed data is nullptr");
4643 NapiUtil::ThrowParameterError(env);
4644 return;
4645 }
4646 auto asyncContext = (BoolResultAsyncContext *)data;
4647 asyncContext->errorCode =
4648 DelayedSingleton<CallManagerClient>::GetInstance()->IsNewCallAllowed(asyncContext->enabled);
4649 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4650 asyncContext->resolved = TELEPHONY_SUCCESS;
4651 }
4652 }
4653
NativeIsInEmergencyCall(napi_env env,void * data)4654 void NapiCallManager::NativeIsInEmergencyCall(napi_env env, void *data)
4655 {
4656 if (data == nullptr) {
4657 TELEPHONY_LOGE("NapiCallManager::NativeIsInEmergencyCall data is nullptr");
4658 NapiUtil::ThrowParameterError(env);
4659 return;
4660 }
4661 auto asyncContext = (BoolResultAsyncContext *)data;
4662 asyncContext->errorCode =
4663 DelayedSingleton<CallManagerClient>::GetInstance()->IsInEmergencyCall(asyncContext->enabled);
4664 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4665 asyncContext->resolved = TELEPHONY_SUCCESS;
4666 }
4667 asyncContext->eventId = CALL_MANAGER_IS_EMERGENCY_CALL;
4668 }
4669
NativeIsEmergencyPhoneNumber(napi_env env,void * data)4670 void NapiCallManager::NativeIsEmergencyPhoneNumber(napi_env env, void *data)
4671 {
4672 if (data == nullptr) {
4673 TELEPHONY_LOGE("NapiCallManager::NativeIsEmergencyPhoneNumber data is nullptr");
4674 NapiUtil::ThrowParameterError(env);
4675 return;
4676 }
4677 auto asyncContext = (UtilsAsyncContext *)data;
4678 if (!IsValidSlotId(asyncContext->slotId)) {
4679 TELEPHONY_LOGE("NativeIsEmergencyPhoneNumber slotId is invalid");
4680 asyncContext->errorCode = SLOT_ID_INVALID;
4681 return;
4682 }
4683 std::string tmpPhoneNumber(asyncContext->number, asyncContext->numberLen);
4684 std::u16string phoneNumber = Str8ToStr16(tmpPhoneNumber);
4685 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->IsEmergencyPhoneNumber(
4686 phoneNumber, asyncContext->slotId, asyncContext->enabled);
4687 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4688 asyncContext->resolved = TELEPHONY_SUCCESS;
4689 }
4690 }
4691
NativeFormatPhoneNumber(napi_env env,void * data)4692 void NapiCallManager::NativeFormatPhoneNumber(napi_env env, void *data)
4693 {
4694 if (data == nullptr) {
4695 TELEPHONY_LOGE("NapiCallManager::NativeFormatPhoneNumber data is nullptr");
4696 NapiUtil::ThrowParameterError(env);
4697 return;
4698 }
4699 auto asyncContext = (UtilsAsyncContext *)data;
4700 std::string tmpPhoneNumber(asyncContext->number, asyncContext->numberLen);
4701 std::u16string phoneNumber = Str8ToStr16(tmpPhoneNumber);
4702 std::u16string countryCode = Str8ToStr16(asyncContext->code);
4703 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->FormatPhoneNumber(
4704 phoneNumber, countryCode, asyncContext->formatNumber);
4705 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4706 asyncContext->resolved = TELEPHONY_SUCCESS;
4707 }
4708 }
4709
NativeFormatPhoneNumberToE164(napi_env env,void * data)4710 void NapiCallManager::NativeFormatPhoneNumberToE164(napi_env env, void *data)
4711 {
4712 if (data == nullptr) {
4713 TELEPHONY_LOGE("NapiCallManager::NativeFormatPhoneNumberToE164 data is nullptr");
4714 NapiUtil::ThrowParameterError(env);
4715 return;
4716 }
4717 auto asyncContext = (UtilsAsyncContext *)data;
4718 std::string tmpPhoneNumber(asyncContext->number, asyncContext->numberLen);
4719 std::u16string phoneNumber = Str8ToStr16(tmpPhoneNumber);
4720 std::u16string countryCode = Str8ToStr16(asyncContext->code);
4721 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->FormatPhoneNumberToE164(
4722 phoneNumber, countryCode, asyncContext->formatNumber);
4723 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4724 asyncContext->resolved = TELEPHONY_SUCCESS;
4725 }
4726 }
4727
NativeSetMuted(napi_env env,void * data)4728 void NapiCallManager::NativeSetMuted(napi_env env, void *data)
4729 {
4730 if (data == nullptr) {
4731 TELEPHONY_LOGE("NapiCallManager::NativeSetMuted data is nullptr");
4732 NapiUtil::ThrowParameterError(env);
4733 return;
4734 }
4735 auto asyncContext = (AudioAsyncContext *)data;
4736 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetMuted(true);
4737 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4738 asyncContext->resolved = TELEPHONY_SUCCESS;
4739 }
4740 }
4741
NativeCancelMuted(napi_env env,void * data)4742 void NapiCallManager::NativeCancelMuted(napi_env env, void *data)
4743 {
4744 if (data == nullptr) {
4745 TELEPHONY_LOGE("NapiCallManager::NativeCancelMuted data is nullptr");
4746 NapiUtil::ThrowParameterError(env);
4747 return;
4748 }
4749 auto asyncContext = (AudioAsyncContext *)data;
4750 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetMuted(false);
4751 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4752 asyncContext->resolved = TELEPHONY_SUCCESS;
4753 }
4754 }
4755
NativeMuteRinger(napi_env env,void * data)4756 void NapiCallManager::NativeMuteRinger(napi_env env, void *data)
4757 {
4758 if (data == nullptr) {
4759 TELEPHONY_LOGE("NapiCallManager::NativeMuteRinger data is nullptr");
4760 NapiUtil::ThrowParameterError(env);
4761 return;
4762 }
4763 auto asyncContext = (AudioAsyncContext *)data;
4764 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->MuteRinger();
4765 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4766 asyncContext->resolved = TELEPHONY_SUCCESS;
4767 }
4768 asyncContext->eventId = CALL_MANAGER_MUTE_RINGER;
4769 }
4770
NativeSetAudioDevice(napi_env env,void * data)4771 void NapiCallManager::NativeSetAudioDevice(napi_env env, void *data)
4772 {
4773 if (data == nullptr) {
4774 TELEPHONY_LOGE("NapiCallManager::NativeSetAudioDevice data is nullptr");
4775 NapiUtil::ThrowParameterError(env);
4776 return;
4777 }
4778 auto asyncContext = (AudioAsyncContext *)data;
4779 AudioDevice device;
4780 if (memset_s(&device, sizeof(AudioDevice), 0, sizeof(AudioDevice)) != EOK) {
4781 TELEPHONY_LOGE("memset_s fail");
4782 return;
4783 }
4784 device.deviceType = static_cast<AudioDeviceType>(asyncContext->deviceType);
4785 if (asyncContext->address.length() > kMaxAddressLen) {
4786 TELEPHONY_LOGE("address is not too long");
4787 return;
4788 }
4789 if (memcpy_s(device.address, kMaxAddressLen, asyncContext->address.c_str(), asyncContext->address.length()) !=
4790 EOK) {
4791 TELEPHONY_LOGE("memcpy_s address fail");
4792 return;
4793 }
4794 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetAudioDevice(device);
4795 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4796 asyncContext->resolved = TELEPHONY_SUCCESS;
4797 }
4798 }
4799
NativeUpdateImsCallMode(napi_env env,void * data)4800 void NapiCallManager::NativeUpdateImsCallMode(napi_env env, void *data)
4801 {
4802 if (data == nullptr) {
4803 TELEPHONY_LOGE("NapiCallManager::NativeUpdateImsCallMode data is nullptr");
4804 NapiUtil::ThrowParameterError(env);
4805 return;
4806 }
4807 auto asyncContext = (SupplementAsyncContext *)data;
4808 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->UpdateImsCallMode(
4809 asyncContext->callId, (ImsCallMode)asyncContext->type);
4810 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4811 asyncContext->resolved = TELEPHONY_SUCCESS;
4812 }
4813 }
4814
NativeControlCamera(napi_env env,void * data)4815 void NapiCallManager::NativeControlCamera(napi_env env, void *data)
4816 {
4817 if (data == nullptr) {
4818 TELEPHONY_LOGE("data is nullptr");
4819 return;
4820 }
4821 auto asyncContext = (VideoAsyncContext *)data;
4822 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->ControlCamera(
4823 asyncContext->callId, Str8ToStr16(asyncContext->cameraId));
4824 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4825 asyncContext->resolved = TELEPHONY_SUCCESS;
4826 }
4827 }
4828
NativeSetPreviewWindow(napi_env env,void * data)4829 void NapiCallManager::NativeSetPreviewWindow(napi_env env, void *data)
4830 {
4831 if (data == nullptr) {
4832 TELEPHONY_LOGE("data is nullptr");
4833 return;
4834 }
4835 auto asyncContext = (VideoAsyncContext *)data;
4836 TELEPHONY_LOGI("surfaceId: %{public}s", asyncContext->surfaceId.c_str());
4837 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetPreviewWindow(
4838 asyncContext->callId, asyncContext->surfaceId);
4839 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4840 asyncContext->resolved = TELEPHONY_SUCCESS;
4841 }
4842 }
4843
NativeSetDisplayWindow(napi_env env,void * data)4844 void NapiCallManager::NativeSetDisplayWindow(napi_env env, void *data)
4845 {
4846 if (data == nullptr) {
4847 TELEPHONY_LOGE("data is nullptr");
4848 return;
4849 }
4850 auto asyncContext = (VideoAsyncContext *)data;
4851 TELEPHONY_LOGI("surfaceId: %{public}s", asyncContext->surfaceId.c_str());
4852 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetDisplayWindow(
4853 asyncContext->callId, asyncContext->surfaceId);
4854 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4855 asyncContext->resolved = TELEPHONY_SUCCESS;
4856 }
4857 }
4858
NativeSetCameraZoom(napi_env env,void * data)4859 void NapiCallManager::NativeSetCameraZoom(napi_env env, void *data)
4860 {
4861 if (data == nullptr) {
4862 TELEPHONY_LOGE("data is nullptr");
4863 return;
4864 }
4865 auto asyncContext = (VideoAsyncContext *)data;
4866 asyncContext->resolved = DelayedSingleton<CallManagerClient>::GetInstance()->SetCameraZoom(asyncContext->zoomRatio);
4867 }
4868
NativeSetPausePicture(napi_env env,void * data)4869 void NapiCallManager::NativeSetPausePicture(napi_env env, void *data)
4870 {
4871 if (data == nullptr) {
4872 TELEPHONY_LOGE("data is nullptr");
4873 return;
4874 }
4875 auto asyncContext = (VideoAsyncContext *)data;
4876 asyncContext->errorCode =
4877 DelayedSingleton<CallManagerClient>::GetInstance()->SetPausePicture(
4878 asyncContext->callId, Str8ToStr16(asyncContext->path));
4879 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4880 asyncContext->resolved = TELEPHONY_SUCCESS;
4881 }
4882 }
4883
NativeSetDeviceDirection(napi_env env,void * data)4884 void NapiCallManager::NativeSetDeviceDirection(napi_env env, void *data)
4885 {
4886 if (data == nullptr) {
4887 TELEPHONY_LOGE("data is nullptr");
4888 return;
4889 }
4890 auto asyncContext = (VideoAsyncContext *)data;
4891 asyncContext->errorCode =
4892 DelayedSingleton<CallManagerClient>::GetInstance()->SetDeviceDirection(
4893 asyncContext->callId, asyncContext->rotation);
4894 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4895 asyncContext->resolved = TELEPHONY_SUCCESS;
4896 }
4897 }
4898
NativeRequestCameraCapabilities(napi_env env,void * data)4899 void NapiCallManager::NativeRequestCameraCapabilities(napi_env env, void *data)
4900 {
4901 if (data == nullptr) {
4902 TELEPHONY_LOGE("data is nullptr");
4903 return;
4904 }
4905 auto asyncContext = (AsyncContext *)data;
4906 asyncContext->resolved =
4907 DelayedSingleton<CallManagerClient>::GetInstance()->RequestCameraCapabilities(asyncContext->callId);
4908 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4909 asyncContext->resolved = TELEPHONY_SUCCESS;
4910 }
4911 }
4912
NativeCancelCallUpgrade(napi_env env,void * data)4913 void NapiCallManager::NativeCancelCallUpgrade(napi_env env, void *data)
4914 {
4915 if (data == nullptr) {
4916 TELEPHONY_LOGE("NapiCallManager::NativeCancelCallUpgrade data is nullptr");
4917 NapiUtil::ThrowParameterError(env);
4918 return;
4919 }
4920 auto asyncContext = (AsyncContext *)data;
4921 asyncContext->errorCode =
4922 DelayedSingleton<CallManagerClient>::GetInstance()->CancelCallUpgrade(asyncContext->callId);
4923 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
4924 asyncContext->resolved = TELEPHONY_SUCCESS;
4925 }
4926 }
4927
NativeSetCallPreferenceMode(napi_env env,void * data)4928 void NapiCallManager::NativeSetCallPreferenceMode(napi_env env, void *data)
4929 {
4930 if (data == nullptr) {
4931 TELEPHONY_LOGE("data is nullptr");
4932 return;
4933 }
4934 auto asyncContext = (SupplementAsyncContext *)data;
4935 asyncContext->resolved = DelayedSingleton<CallManagerClient>::GetInstance()->SetCallPreferenceMode(
4936 asyncContext->callId, asyncContext->mode);
4937 }
4938
NativeStartRTT(napi_env env,void * data)4939 void NapiCallManager::NativeStartRTT(napi_env env, void *data)
4940 {
4941 if (data == nullptr) {
4942 TELEPHONY_LOGE("data is nullptr");
4943 return;
4944 }
4945 auto startRTTContext = (SupplementAsyncContext *)data;
4946 EventCallback infoListener;
4947 infoListener.env = startRTTContext->env;
4948 infoListener.thisVar = startRTTContext->thisVar;
4949 infoListener.callbackRef = startRTTContext->callbackRef;
4950 infoListener.deferred = startRTTContext->deferred;
4951 startRTTContext->resolved =
4952 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterStartRttCallback(infoListener);
4953 if (startRTTContext->resolved != TELEPHONY_SUCCESS) {
4954 TELEPHONY_LOGE("RegisterStartRttCallback failed!");
4955 return;
4956 }
4957
4958 std::u16string msg = Str8ToStr16(startRTTContext->content);
4959 startRTTContext->resolved =
4960 DelayedSingleton<CallManagerClient>::GetInstance()->StartRtt(startRTTContext->callId, msg);
4961 if (startRTTContext->resolved != TELEPHONY_SUCCESS) {
4962 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterStartRttCallback();
4963 TELEPHONY_LOGE("StartRtt failed!");
4964 return;
4965 }
4966 startRTTContext->callbackRef = nullptr;
4967 startRTTContext->deferred = nullptr;
4968 }
4969
NativeStopRTT(napi_env env,void * data)4970 void NapiCallManager::NativeStopRTT(napi_env env, void *data)
4971 {
4972 if (data == nullptr) {
4973 TELEPHONY_LOGE("data is nullptr");
4974 return;
4975 }
4976 auto stopRTTContext = (SupplementAsyncContext *)data;
4977 EventCallback infoListener;
4978 infoListener.env = stopRTTContext->env;
4979 infoListener.thisVar = stopRTTContext->thisVar;
4980 infoListener.callbackRef = stopRTTContext->callbackRef;
4981 infoListener.deferred = stopRTTContext->deferred;
4982 stopRTTContext->resolved =
4983 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterStopRttCallback(infoListener);
4984 if (stopRTTContext->resolved != TELEPHONY_SUCCESS) {
4985 TELEPHONY_LOGE("RegisterStopRttCallback failed!");
4986 return;
4987 }
4988 stopRTTContext->resolved = DelayedSingleton<CallManagerClient>::GetInstance()->StopRtt(stopRTTContext->callId);
4989 if (stopRTTContext->resolved != TELEPHONY_SUCCESS) {
4990 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterStopRttCallback();
4991 TELEPHONY_LOGE("StopRtt failed!");
4992 return;
4993 }
4994 stopRTTContext->callbackRef = nullptr;
4995 stopRTTContext->deferred = nullptr;
4996 }
4997
NativeJoinConference(napi_env env,void * data)4998 void NapiCallManager::NativeJoinConference(napi_env env, void *data)
4999 {
5000 if (data == nullptr) {
5001 TELEPHONY_LOGE("NapiCallManager::NativeJoinConference data is nullptr");
5002 NapiUtil::ThrowParameterError(env);
5003 return;
5004 }
5005 auto asyncContext = (ListAsyncContext *)data;
5006 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->JoinConference(
5007 asyncContext->callId, asyncContext->listResult);
5008 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
5009 asyncContext->resolved = TELEPHONY_SUCCESS;
5010 }
5011 }
5012
NativeReportOttCallDetailsInfo(napi_env env,void * data)5013 void NapiCallManager::NativeReportOttCallDetailsInfo(napi_env env, void *data)
5014 {
5015 if (data == nullptr) {
5016 TELEPHONY_LOGE("data is nullptr");
5017 return;
5018 }
5019 auto asyncContext = (OttCallAsyncContext *)data;
5020 asyncContext->resolved =
5021 DelayedSingleton<CallManagerClient>::GetInstance()->ReportOttCallDetailsInfo(asyncContext->ottVec);
5022 }
5023
NativeReportOttCallEventInfo(napi_env env,void * data)5024 void NapiCallManager::NativeReportOttCallEventInfo(napi_env env, void *data)
5025 {
5026 if (data == nullptr) {
5027 TELEPHONY_LOGE("data is nullptr");
5028 return;
5029 }
5030 auto asyncContext = (OttEventAsyncContext *)data;
5031 asyncContext->resolved =
5032 DelayedSingleton<CallManagerClient>::GetInstance()->ReportOttCallEventInfo(asyncContext->eventInfo);
5033 }
5034
NativeCloseUnFinishedUssd(napi_env env,void * data)5035 void NapiCallManager::NativeCloseUnFinishedUssd(napi_env env, void *data)
5036 {
5037 if (data == nullptr) {
5038 TELEPHONY_LOGE("NapiCallManager::NativeCloseUnFinishedUssd data is nullptr");
5039 NapiUtil::ThrowParameterError(env);
5040 return;
5041 }
5042
5043 SupplementAsyncContext *asyncContext = static_cast<SupplementAsyncContext *>(data);
5044 if (!IsValidSlotId(asyncContext->slotId)) {
5045 TELEPHONY_LOGE("NativeCloseUnFinishedUssd slotId is invalid");
5046 asyncContext->errorCode = SLOT_ID_INVALID;
5047 return;
5048 }
5049 EventCallback infoListener;
5050 infoListener.env = asyncContext->env;
5051 infoListener.thisVar = asyncContext->thisVar;
5052 infoListener.callbackRef = asyncContext->callbackRef;
5053 infoListener.deferred = asyncContext->deferred;
5054 asyncContext->errorCode =
5055 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->RegisterCloseUnFinishedUssdCallback(infoListener);
5056 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
5057 TELEPHONY_LOGE("RegisterSetWaitingCallback failed!");
5058 return;
5059 }
5060
5061 asyncContext->errorCode =
5062 DelayedSingleton<CallManagerClient>::GetInstance()->CloseUnFinishedUssd(asyncContext->slotId);
5063 if (asyncContext->errorCode != TELEPHONY_SUCCESS) {
5064 asyncContext->eventId = CALL_MANAGER_CLOSE_UNFINISHED_USSD;
5065 DelayedSingleton<NapiCallAbilityCallback>::GetInstance()->UnRegisterCloseUnFinishedUssdCallback();
5066 TELEPHONY_LOGE("NativeCloseUnFinishedUssd failed!");
5067 return;
5068 }
5069 asyncContext->resolved = TELEPHONY_SUCCESS;
5070 asyncContext->callbackRef = nullptr;
5071 asyncContext->deferred = nullptr;
5072 }
5073
NativeInputDialerSpecialCode(napi_env env,void * data)5074 void NapiCallManager::NativeInputDialerSpecialCode(napi_env env, void *data)
5075 {
5076 if (data == nullptr) {
5077 TELEPHONY_LOGE("NapiCallManager::NativeInputDialerSpecialCode data is nullptr");
5078 NapiUtil::ThrowParameterError(env);
5079 return;
5080 }
5081 AsyncContext *asyncContext = static_cast<AsyncContext *>(data);
5082 std::string specialCode(asyncContext->number, asyncContext->numberLen);
5083 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->InputDialerSpecialCode(specialCode);
5084 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
5085 asyncContext->resolved = TELEPHONY_SUCCESS;
5086 }
5087 }
5088
NativeRemoveMissedIncomingCallNotification(napi_env env,void * data)5089 void NapiCallManager::NativeRemoveMissedIncomingCallNotification(napi_env env, void *data)
5090 {
5091 if (data == nullptr) {
5092 TELEPHONY_LOGE("NapiCallManager::NativeRemoveMissedIncomingCallNotification data is nullptr");
5093 NapiUtil::ThrowParameterError(env);
5094 return;
5095 }
5096 AsyncContext *asyncContext = static_cast<AsyncContext *>(data);
5097 asyncContext->errorCode =
5098 DelayedSingleton<CallManagerClient>::GetInstance()->RemoveMissedIncomingCallNotification();
5099 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
5100 asyncContext->resolved = TELEPHONY_SUCCESS;
5101 }
5102 }
5103
NativeSetVoIPCallState(napi_env env,void * data)5104 void NapiCallManager::NativeSetVoIPCallState(napi_env env, void *data)
5105 {
5106 if (data == nullptr) {
5107 TELEPHONY_LOGE("NapiCallManager::NativeSetVoIPCallState data is nullptr");
5108 NapiUtil::ThrowParameterError(env);
5109 return;
5110 }
5111 auto asyncContext = (VoIPCallStateAsyncContext *)data;
5112 asyncContext->errorCode = DelayedSingleton<CallManagerClient>::GetInstance()->SetVoIPCallState(
5113 asyncContext->state);
5114 if (asyncContext->errorCode == TELEPHONY_SUCCESS) {
5115 asyncContext->resolved = TELEPHONY_SUCCESS;
5116 }
5117 asyncContext->eventId = CALL_MANAGER_SET_VOIP_CALL_STATE;
5118 }
5119
RegisterCallBack()5120 void NapiCallManager::RegisterCallBack()
5121 {
5122 if (registerStatus_ == TELEPHONY_SUCCESS) {
5123 TELEPHONY_LOGW("you are already registered!");
5124 return;
5125 }
5126 std::unique_ptr<NapiCallManagerCallback> callbackPtr = std::make_unique<NapiCallManagerCallback>();
5127 if (callbackPtr == nullptr) {
5128 TELEPHONY_LOGE("make_unique NapiCallManagerCallback failed!");
5129 return;
5130 }
5131 registerStatus_ = DelayedSingleton<CallManagerClient>::GetInstance()->RegisterCallBack(std::move(callbackPtr));
5132 if (registerStatus_ != TELEPHONY_SUCCESS) {
5133 TELEPHONY_LOGE("RegisterCallBack failed!");
5134 return;
5135 }
5136 }
5137
HandleAsyncWork(napi_env env,AsyncContext * context,std::string workName,napi_async_execute_callback execute,napi_async_complete_callback complete)5138 napi_value NapiCallManager::HandleAsyncWork(napi_env env, AsyncContext *context, std::string workName,
5139 napi_async_execute_callback execute, napi_async_complete_callback complete)
5140 {
5141 TELEPHONY_LOGI("HandleAsyncWork start workName = %{public}s", workName.c_str());
5142 napi_value result = nullptr;
5143 if (context->callbackRef == nullptr) {
5144 napi_create_promise(env, &context->deferred, &result);
5145 } else {
5146 napi_get_undefined(env, &result);
5147 }
5148 napi_value resource = NapiCallManagerUtils::CreateUndefined(env);
5149 napi_value resourceName = nullptr;
5150 napi_create_string_utf8(env, workName.data(), NAPI_AUTO_LENGTH, &resourceName);
5151 napi_create_async_work(env, resource, resourceName, execute, complete, (void *)context, &context->work);
5152 napi_queue_async_work_with_qos(env, context->work, napi_qos_default);
5153 return result;
5154 }
5155
5156 static napi_module g_nativeCallManagerModule = {
5157 .nm_version = NATIVE_VERSION,
5158 .nm_flags = NATIVE_FLAGS,
5159 .nm_filename = nullptr,
5160 .nm_register_func = NapiCallManager::RegisterCallManagerFunc,
5161 .nm_modname = "telephony.call",
5162 .nm_priv = ((void *)0),
5163 .reserved = {0},
5164 };
5165
RegisterModule(void)5166 extern "C" __attribute__((constructor)) void RegisterModule(void)
5167 {
5168 napi_module_register(&g_nativeCallManagerModule);
5169 }
5170 } // namespace Telephony
5171 } // namespace OHOS
5172