1 /*
2 * Copyright (C) 2021 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 "call_request_handler.h"
17
18 #include <securec.h>
19 #include <string_ex.h>
20
21 #include "call_manager_errors.h"
22 #include "telephony_log_wrapper.h"
23
24 namespace OHOS {
25 namespace Telephony {
CallRequestHandler(const std::shared_ptr<AppExecFwk::EventRunner> & runner)26 CallRequestHandler::CallRequestHandler(const std::shared_ptr<AppExecFwk::EventRunner> &runner)
27 : AppExecFwk::EventHandler(runner), callRequestProcessPtr_(nullptr)
28 {
29 memberFuncMap_[CallRequestHandlerService::HANDLER_DIAL_CALL_REQUEST] = &CallRequestHandler::DialCallEvent;
30 memberFuncMap_[CallRequestHandlerService::HANDLER_ANSWER_CALL_REQUEST] = &CallRequestHandler::AcceptCallEvent;
31 memberFuncMap_[CallRequestHandlerService::HANDLER_REJECT_CALL_REQUEST] = &CallRequestHandler::RejectCallEvent;
32 memberFuncMap_[CallRequestHandlerService::HANDLER_HANGUP_CALL_REQUEST] = &CallRequestHandler::HangUpCallEvent;
33 memberFuncMap_[CallRequestHandlerService::HANDLER_HOLD_CALL_REQUEST] = &CallRequestHandler::HoldCallEvent;
34 memberFuncMap_[CallRequestHandlerService::HANDLER_UNHOLD_CALL_REQUEST] = &CallRequestHandler::UnHoldCallEvent;
35 memberFuncMap_[CallRequestHandlerService::HANDLER_SWAP_CALL_REQUEST] = &CallRequestHandler::SwitchCallEvent;
36 memberFuncMap_[CallRequestHandlerService::HANDLER_COMBINE_CONFERENCE_REQUEST] =
37 &CallRequestHandler::CombineConferenceEvent;
38 memberFuncMap_[CallRequestHandlerService::HANDLER_SEPARATE_CONFERENCE_REQUEST] =
39 &CallRequestHandler::SeparateConferenceEvent;
40 memberFuncMap_[CallRequestHandlerService::HANDLER_UPDATE_CALL_MEDIA_MODE_REQUEST] =
41 &CallRequestHandler::UpdateCallMediaModeEvent;
42 memberFuncMap_[CallRequestHandlerService::HANDLER_STARTRTT_REQUEST] = &CallRequestHandler::StartRttEvent;
43 memberFuncMap_[CallRequestHandlerService::HANDLER_STOPRTT_REQUEST] = &CallRequestHandler::StopRttEvent;
44 memberFuncMap_[CallRequestHandlerService::HANDLER_INVITE_TO_CONFERENCE] =
45 &CallRequestHandler::JoinConferenceEvent;
46 }
47
~CallRequestHandler()48 CallRequestHandler::~CallRequestHandler()
49 {
50 callRequestProcessPtr_ = nullptr;
51 }
52
Init()53 void CallRequestHandler::Init()
54 {
55 callRequestProcessPtr_ = std::make_unique<CallRequestProcess>();
56 if (callRequestProcessPtr_ == nullptr) {
57 TELEPHONY_LOGE("callRequestProcessPtr_ is null");
58 return;
59 }
60 }
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)61 void CallRequestHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
62 {
63 if (event == nullptr) {
64 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
65 return;
66 }
67 TELEPHONY_LOGI("CallRequestHandler inner event id obtained: %{public}u.", event->GetInnerEventId());
68 auto itFunc = memberFuncMap_.find(event->GetInnerEventId());
69 if (itFunc != memberFuncMap_.end()) {
70 auto memberFunc = itFunc->second;
71 if (memberFunc != nullptr) {
72 return (this->*memberFunc)(event);
73 }
74 }
75 }
76
DialCallEvent(const AppExecFwk::InnerEvent::Pointer & event)77 void CallRequestHandler::DialCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
78 {
79 if (event == nullptr) {
80 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
81 return;
82 }
83 if (callRequestProcessPtr_ == nullptr) {
84 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
85 return;
86 }
87 callRequestProcessPtr_->DialRequest();
88 }
89
AcceptCallEvent(const AppExecFwk::InnerEvent::Pointer & event)90 void CallRequestHandler::AcceptCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
91 {
92 if (event == nullptr) {
93 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
94 return;
95 }
96 auto object = event->GetUniqueObject<AnswerCallPara>();
97 if (object == nullptr) {
98 TELEPHONY_LOGE("object is nullptr!");
99 return;
100 }
101 AnswerCallPara acceptPara = *object;
102 if (callRequestProcessPtr_ == nullptr) {
103 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
104 return;
105 }
106 callRequestProcessPtr_->AnswerRequest(acceptPara.callId, acceptPara.videoState);
107 }
108
RejectCallEvent(const AppExecFwk::InnerEvent::Pointer & event)109 void CallRequestHandler::RejectCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
110 {
111 if (event == nullptr) {
112 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
113 return;
114 }
115 auto object = event->GetUniqueObject<RejectCallPara>();
116 if (object == nullptr) {
117 TELEPHONY_LOGE("object is nullptr!");
118 return;
119 }
120 RejectCallPara rejectPara = *object;
121 if (callRequestProcessPtr_ == nullptr) {
122 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
123 return;
124 }
125 std::string content(rejectPara.content);
126 callRequestProcessPtr_->RejectRequest(rejectPara.callId, rejectPara.isSendSms, content);
127 }
128
HangUpCallEvent(const AppExecFwk::InnerEvent::Pointer & event)129 void CallRequestHandler::HangUpCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
130 {
131 if (event == nullptr) {
132 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
133 return;
134 }
135 auto object = event->GetUniqueObject<int32_t>();
136 if (object == nullptr) {
137 TELEPHONY_LOGE("object is nullptr!");
138 return;
139 }
140 int32_t callId = *object;
141 if (callRequestProcessPtr_ == nullptr) {
142 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
143 return;
144 }
145 callRequestProcessPtr_->HangUpRequest(callId);
146 }
147
HoldCallEvent(const AppExecFwk::InnerEvent::Pointer & event)148 void CallRequestHandler::HoldCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
149 {
150 if (event == nullptr) {
151 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
152 return;
153 }
154 auto object = event->GetUniqueObject<int32_t>();
155 if (object == nullptr) {
156 TELEPHONY_LOGE("object is nullptr!");
157 return;
158 }
159 int32_t callId = *object;
160 if (callRequestProcessPtr_ == nullptr) {
161 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
162 return;
163 }
164 callRequestProcessPtr_->HoldRequest(callId);
165 }
166
UnHoldCallEvent(const AppExecFwk::InnerEvent::Pointer & event)167 void CallRequestHandler::UnHoldCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
168 {
169 if (event == nullptr) {
170 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
171 return;
172 }
173 auto object = event->GetUniqueObject<int32_t>();
174 if (object == nullptr) {
175 TELEPHONY_LOGE("object is nullptr!");
176 return;
177 }
178 int32_t callId = *object;
179 if (callRequestProcessPtr_ == nullptr) {
180 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
181 return;
182 }
183 callRequestProcessPtr_->UnHoldRequest(callId);
184 }
185
SwitchCallEvent(const AppExecFwk::InnerEvent::Pointer & event)186 void CallRequestHandler::SwitchCallEvent(const AppExecFwk::InnerEvent::Pointer &event)
187 {
188 if (event == nullptr) {
189 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
190 return;
191 }
192 auto object = event->GetUniqueObject<int32_t>();
193 if (object == nullptr) {
194 TELEPHONY_LOGE("object is nullptr!");
195 return;
196 }
197 int32_t callId = *object;
198 if (callRequestProcessPtr_ == nullptr) {
199 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
200 return;
201 }
202 callRequestProcessPtr_->SwitchRequest(callId);
203 }
204
CombineConferenceEvent(const AppExecFwk::InnerEvent::Pointer & event)205 void CallRequestHandler::CombineConferenceEvent(const AppExecFwk::InnerEvent::Pointer &event)
206 {
207 if (event == nullptr) {
208 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
209 return;
210 }
211 auto object = event->GetUniqueObject<int32_t>();
212 if (object == nullptr) {
213 TELEPHONY_LOGE("object is nullptr!");
214 return;
215 }
216 int32_t mainCallId = *object;
217 if (callRequestProcessPtr_ == nullptr) {
218 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
219 return;
220 }
221 callRequestProcessPtr_->CombineConferenceRequest(mainCallId);
222 }
223
SeparateConferenceEvent(const AppExecFwk::InnerEvent::Pointer & event)224 void CallRequestHandler::SeparateConferenceEvent(const AppExecFwk::InnerEvent::Pointer &event)
225 {
226 if (event == nullptr) {
227 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
228 return;
229 }
230 auto object = event->GetUniqueObject<int32_t>();
231 if (object == nullptr) {
232 TELEPHONY_LOGE("object is nullptr!");
233 return;
234 }
235 int32_t callId = *object;
236 if (callRequestProcessPtr_ == nullptr) {
237 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
238 return;
239 }
240 callRequestProcessPtr_->SeparateConferenceRequest(callId);
241 }
242
UpdateCallMediaModeEvent(const AppExecFwk::InnerEvent::Pointer & event)243 void CallRequestHandler::UpdateCallMediaModeEvent(const AppExecFwk::InnerEvent::Pointer &event)
244 {
245 if (event == nullptr) {
246 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
247 return;
248 }
249 auto object = event->GetUniqueObject<CallMediaUpdatePara>();
250 if (object == nullptr) {
251 TELEPHONY_LOGE("object is nullptr!");
252 return;
253 }
254 if (callRequestProcessPtr_ == nullptr) {
255 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
256 return;
257 }
258 callRequestProcessPtr_->UpdateCallMediaModeRequest(object->callId, object->mode);
259 }
260
StartRttEvent(const AppExecFwk::InnerEvent::Pointer & event)261 void CallRequestHandler::StartRttEvent(const AppExecFwk::InnerEvent::Pointer &event)
262 {
263 if (event == nullptr) {
264 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
265 return;
266 }
267 auto object = event->GetUniqueObject<StartRttPara>();
268 if (object == nullptr) {
269 TELEPHONY_LOGE("object is nullptr!");
270 return;
271 }
272 StartRttPara rttPara = *object;
273 if (callRequestProcessPtr_ == nullptr) {
274 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
275 return;
276 }
277 callRequestProcessPtr_->StartRttRequest(rttPara.callId, rttPara.msg);
278 }
279
StopRttEvent(const AppExecFwk::InnerEvent::Pointer & event)280 void CallRequestHandler::StopRttEvent(const AppExecFwk::InnerEvent::Pointer &event)
281 {
282 if (event == nullptr) {
283 TELEPHONY_LOGE("CallRequestHandler::ProcessEvent parameter error");
284 return;
285 }
286 auto object = event->GetUniqueObject<int32_t>();
287 if (object == nullptr) {
288 TELEPHONY_LOGE("object is nullptr!");
289 return;
290 }
291 int32_t callId = *object;
292 if (callRequestProcessPtr_ == nullptr) {
293 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
294 return;
295 }
296 callRequestProcessPtr_->StopRttRequest(callId);
297 }
298
JoinConferenceEvent(const AppExecFwk::InnerEvent::Pointer & event)299 void CallRequestHandler::JoinConferenceEvent(const AppExecFwk::InnerEvent::Pointer &event)
300 {
301 if (event == nullptr) {
302 TELEPHONY_LOGE("CallRequestHandler::JoinConferenceEvent parameter error");
303 return;
304 }
305 auto object = event->GetUniqueObject<JoinConferencePara>();
306 if (object == nullptr) {
307 TELEPHONY_LOGE("object is nullptr!");
308 return;
309 }
310 if (callRequestProcessPtr_ == nullptr) {
311 TELEPHONY_LOGE("callRequestProcessPtr_ is nullptr");
312 return;
313 }
314 callRequestProcessPtr_->JoinConference(object->callId, object->numberList);
315 }
316
CallRequestHandlerService()317 CallRequestHandlerService::CallRequestHandlerService() : eventLoop_(nullptr), handler_(nullptr) {}
318
~CallRequestHandlerService()319 CallRequestHandlerService::~CallRequestHandlerService()
320 {
321 if (eventLoop_ != nullptr) {
322 eventLoop_->Stop();
323 eventLoop_ = nullptr;
324 }
325 handler_ = nullptr;
326 }
327
Start()328 void CallRequestHandlerService::Start()
329 {
330 eventLoop_ = AppExecFwk::EventRunner::Create("CallRequestHandler");
331 if (eventLoop_.get() == nullptr) {
332 TELEPHONY_LOGE("failed to create EventRunner");
333 return;
334 }
335 handler_ = std::make_shared<CallRequestHandler>(eventLoop_);
336 if (handler_.get() == nullptr) {
337 TELEPHONY_LOGE("failed to create CallRequestHandler");
338 return;
339 }
340 handler_->Init();
341 eventLoop_->Run();
342 return;
343 }
344
DialCall()345 int32_t CallRequestHandlerService::DialCall()
346 {
347 if (handler_.get() == nullptr) {
348 TELEPHONY_LOGE("handler_ is nullptr");
349 return TELEPHONY_ERR_LOCAL_PTR_NULL;
350 }
351 if (!handler_->SendEvent(HANDLER_DIAL_CALL_REQUEST)) {
352 TELEPHONY_LOGE("send dial event failed!");
353 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
354 }
355 return TELEPHONY_SUCCESS;
356 }
357
AnswerCall(int32_t callId,int32_t videoState)358 int32_t CallRequestHandlerService::AnswerCall(int32_t callId, int32_t videoState)
359 {
360 if (handler_.get() == nullptr) {
361 TELEPHONY_LOGE("handler_ is nullptr");
362 return TELEPHONY_ERR_LOCAL_PTR_NULL;
363 }
364 std::unique_ptr<AnswerCallPara> para = std::make_unique<AnswerCallPara>();
365 if (para.get() == nullptr) {
366 TELEPHONY_LOGE("make_unique AnswerCallPara failed!");
367 return TELEPHONY_ERR_LOCAL_PTR_NULL;
368 }
369 para->callId = callId;
370 para->videoState = videoState;
371 if (!handler_->SendEvent(HANDLER_ANSWER_CALL_REQUEST, std::move(para))) {
372 TELEPHONY_LOGE("send accept event failed!");
373 return TELEPHONY_ERR_LOCAL_PTR_NULL;
374 }
375 return TELEPHONY_SUCCESS;
376 }
377
RejectCall(int32_t callId,bool isSendSms,std::string & content)378 int32_t CallRequestHandlerService::RejectCall(int32_t callId, bool isSendSms, std::string &content)
379 {
380 if (handler_.get() == nullptr) {
381 TELEPHONY_LOGE("handler_ is nullptr");
382 return TELEPHONY_ERR_LOCAL_PTR_NULL;
383 }
384 std::unique_ptr<RejectCallPara> para = std::make_unique<RejectCallPara>();
385 if (para.get() == nullptr) {
386 TELEPHONY_LOGE("make_unique RejectCallPara failed!");
387 return TELEPHONY_ERR_LOCAL_PTR_NULL;
388 }
389 para->callId = callId;
390 para->isSendSms = isSendSms;
391 (void)memset_s(para->content, REJECT_CALL_MSG_MAX_LEN + 1, 0, REJECT_CALL_MSG_MAX_LEN + 1);
392 if (para->isSendSms &&
393 memcpy_s(para->content, REJECT_CALL_MSG_MAX_LEN, content.c_str(), REJECT_CALL_MSG_MAX_LEN) != 0) {
394 TELEPHONY_LOGE("memcpy_s rejectCall content failed!");
395 return TELEPHONY_ERR_MEMCPY_FAIL;
396 }
397 if (!handler_->SendEvent(HANDLER_REJECT_CALL_REQUEST, std::move(para))) {
398 TELEPHONY_LOGE("send reject event failed!");
399 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
400 }
401 return TELEPHONY_SUCCESS;
402 }
403
HangUpCall(int32_t callId)404 int32_t CallRequestHandlerService::HangUpCall(int32_t callId)
405 {
406 if (handler_.get() == nullptr) {
407 TELEPHONY_LOGE("handler_ is nullptr");
408 return TELEPHONY_ERR_LOCAL_PTR_NULL;
409 }
410 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(callId);
411 if (para.get() == nullptr) {
412 TELEPHONY_LOGE("make_unique callId failed!");
413 return TELEPHONY_ERR_LOCAL_PTR_NULL;
414 }
415 if (!handler_->SendEvent(HANDLER_HANGUP_CALL_REQUEST, std::move(para))) {
416 TELEPHONY_LOGE("send hung up event failed!");
417 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
418 }
419 return TELEPHONY_SUCCESS;
420 }
421
HoldCall(int32_t callId)422 int32_t CallRequestHandlerService::HoldCall(int32_t callId)
423 {
424 if (handler_.get() == nullptr) {
425 TELEPHONY_LOGE("handler_ is nullptr");
426 return TELEPHONY_ERR_LOCAL_PTR_NULL;
427 }
428 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(callId);
429 if (para.get() == nullptr) {
430 TELEPHONY_LOGE("make_unique callId failed!");
431 return TELEPHONY_ERR_LOCAL_PTR_NULL;
432 }
433 if (!handler_->SendEvent(HANDLER_HOLD_CALL_REQUEST, std::move(para))) {
434 TELEPHONY_LOGE("send hold event failed!");
435 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
436 }
437 return TELEPHONY_SUCCESS;
438 }
439
UnHoldCall(int32_t callId)440 int32_t CallRequestHandlerService::UnHoldCall(int32_t callId)
441 {
442 if (handler_.get() == nullptr) {
443 TELEPHONY_LOGE("handler_ is nullptr");
444 return TELEPHONY_ERR_LOCAL_PTR_NULL;
445 }
446 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(callId);
447 if (para.get() == nullptr) {
448 TELEPHONY_LOGE("make_unique callId failed!");
449 return TELEPHONY_ERR_LOCAL_PTR_NULL;
450 }
451 if (!handler_->SendEvent(HANDLER_UNHOLD_CALL_REQUEST, std::move(para))) {
452 TELEPHONY_LOGE("send unHold event failed!");
453 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
454 }
455 return TELEPHONY_SUCCESS;
456 }
457
SwitchCall(int32_t callId)458 int32_t CallRequestHandlerService::SwitchCall(int32_t callId)
459 {
460 if (handler_.get() == nullptr) {
461 TELEPHONY_LOGE("handler_ is nullptr");
462 return TELEPHONY_ERR_LOCAL_PTR_NULL;
463 }
464 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(callId);
465 if (para.get() == nullptr) {
466 TELEPHONY_LOGE("make_unique callId failed!");
467 return TELEPHONY_ERR_LOCAL_PTR_NULL;
468 }
469 if (!handler_->SendEvent(HANDLER_SWAP_CALL_REQUEST, std::move(para))) {
470 TELEPHONY_LOGE("send swap event failed!");
471 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
472 }
473 return TELEPHONY_SUCCESS;
474 }
475
StartRtt(int32_t callId,std::u16string & msg)476 int32_t CallRequestHandlerService::StartRtt(int32_t callId, std::u16string &msg)
477 {
478 if (handler_.get() == nullptr) {
479 TELEPHONY_LOGE("handler_ is nullptr");
480 return TELEPHONY_ERR_LOCAL_PTR_NULL;
481 }
482 std::unique_ptr<StartRttPara> para = std::make_unique<StartRttPara>();
483 if (para.get() == nullptr) {
484 TELEPHONY_LOGE("make_unique StartRttPara failed!");
485 return TELEPHONY_ERR_LOCAL_PTR_NULL;
486 }
487 para->callId = callId;
488 para->msg = msg;
489 if (!handler_->SendEvent(HANDLER_STARTRTT_REQUEST, std::move(para))) {
490 TELEPHONY_LOGE("send StartRtt event failed!");
491 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
492 }
493 return TELEPHONY_SUCCESS;
494 }
495
StopRtt(int32_t callId)496 int32_t CallRequestHandlerService::StopRtt(int32_t callId)
497 {
498 if (handler_.get() == nullptr) {
499 TELEPHONY_LOGE("handler_ is nullptr");
500 return TELEPHONY_ERR_LOCAL_PTR_NULL;
501 }
502 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(callId);
503 if (para.get() == nullptr) {
504 TELEPHONY_LOGE("make_unique callId failed!");
505 return TELEPHONY_ERR_LOCAL_PTR_NULL;
506 }
507 if (!handler_->SendEvent(HANDLER_STOPRTT_REQUEST, std::move(para))) {
508 TELEPHONY_LOGE("send StopRtt event failed!");
509 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
510 }
511 return TELEPHONY_SUCCESS;
512 }
513
JoinConference(int32_t callId,std::vector<std::string> & numberList)514 int32_t CallRequestHandlerService::JoinConference(int32_t callId, std::vector<std::string> &numberList)
515 {
516 if (handler_.get() == nullptr) {
517 TELEPHONY_LOGE("handler_ is nullptr");
518 return TELEPHONY_ERR_LOCAL_PTR_NULL;
519 }
520 std::unique_ptr<JoinConferencePara> para = std::make_unique<JoinConferencePara>();
521 if (para.get() == nullptr) {
522 TELEPHONY_LOGE("make_unique JoinConferencePara failed!");
523 return TELEPHONY_ERR_LOCAL_PTR_NULL;
524 }
525 para->callId = callId;
526 para->numberList = numberList;
527 if (!handler_->SendEvent(HANDLER_INVITE_TO_CONFERENCE, std::move(para))) {
528 TELEPHONY_LOGE("send JoinConference event failed!");
529 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
530 }
531 return TELEPHONY_SUCCESS;
532 }
533
CombineConference(int32_t mainCallId)534 int32_t CallRequestHandlerService::CombineConference(int32_t mainCallId)
535 {
536 if (handler_.get() == nullptr) {
537 TELEPHONY_LOGE("handler_ is nullptr");
538 return TELEPHONY_ERR_LOCAL_PTR_NULL;
539 }
540 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(mainCallId);
541 if (para.get() == nullptr) {
542 TELEPHONY_LOGE("make_unique mainCallId failed!");
543 return TELEPHONY_ERR_LOCAL_PTR_NULL;
544 }
545 if (!handler_->SendEvent(HANDLER_COMBINE_CONFERENCE_REQUEST, std::move(para))) {
546 TELEPHONY_LOGE("send CombineConference event failed!");
547 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
548 }
549 return TELEPHONY_SUCCESS;
550 }
551
SeparateConference(int32_t callId)552 int32_t CallRequestHandlerService::SeparateConference(int32_t callId)
553 {
554 if (handler_.get() == nullptr) {
555 TELEPHONY_LOGE("handler_ is nullptr");
556 return TELEPHONY_ERR_LOCAL_PTR_NULL;
557 }
558 std::unique_ptr<int32_t> para = std::make_unique<int32_t>(callId);
559 if (para.get() == nullptr) {
560 TELEPHONY_LOGE("make_unique callId failed!");
561 return TELEPHONY_ERR_LOCAL_PTR_NULL;
562 }
563 if (!handler_->SendEvent(HANDLER_SEPARATE_CONFERENCE_REQUEST, std::move(para))) {
564 TELEPHONY_LOGE("send SeparateConference event failed!");
565 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
566 }
567 return TELEPHONY_SUCCESS;
568 }
569
UpdateImsCallMode(int32_t callId,ImsCallMode mode)570 int32_t CallRequestHandlerService::UpdateImsCallMode(int32_t callId, ImsCallMode mode)
571 {
572 if (handler_.get() == nullptr) {
573 TELEPHONY_LOGE("handler_ is nullptr");
574 return TELEPHONY_ERR_LOCAL_PTR_NULL;
575 }
576 std::unique_ptr<CallMediaUpdatePara> para = std::make_unique<CallMediaUpdatePara>();
577 if (para.get() == nullptr) {
578 TELEPHONY_LOGE("make_unique CallMediaUpdatePara failed!");
579 return TELEPHONY_ERR_LOCAL_PTR_NULL;
580 }
581 para->callId = callId;
582 para->mode = mode;
583 if (!handler_->SendEvent(HANDLER_UPDATE_CALL_MEDIA_MODE_REQUEST, std::move(para))) {
584 TELEPHONY_LOGE("send UpdateImsCallMode event failed!");
585 return CALL_ERR_SYSTEM_EVENT_HANDLE_FAILURE;
586 }
587 return TELEPHONY_SUCCESS;
588 }
589 } // namespace Telephony
590 } // namespace OHOS
591