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