1e1c44949Sopenharmony_ci/* 2e1c44949Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3e1c44949Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e1c44949Sopenharmony_ci * you may not use this file except in compliance with the License. 5e1c44949Sopenharmony_ci * You may obtain a copy of the License at 6e1c44949Sopenharmony_ci * 7e1c44949Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e1c44949Sopenharmony_ci * 9e1c44949Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e1c44949Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e1c44949Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e1c44949Sopenharmony_ci * See the License for the specific language governing permissions and 13e1c44949Sopenharmony_ci * limitations under the License. 14e1c44949Sopenharmony_ci */ 15e1c44949Sopenharmony_ci 16e1c44949Sopenharmony_ci#include "voip_call.h" 17e1c44949Sopenharmony_ci 18e1c44949Sopenharmony_ci#include "call_control_manager.h" 19e1c44949Sopenharmony_ci#include "call_manager_errors.h" 20e1c44949Sopenharmony_ci#include "call_object_manager.h" 21e1c44949Sopenharmony_ci#include "telephony_log_wrapper.h" 22e1c44949Sopenharmony_ci#include "voip_call_connection.h" 23e1c44949Sopenharmony_ci 24e1c44949Sopenharmony_cinamespace OHOS { 25e1c44949Sopenharmony_cinamespace Telephony { 26e1c44949Sopenharmony_ciVoIPCall::VoIPCall(DialParaInfo &info) : CarrierCall(info) 27e1c44949Sopenharmony_ci{ 28e1c44949Sopenharmony_ci callId_ = info.callId; 29e1c44949Sopenharmony_ci voipCallId_ = info.voipCallInfo.voipCallId; 30e1c44949Sopenharmony_ci userName_ = info.voipCallInfo.userName; 31e1c44949Sopenharmony_ci userProfile_.assign((info.voipCallInfo.userProfile).begin(), (info.voipCallInfo.userProfile).end()); 32e1c44949Sopenharmony_ci abilityName_ = info.voipCallInfo.abilityName; 33e1c44949Sopenharmony_ci extensionId_ = info.voipCallInfo.extensionId; 34e1c44949Sopenharmony_ci voipBundleName_ = info.voipCallInfo.voipBundleName; 35e1c44949Sopenharmony_ci showBannerForIncomingCall_ = info.voipCallInfo.showBannerForIncomingCall; 36e1c44949Sopenharmony_ci isConferenceCall_ = info.voipCallInfo.isConferenceCall; 37e1c44949Sopenharmony_ci isVoiceAnswerSupported_ = info.voipCallInfo.isVoiceAnswerSupported; 38e1c44949Sopenharmony_ci hasMicPermission_ = info.voipCallInfo.hasMicPermission; 39e1c44949Sopenharmony_ci uid_ = info.voipCallInfo.uid; 40e1c44949Sopenharmony_ci} 41e1c44949Sopenharmony_ci 42e1c44949Sopenharmony_ciVoIPCall::~VoIPCall() {} 43e1c44949Sopenharmony_ci 44e1c44949Sopenharmony_ciint32_t VoIPCall::DialingProcess() 45e1c44949Sopenharmony_ci{ 46e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 47e1c44949Sopenharmony_ci} 48e1c44949Sopenharmony_ci 49e1c44949Sopenharmony_ciint32_t VoIPCall::AnswerCall(int32_t videoState) 50e1c44949Sopenharmony_ci{ 51e1c44949Sopenharmony_ci TELEPHONY_LOGI("VoIPCall::AnswerCall"); 52e1c44949Sopenharmony_ci VoipCallEventInfo voipcallInfo; 53e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_ERROR; 54e1c44949Sopenharmony_ci ret = PackVoipCallInfo(voipcallInfo); 55e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 56e1c44949Sopenharmony_ci TELEPHONY_LOGW("PackVoipCallInfo failed!"); 57e1c44949Sopenharmony_ci } 58e1c44949Sopenharmony_ci DelayedSingleton<VoipCallConnection>::GetInstance()->AnswerCall(voipcallInfo, videoState); 59e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 60e1c44949Sopenharmony_ci TELEPHONY_LOGE("answer call failed!"); 61e1c44949Sopenharmony_ci return CALL_ERR_ANSWER_FAILED; 62e1c44949Sopenharmony_ci } 63e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 64e1c44949Sopenharmony_ci} 65e1c44949Sopenharmony_ci 66e1c44949Sopenharmony_ciint32_t VoIPCall::PackVoipCallInfo(VoipCallEventInfo &voipcallInfo) 67e1c44949Sopenharmony_ci{ 68e1c44949Sopenharmony_ci voipcallInfo.voipCallId = voipCallId_; 69e1c44949Sopenharmony_ci voipcallInfo.bundleName = voipBundleName_; 70e1c44949Sopenharmony_ci voipcallInfo.uid = uid_; 71e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 72e1c44949Sopenharmony_ci} 73e1c44949Sopenharmony_ci 74e1c44949Sopenharmony_ciint32_t VoIPCall::RejectCall() 75e1c44949Sopenharmony_ci{ 76e1c44949Sopenharmony_ci TELEPHONY_LOGI("VoIPCall::RejectCall enter"); 77e1c44949Sopenharmony_ci VoipCallEventInfo voipcallInfo; 78e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_ERROR; 79e1c44949Sopenharmony_ci ret = PackVoipCallInfo(voipcallInfo); 80e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 81e1c44949Sopenharmony_ci TELEPHONY_LOGW("PackVoipCallInfo failed!"); 82e1c44949Sopenharmony_ci } 83e1c44949Sopenharmony_ci DelayedSingleton<VoipCallConnection>::GetInstance()->RejectCall(voipcallInfo); 84e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 85e1c44949Sopenharmony_ci TELEPHONY_LOGE("reject call failed!"); 86e1c44949Sopenharmony_ci return CALL_ERR_ANSWER_FAILED; 87e1c44949Sopenharmony_ci } 88e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 89e1c44949Sopenharmony_ci} 90e1c44949Sopenharmony_ci 91e1c44949Sopenharmony_ciint32_t VoIPCall::HangUpCall() 92e1c44949Sopenharmony_ci{ 93e1c44949Sopenharmony_ci TELEPHONY_LOGI("VoIPCall::HangUpCall enter"); 94e1c44949Sopenharmony_ci VoipCallEventInfo voipcallInfo; 95e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_ERROR; 96e1c44949Sopenharmony_ci ret = PackVoipCallInfo(voipcallInfo); 97e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 98e1c44949Sopenharmony_ci TELEPHONY_LOGW("PackVoipCallInfo failed!"); 99e1c44949Sopenharmony_ci } 100e1c44949Sopenharmony_ci voipcallInfo.errorReason = ErrorReason::USER_ANSWER_CELLULAR_FIRST; 101e1c44949Sopenharmony_ci DelayedSingleton<VoipCallConnection>::GetInstance()->HangUpCall(voipcallInfo); 102e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 103e1c44949Sopenharmony_ci TELEPHONY_LOGE("hangup call failed!"); 104e1c44949Sopenharmony_ci return CALL_ERR_ANSWER_FAILED; 105e1c44949Sopenharmony_ci } 106e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 107e1c44949Sopenharmony_ci} 108e1c44949Sopenharmony_ci 109e1c44949Sopenharmony_ciint32_t VoIPCall::HangUpCall(const ErrorReason &status) 110e1c44949Sopenharmony_ci{ 111e1c44949Sopenharmony_ci TELEPHONY_LOGI("VoIPCall::dial cellularcall HangUpvoipCall enter"); 112e1c44949Sopenharmony_ci VoipCallEventInfo voipcallInfo; 113e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_ERROR; 114e1c44949Sopenharmony_ci ret = PackVoipCallInfo(voipcallInfo); 115e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 116e1c44949Sopenharmony_ci TELEPHONY_LOGW("PackVoipCallInfo failed!"); 117e1c44949Sopenharmony_ci } 118e1c44949Sopenharmony_ci voipcallInfo.errorReason = status; 119e1c44949Sopenharmony_ci DelayedSingleton<VoipCallConnection>::GetInstance()->HangUpCall(voipcallInfo); 120e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 121e1c44949Sopenharmony_ci TELEPHONY_LOGE("hangup call failed!"); 122e1c44949Sopenharmony_ci return CALL_ERR_ANSWER_FAILED; 123e1c44949Sopenharmony_ci } 124e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 125e1c44949Sopenharmony_ci} 126e1c44949Sopenharmony_ci 127e1c44949Sopenharmony_ciint32_t VoIPCall::HoldCall() 128e1c44949Sopenharmony_ci{ 129e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 130e1c44949Sopenharmony_ci} 131e1c44949Sopenharmony_ci 132e1c44949Sopenharmony_ciint32_t VoIPCall::UnHoldCall() 133e1c44949Sopenharmony_ci{ 134e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 135e1c44949Sopenharmony_ci} 136e1c44949Sopenharmony_ci 137e1c44949Sopenharmony_ciint32_t VoIPCall::SwitchCall() 138e1c44949Sopenharmony_ci{ 139e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 140e1c44949Sopenharmony_ci} 141e1c44949Sopenharmony_ci 142e1c44949Sopenharmony_ciint32_t VoIPCall::SetMute(int32_t mute, int32_t slotId) 143e1c44949Sopenharmony_ci{ 144e1c44949Sopenharmony_ci CallAttributeInfo info; 145e1c44949Sopenharmony_ci GetCallAttributeInfo(info); 146e1c44949Sopenharmony_ci std::string voipCallId = info.voipCallInfo.voipBundleName + ":" + std::to_string(info.voipCallInfo.uid) + ":" + 147e1c44949Sopenharmony_ci info.voipCallInfo.voipCallId; 148e1c44949Sopenharmony_ci CallAudioEvent callAudioEvent = mute == 1 ? CallAudioEvent::AUDIO_EVENT_MUTED : CallAudioEvent::AUDIO_EVENT_UNMUTED; 149e1c44949Sopenharmony_ci TELEPHONY_LOGI("VoIPCall::setMute voipCallId: %{public}s, callAudioEvent: %{public}d", voipCallId.c_str(), 150e1c44949Sopenharmony_ci callAudioEvent); 151e1c44949Sopenharmony_ci DelayedSingleton<VoipCallConnection>::GetInstance()->SendCallUiEvent(voipCallId, callAudioEvent); 152e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 153e1c44949Sopenharmony_ci} 154e1c44949Sopenharmony_ci 155e1c44949Sopenharmony_civoid VoIPCall::GetCallAttributeInfo(CallAttributeInfo &info) 156e1c44949Sopenharmony_ci{ 157e1c44949Sopenharmony_ci GetCallAttributeCarrierInfo(info); 158e1c44949Sopenharmony_ci info.callId = callId_; 159e1c44949Sopenharmony_ci info.voipCallInfo.voipCallId = voipCallId_; 160e1c44949Sopenharmony_ci info.voipCallInfo.userName = userName_; 161e1c44949Sopenharmony_ci (info.voipCallInfo.userProfile).assign(userProfile_.begin(), userProfile_.end()); 162e1c44949Sopenharmony_ci info.voipCallInfo.extensionId = extensionId_; 163e1c44949Sopenharmony_ci info.voipCallInfo.abilityName = abilityName_; 164e1c44949Sopenharmony_ci info.voipCallInfo.voipBundleName = voipBundleName_; 165e1c44949Sopenharmony_ci info.voipCallInfo.showBannerForIncomingCall = showBannerForIncomingCall_; 166e1c44949Sopenharmony_ci info.voipCallInfo.isConferenceCall = isConferenceCall_; 167e1c44949Sopenharmony_ci info.voipCallInfo.isVoiceAnswerSupported = isVoiceAnswerSupported_; 168e1c44949Sopenharmony_ci info.voipCallInfo.hasMicPermission = hasMicPermission_; 169e1c44949Sopenharmony_ci info.voipCallInfo.uid = uid_; 170e1c44949Sopenharmony_ci return; 171e1c44949Sopenharmony_ci} 172e1c44949Sopenharmony_ci 173e1c44949Sopenharmony_ciint32_t VoIPCall::CombineConference() 174e1c44949Sopenharmony_ci{ 175e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 176e1c44949Sopenharmony_ci} 177e1c44949Sopenharmony_ci 178e1c44949Sopenharmony_civoid VoIPCall::HandleCombineConferenceFailEvent() 179e1c44949Sopenharmony_ci{ 180e1c44949Sopenharmony_ci return; 181e1c44949Sopenharmony_ci} 182e1c44949Sopenharmony_ci 183e1c44949Sopenharmony_ciint32_t VoIPCall::SeparateConference() 184e1c44949Sopenharmony_ci{ 185e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 186e1c44949Sopenharmony_ci} 187e1c44949Sopenharmony_ci 188e1c44949Sopenharmony_ciint32_t VoIPCall::KickOutFromConference() 189e1c44949Sopenharmony_ci{ 190e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 191e1c44949Sopenharmony_ci} 192e1c44949Sopenharmony_ci 193e1c44949Sopenharmony_ciint32_t VoIPCall::CanCombineConference() 194e1c44949Sopenharmony_ci{ 195e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 196e1c44949Sopenharmony_ci} 197e1c44949Sopenharmony_ci 198e1c44949Sopenharmony_ciint32_t VoIPCall::CanSeparateConference() 199e1c44949Sopenharmony_ci{ 200e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 201e1c44949Sopenharmony_ci} 202e1c44949Sopenharmony_ci 203e1c44949Sopenharmony_ciint32_t VoIPCall::CanKickOutFromConference() 204e1c44949Sopenharmony_ci{ 205e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 206e1c44949Sopenharmony_ci} 207e1c44949Sopenharmony_ci 208e1c44949Sopenharmony_ciint32_t VoIPCall::GetMainCallId(int32_t &mainCallId) 209e1c44949Sopenharmony_ci{ 210e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 211e1c44949Sopenharmony_ci} 212e1c44949Sopenharmony_ci 213e1c44949Sopenharmony_ciint32_t VoIPCall::GetSubCallIdList(std::vector<std::u16string> &callIdList) 214e1c44949Sopenharmony_ci{ 215e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 216e1c44949Sopenharmony_ci} 217e1c44949Sopenharmony_ci 218e1c44949Sopenharmony_ciint32_t VoIPCall::GetCallIdListForConference(std::vector<std::u16string> &callIdList) 219e1c44949Sopenharmony_ci{ 220e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 221e1c44949Sopenharmony_ci} 222e1c44949Sopenharmony_ci 223e1c44949Sopenharmony_ciint32_t VoIPCall::IsSupportConferenceable() 224e1c44949Sopenharmony_ci{ 225e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 226e1c44949Sopenharmony_ci} 227e1c44949Sopenharmony_ci 228e1c44949Sopenharmony_ciint32_t VoIPCall::LaunchConference() 229e1c44949Sopenharmony_ci{ 230e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 231e1c44949Sopenharmony_ci} 232e1c44949Sopenharmony_ci 233e1c44949Sopenharmony_ciint32_t VoIPCall::ExitConference() 234e1c44949Sopenharmony_ci{ 235e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 236e1c44949Sopenharmony_ci} 237e1c44949Sopenharmony_ci 238e1c44949Sopenharmony_ciint32_t VoIPCall::HoldConference() 239e1c44949Sopenharmony_ci{ 240e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 241e1c44949Sopenharmony_ci} 242e1c44949Sopenharmony_ci 243e1c44949Sopenharmony_cistd::string VoIPCall::GetVoipCallId() 244e1c44949Sopenharmony_ci{ 245e1c44949Sopenharmony_ci return voipCallId_; 246e1c44949Sopenharmony_ci} 247e1c44949Sopenharmony_ci 248e1c44949Sopenharmony_cistd::string VoIPCall::GetVoipBundleName() 249e1c44949Sopenharmony_ci{ 250e1c44949Sopenharmony_ci return voipBundleName_; 251e1c44949Sopenharmony_ci} 252e1c44949Sopenharmony_ci 253e1c44949Sopenharmony_ciint32_t VoIPCall::GetVoipUid() 254e1c44949Sopenharmony_ci{ 255e1c44949Sopenharmony_ci return uid_; 256e1c44949Sopenharmony_ci} 257e1c44949Sopenharmony_ci} // namespace Telephony 258e1c44949Sopenharmony_ci} // namespace OHOS 259