• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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