1 /* 2 * Copyright (C) 2021-2022 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 #ifndef NAPI_CALL_MANAGER_H 17 #define NAPI_CALL_MANAGER_H 18 19 #include "pac_map.h" 20 #include "string_ex.h" 21 22 #include "napi_call_manager_callback.h" 23 #include "napi_call_manager_types.h" 24 25 namespace OHOS { 26 namespace Telephony { 27 constexpr int32_t SLOT_ID_INVALID = 202; 28 #define GET_PARAMS(env, info, num) \ 29 size_t argc = num; \ 30 napi_value argv[num] = {0}; \ 31 napi_value thisVar = nullptr; \ 32 void *data; \ 33 napi_get_cb_info(env, info, &argc, argv, &thisVar, &data) 34 35 /** 36 * NapiCallManager is responsible for NAPI initialization and JavaScript data parsing. 37 */ 38 class NapiCallManager { 39 public: 40 NapiCallManager(); 41 ~NapiCallManager(); 42 43 static napi_value DeclareCallBasisInterface(napi_env env, napi_value exports); 44 static napi_value DeclareCallConferenceInterface(napi_env env, napi_value exports); 45 static napi_value DeclareCallSupplementInterface(napi_env env, napi_value exports); 46 static napi_value DeclareCallExtendInterface(napi_env env, napi_value exports); 47 static napi_value DeclareCallMultimediaInterface(napi_env env, napi_value exports); 48 static napi_value DeclareCallImsInterface(napi_env env, napi_value exports); 49 static napi_value DeclareCallMediaEnum(napi_env env, napi_value exports); 50 static napi_value DeclareCallDialEnum(napi_env env, napi_value exports); 51 static napi_value DeclareCallStateEnum(napi_env env, napi_value exports); 52 static napi_value DeclareCallEventEnum(napi_env env, napi_value exports); 53 static napi_value DeclareCallRestrictionEnum(napi_env env, napi_value exports); 54 static napi_value DeclareCallWaitingEnum(napi_env env, napi_value exports); 55 static napi_value DeclareCallTransferEnum(napi_env env, napi_value exports); 56 // Enumeration type extension 57 static napi_value DeclareVoNRStateEnum(napi_env env, napi_value exports); 58 static napi_value DeclareAudioDeviceEnum(napi_env env, napi_value exports); 59 static napi_value DeclareVideoStateTypeEnum(napi_env env, napi_value exports); 60 static napi_value DeclareImsCallModeEnum(napi_env env, napi_value exports); 61 static napi_value DeclareDeviceDirectionEnum(napi_env env, napi_value exports); 62 static napi_value DeclareVideoRequestResultEnum(napi_env env, napi_value exports); 63 static napi_value DeclareDialSceneEnum(napi_env env, napi_value exports); 64 static napi_value DeclareCallTypeEnum(napi_env env, napi_value exports); 65 static napi_value DeclareDialTypeEnum(napi_env env, napi_value exports); 66 static napi_value DeclareTelCallStateEnum(napi_env env, napi_value exports); 67 static napi_value DeclareConferenceStateEnum(napi_env env, napi_value exports); 68 static napi_value DeclareCallStateToAppEnum(napi_env env, napi_value exports); 69 static napi_value DeclareCallEventEnumEx(napi_env env, napi_value exports); 70 static napi_value DeclareCallSessionEventEnumEx(napi_env env, napi_value exports); 71 static napi_value DeclareRestrictionTypeEnum(napi_env env, napi_value exports); 72 static napi_value DeclareRestrictionModeEnum(napi_env env, napi_value exports); 73 static napi_value DeclareRestrictionStatusEnum(napi_env env, napi_value exports); 74 static napi_value DeclareCallWaitingEnumEx(napi_env env, napi_value exports); 75 static napi_value DeclareTransferStatusEnum(napi_env env, napi_value exports); 76 static napi_value DeclareTransferTypeEnum(napi_env env, napi_value exports); 77 static napi_value DeclareTransferSettingTypeEnum(napi_env env, napi_value exports); 78 static napi_value DeclareMmiCodeResultEnum(napi_env env, napi_value exports); 79 static napi_value DeclareDisconnectedReasonEnum(napi_env env, napi_value exports); 80 static napi_value DeclareMarkTypeEnum(napi_env env, napi_value exports); 81 static napi_value RegisterCallManagerFunc(napi_env env, napi_value exports); 82 static napi_value Dial(napi_env env, napi_callback_info info); 83 static napi_value DialCall(napi_env env, napi_callback_info info); 84 static napi_value MakeCall(napi_env env, napi_callback_info info); 85 static napi_value AnswerCall(napi_env env, napi_callback_info info); 86 static napi_value AnswerVideoCall(napi_env env, napi_callback_info info); 87 static napi_value RejectCall(napi_env env, napi_callback_info info); 88 static napi_value HangUpCall(napi_env env, napi_callback_info info); 89 static napi_value HoldCall(napi_env env, napi_callback_info info); 90 static napi_value UnHoldCall(napi_env env, napi_callback_info info); 91 static napi_value SwitchCall(napi_env env, napi_callback_info info); 92 static napi_value CombineConference(napi_env env, napi_callback_info info); 93 static napi_value SeparateConference(napi_env env, napi_callback_info info); 94 static napi_value KickOutFromConference(napi_env env, napi_callback_info info); 95 static napi_value GetMainCallId(napi_env env, napi_callback_info info); 96 static napi_value GetSubCallIdList(napi_env env, napi_callback_info info); 97 static napi_value GetCallIdListForConference(napi_env env, napi_callback_info info); 98 static napi_value GetCallWaiting(napi_env env, napi_callback_info info); 99 static napi_value SetCallWaiting(napi_env env, napi_callback_info info); 100 static napi_value GetCallRestriction(napi_env env, napi_callback_info info); 101 static napi_value SetCallRestriction(napi_env env, napi_callback_info info); 102 static napi_value SetCallRestrictionPassword(napi_env env, napi_callback_info info); 103 static napi_value GetCallTransferInfo(napi_env env, napi_callback_info info); 104 static napi_value SetCallTransferInfo(napi_env env, napi_callback_info info); 105 static napi_value CanSetCallTransferTime(napi_env env, napi_callback_info info); 106 static napi_value StartDTMF(napi_env env, napi_callback_info info); 107 static napi_value StopDTMF(napi_env env, napi_callback_info info); 108 static napi_value PostDialProceed(napi_env env, napi_callback_info info); 109 static napi_value GetCallState(napi_env env, napi_callback_info info); 110 static napi_value GetCallStateSync(napi_env env, napi_callback_info info); 111 static napi_value IsRinging(napi_env env, napi_callback_info info); 112 static napi_value HasCall(napi_env env, napi_callback_info info); 113 static napi_value HasCallSync(napi_env env, napi_callback_info info); 114 static napi_value IsNewCallAllowed(napi_env env, napi_callback_info info); 115 static napi_value IsInEmergencyCall(napi_env env, napi_callback_info info); 116 static napi_value IsEmergencyPhoneNumber(napi_env env, napi_callback_info info); 117 static napi_value FormatPhoneNumber(napi_env env, napi_callback_info info); 118 static napi_value FormatPhoneNumberToE164(napi_env env, napi_callback_info info); 119 static napi_value ObserverOn(napi_env env, napi_callback_info info); 120 static napi_value ObserverOff(napi_env env, napi_callback_info info); 121 static napi_value SetMuted(napi_env env, napi_callback_info info); 122 static napi_value CancelMuted(napi_env env, napi_callback_info info); 123 static napi_value MuteRinger(napi_env env, napi_callback_info info); 124 static napi_value SetAudioDevice(napi_env env, napi_callback_info info); 125 static napi_value ControlCamera(napi_env env, napi_callback_info info); 126 static napi_value SetPreviewWindow(napi_env env, napi_callback_info info); 127 static napi_value SetDisplayWindow(napi_env env, napi_callback_info info); 128 static napi_value SetCameraZoom(napi_env env, napi_callback_info info); 129 static napi_value SetPausePicture(napi_env env, napi_callback_info info); 130 static napi_value SetDeviceDirection(napi_env env, napi_callback_info info); 131 static napi_value RequestCameraCapabilities(napi_env env, napi_callback_info info); 132 static napi_value SetCallPreferenceMode(napi_env env, napi_callback_info info); 133 static napi_value EnableImsSwitch(napi_env env, napi_callback_info info); 134 static napi_value DisableImsSwitch(napi_env env, napi_callback_info info); 135 static napi_value IsImsSwitchEnabled(napi_env env, napi_callback_info info); 136 static napi_value IsImsSwitchEnabledSync(napi_env env, napi_callback_info info); 137 static napi_value SetVoNRState(napi_env env, napi_callback_info info); 138 static napi_value GetVoNRState(napi_env env, napi_callback_info info); 139 static napi_value StartRTT(napi_env env, napi_callback_info info); 140 static napi_value StopRTT(napi_env env, napi_callback_info info); 141 static napi_value JoinConference(napi_env env, napi_callback_info info); 142 static napi_value UpdateImsCallMode(napi_env env, napi_callback_info info); 143 static napi_value ReportOttCallDetailsInfo(napi_env env, napi_callback_info info); 144 static napi_value ReportOttCallEventInfo(napi_env env, napi_callback_info info); 145 static napi_value HasVoiceCapability(napi_env env, napi_callback_info info); 146 static napi_value CloseUnFinishedUssd(napi_env env, napi_callback_info info); 147 static napi_value InputDialerSpecialCode(napi_env env, napi_callback_info info); 148 static napi_value RemoveMissedIncomingCallNotification(napi_env env, napi_callback_info info); 149 static napi_value SetVoIPCallState(napi_env env, napi_callback_info info); 150 static napi_value CancelCallUpgrade(napi_env env, napi_callback_info info); 151 static napi_value SendCallUiEvent(napi_env env, napi_callback_info info); 152 153 private: 154 static void RegisterCallBack(); 155 static void NativeCallBack(napi_env env, napi_status status, void *data); 156 static void NativeDialCallBack(napi_env env, napi_status status, void *data); 157 static void NativeVoidCallBack(napi_env env, napi_status status, void *data); 158 static void NativeVoidCallBackWithErrorCode(napi_env env, napi_status status, void *data); 159 static void NativePropertyCallBack(napi_env env, napi_status status, void *data); 160 static void NativeGetMainCallIdCallBack(napi_env env, napi_status status, void *data); 161 static void NativeIsImsSwitchEnabledCallBack(napi_env env, napi_status status, void *data); 162 static void NativeGetVoNRStateCallBack(napi_env env, napi_status status, void *data); 163 static void NativeBoolCallBack(napi_env env, napi_status status, void *data); 164 static void NativeBoolCallBackWithErrorCode(napi_env env, napi_status status, void *data); 165 static void NativeIsEmergencyPhoneNumberCallBack(napi_env env, napi_status status, void *data); 166 static void NativeFormatNumberCallBack(napi_env env, napi_status status, void *data); 167 static void NativeListCallBack(napi_env env, napi_status status, void *data); 168 static void NativeOffCallBack(napi_env env, napi_status status, void *data); 169 static void GetDialInfo(napi_env env, napi_value objValue, DialAsyncContext &asyncContext); 170 static void GetSmsInfo(napi_env env, napi_value objValue, RejectAsyncContext &asyncContext); 171 static int32_t GetRestrictionInfo(napi_env env, napi_value objValue, CallRestrictionAsyncContext &asyncContext); 172 static int32_t GetTransferInfo(napi_env env, napi_value objValue, CallTransferAsyncContext &asyncContext); 173 static void NativeDial(napi_env env, void *data); 174 static void NativeDialCall(napi_env env, void *data); 175 static void NativeMakeCall(napi_env env, void *data); 176 static void NativeAnswerCall(napi_env env, void *data); 177 static void NativeRejectCall(napi_env env, void *data); 178 static void NativeHangUpCall(napi_env env, void *data); 179 static void NativeHoldCall(napi_env env, void *data); 180 static void NativeUnHoldCall(napi_env env, void *data); 181 static void NativeSwitchCall(napi_env env, void *data); 182 static void NativeCombineConference(napi_env env, void *data); 183 static void NativeSeparateConference(napi_env env, void *data); 184 static void NativeKickOutFromConference(napi_env env, void *data); 185 static void NativeGetMainCallId(napi_env env, void *data); 186 static void NativeGetSubCallIdList(napi_env env, void *data); 187 static void NativeGetCallIdListForConference(napi_env env, void *data); 188 static void NativeGetCallWaiting(napi_env env, void *data); 189 static void NativeSetCallWaiting(napi_env env, void *data); 190 static void NativeGetCallRestriction(napi_env env, void *data); 191 static void NativeSetCallRestriction(napi_env env, void *data); 192 static void NativeSetCallRestrictionPassword(napi_env env, void *data); 193 static void NativeGetTransferNumber(napi_env env, void *data); 194 static void NativeSetTransferNumber(napi_env env, void *data); 195 static void NativeCanSetCallTransferTime(napi_env env, void *data); 196 static void NativeStartDTMF(napi_env env, void *data); 197 static void NativeStopDTMF(napi_env env, void *data); 198 static void NativeGetCallState(napi_env env, void *data); 199 static void NativeIsRinging(napi_env env, void *data); 200 static void NativeHasCall(napi_env env, void *data); 201 static void NativeIsNewCallAllowed(napi_env env, void *data); 202 static void NativeIsInEmergencyCall(napi_env env, void *data); 203 static void NativeIsEmergencyPhoneNumber(napi_env env, void *data); 204 static void NativeFormatPhoneNumber(napi_env env, void *data); 205 static void NativeFormatPhoneNumberToE164(napi_env env, void *data); 206 static void NativeSetMuted(napi_env env, void *data); 207 static void NativeCancelMuted(napi_env env, void *data); 208 static void NativeMuteRinger(napi_env env, void *data); 209 static void NativeSetAudioDevice(napi_env env, void *data); 210 static void NativeControlCamera(napi_env env, void *data); 211 static void NativeSetPreviewWindow(napi_env env, void *data); 212 static void NativeSetDisplayWindow(napi_env env, void *data); 213 static void NativeSetCameraZoom(napi_env env, void *data); 214 static void NativeSetPausePicture(napi_env env, void *data); 215 static void NativeSetDeviceDirection(napi_env env, void *data); 216 static void NativeRequestCameraCapabilities(napi_env env, void *data); 217 static void NativeSetCallPreferenceMode(napi_env env, void *data); 218 static void NativeIsImsSwitchEnabled(napi_env env, void *data); 219 static void NativeEnableImsSwitch(napi_env env, void *data); 220 static void NativeDisableImsSwitch(napi_env env, void *data); 221 static void NativeSetVoNRState(napi_env env, void *data); 222 static void NativeGetVoNRState(napi_env env, void *data); 223 static void NativeStartRTT(napi_env env, void *data); 224 static void NativeStopRTT(napi_env env, void *data); 225 static void NativeJoinConference(napi_env env, void *data); 226 static void NativeUpdateImsCallMode(napi_env env, void *data); 227 static void NativeCloseUnFinishedUssd(napi_env env, void *data); 228 static void NativeInputDialerSpecialCode(napi_env env, void *data); 229 static void NativeRemoveMissedIncomingCallNotification(napi_env env, void *data); 230 static void NativeSetVoIPCallState(napi_env env, void *data); 231 static void NativeCancelCallUpgrade(napi_env env, void *data); 232 static void NativeSendCallUiEvent(napi_env env, void *data); 233 static bool MatchEmptyParameter(napi_env env, const napi_value parameters[], const size_t parameterCount); 234 static bool MatchOneOptionalNumberParameter( 235 napi_env env, const napi_value parameters[], const size_t parameterCount); 236 static bool MatchAnswerCallParameter( 237 napi_env env, const napi_value parameters[], const size_t parameterCount); 238 static bool MatchOneNumberParameter(napi_env env, const napi_value parameters[], const size_t parameterCount); 239 static bool MatchOneStringParameter(napi_env env, const napi_value parameters[], const size_t parameterCount); 240 static bool MatchObserverOffParameter(napi_env env, const napi_value parameters[], const size_t parameterCount); 241 static bool MatchTwoNumberParameters(napi_env env, const napi_value parameters[], const size_t parameterCount); 242 static bool MatchNumberAndObjectParameters( 243 napi_env env, const napi_value parameters[], const size_t parameterCount); 244 static bool MatchNumberAndBoolParameters(napi_env env, const napi_value parameters[], const size_t parameterCount); 245 static bool MatchNumberAndStringParameters( 246 napi_env env, const napi_value parameters[], const size_t parameterCount); 247 static bool MatchAudioDeviceParameters(napi_env env, const napi_value parameters[], const size_t parameterCount); 248 static bool MatchRejectCallParameters(napi_env env, const napi_value parameters[], const size_t parameterCount); 249 static bool MatchRejectCallFirstIllegalParameters(napi_env env, const napi_value parameters[]); 250 static bool MatchRejectCallSecondIllegalParameters(napi_env env, const napi_value parameters[]); 251 static bool MatchRejectCallTwoIllegalParameters(napi_env env, const napi_value parameters[]); 252 static void NativeReportOttCallDetailsInfo(napi_env env, void *data); 253 static void NativeReportOttCallEventInfo(napi_env env, void *data); 254 static void NativePostDialProceed(napi_env env, void *data); 255 static napi_value HandleAsyncWork(napi_env env, AsyncContext *context, std::string workName, 256 napi_async_execute_callback execute, napi_async_complete_callback complete); 257 static void RegisterNapiCallFuncCallback(std::string tmpStr, EventCallback stateCallback); 258 static void UnRegisterCallbackWithListenerType(std::string tmpStr); 259 static bool MatchStringAndVariableObjectParameters( 260 napi_env env, const napi_value parameters[], const size_t parameterCount); 261 static bool MatchTwoStringParameter(napi_env env, const napi_value parameters[], const size_t parameterCount); 262 static bool MatchCallRestrictionPasswordParameter( 263 napi_env env, const napi_value parameters[], const size_t parameterCount); 264 static void HandleRejectCall(napi_env env, RejectAsyncContext &asyncContext, 265 const napi_value parameters[], const size_t parameterCount); 266 private: 267 static int32_t registerStatus_; 268 }; 269 } // namespace Telephony 270 } // namespace OHOS 271 272 #endif // NAPI_CALL_MANAGER_H 273