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