1  /*
2   * Copyright (C) 2021-2022 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_manager_service_stub.h"
17  
18  #include <string_ex.h>
19  
20  #include "call_manager_errors.h"
21  #include "telephony_log_wrapper.h"
22  
23  #include "message_option.h"
24  #include "message_parcel.h"
25  
26  #include "call_control_manager.h"
27  
28  #ifdef HICOLLIE_ENABLE
29  #include "xcollie/xcollie.h"
30  #include "xcollie/xcollie_define.h"
31  #define XCOLLIE_TIMEOUT_SECONDS 30
32  #endif
33  
34  namespace OHOS {
35  namespace Telephony {
36  const int32_t MAX_CALLS_NUM = 5;
37  
CallManagerServiceStub()38  CallManagerServiceStub::CallManagerServiceStub()
39  {
40      InitCallBasicRequest();
41      InitCallUtilsRequest();
42      InitCallConferenceRequest();
43      InitCallDtmfRequest();
44      InitCallSupplementRequest();
45      initCallConferenceExRequest();
46      InitCallMultimediaRequest();
47      InitImsServiceRequest();
48      InitOttServiceRequest();
49      InitVoipOperationRequest();
50      memberFuncMap_[INTERFACE_GET_PROXY_OBJECT_PTR] =
51          [this](MessageParcel &data, MessageParcel &reply) { return OnGetProxyObjectPtr(data, reply); };
52  }
53  
~CallManagerServiceStub()54  CallManagerServiceStub::~CallManagerServiceStub()
55  {
56      memberFuncMap_.clear();
57  }
58  
InitCallBasicRequest()59  void CallManagerServiceStub::InitCallBasicRequest()
60  {
61      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_REGISTER_CALLBACK)] =
62          [this](MessageParcel &data, MessageParcel &reply) { return OnRegisterCallBack(data, reply); };
63      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_UNREGISTER_CALLBACK)] =
64          [this](MessageParcel &data, MessageParcel &reply) { return OnUnRegisterCallBack(data, reply); };
65      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_DIAL_CALL)] =
66          [this](MessageParcel &data, MessageParcel &reply) { return OnDialCall(data, reply); };
67      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_MAKE_CALL)] =
68          [this](MessageParcel &data, MessageParcel &reply) { return OnMakeCall(data, reply); };
69      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_ANSWER_CALL)] =
70          [this](MessageParcel &data, MessageParcel &reply) { return OnAcceptCall(data, reply); };
71      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_REJECT_CALL)] =
72          [this](MessageParcel &data, MessageParcel &reply) { return OnRejectCall(data, reply); };
73      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_HOLD_CALL)] =
74          [this](MessageParcel &data, MessageParcel &reply) { return OnHoldCall(data, reply); };
75      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_UNHOLD_CALL)] =
76          [this](MessageParcel &data, MessageParcel &reply) { return OnUnHoldCall(data, reply); };
77      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_DISCONNECT_CALL)] =
78          [this](MessageParcel &data, MessageParcel &reply) { return OnHangUpCall(data, reply); };
79      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_CALL_STATE)] =
80          [this](MessageParcel &data, MessageParcel &reply) { return OnGetCallState(data, reply); };
81      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SWAP_CALL)] =
82          [this](MessageParcel &data, MessageParcel &reply) { return OnSwitchCall(data, reply); };
83      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_INPUT_DIALER_SPECIAL_CODE)] =
84          [this](MessageParcel &data, MessageParcel &reply) { return OnInputDialerSpecialCode(data, reply); };
85      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SEND_CALLUI_EVENT)] =
86          [this](MessageParcel &data, MessageParcel &reply) { return OnSendCallUiEvent(data, reply); };
87  }
88  
InitCallUtilsRequest()89  void CallManagerServiceStub::InitCallUtilsRequest()
90  {
91      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_HAS_CALL)] =
92          [this](MessageParcel &data, MessageParcel &reply) { return OnHasCall(data, reply); };
93      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_NEW_CALL_ALLOWED)] =
94          [this](MessageParcel &data, MessageParcel &reply) { return OnIsNewCallAllowed(data, reply); };
95      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_RINGING)] =
96          [this](MessageParcel &data, MessageParcel &reply) { return OnIsRinging(data, reply); };
97      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_EMERGENCY_CALL)] =
98          [this](MessageParcel &data, MessageParcel &reply) { return OnIsInEmergencyCall(data, reply); };
99      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_EMERGENCY_NUMBER)] =
100          [this](MessageParcel &data, MessageParcel &reply) { return OnIsEmergencyPhoneNumber(data, reply); };
101      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_FORMAT_NUMBER)] =
102          [this](MessageParcel &data, MessageParcel &reply) { return OnFormatPhoneNumber(data, reply); };
103      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_FORMAT_NUMBER_E164)] =
104          [this](MessageParcel &data, MessageParcel &reply) { return OnFormatPhoneNumberToE164(data, reply); };
105      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_CANCEL_MISSED_INCOMING_CALL_NOTIFICATION)] =
106          [this](
107              MessageParcel &data, MessageParcel &reply) { return OnRemoveMissedIncomingCallNotification(data, reply); };
108      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_OBSERVER_ON_CALL_DETAILS_CHANGE)] =
109          [this](MessageParcel &data, MessageParcel &reply) { return OnObserverOnCallDetailsChange(data, reply); };
110  }
111  
InitCallConferenceRequest()112  void CallManagerServiceStub::InitCallConferenceRequest()
113  {
114      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_COMBINE_CONFERENCE)] =
115          [this](MessageParcel &data, MessageParcel &reply) { return OnCombineConference(data, reply); };
116      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SEPARATE_CONFERENCE)] =
117          [this](MessageParcel &data, MessageParcel &reply) { return OnSeparateConference(data, reply); };
118      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_JOIN_CONFERENCE)] =
119          [this](MessageParcel &data, MessageParcel &reply) { return OnJoinConference(data, reply); };
120      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_KICK_OUT_CONFERENCE)] =
121          [this](MessageParcel &data, MessageParcel &reply) { return OnKickOutFromConference(data, reply); };
122  }
123  
InitCallDtmfRequest()124  void CallManagerServiceStub::InitCallDtmfRequest()
125  {
126      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_START_DTMF)] =
127          [this](MessageParcel &data, MessageParcel &reply) { return OnStartDtmf(data, reply); };
128      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_STOP_DTMF)] =
129          [this](MessageParcel &data, MessageParcel &reply) { return OnStopDtmf(data, reply); };
130      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_POST_DIAL_PROCEED)] =
131          [this](MessageParcel &data, MessageParcel &reply) { return OnPostDialProceed(data, reply); };
132  }
133  
InitCallSupplementRequest()134  void CallManagerServiceStub::InitCallSupplementRequest()
135  {
136      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_CALL_WAITING)] =
137          [this](MessageParcel &data, MessageParcel &reply) { return OnGetCallWaiting(data, reply); };
138      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_CALL_WAITING)] =
139          [this](MessageParcel &data, MessageParcel &reply) { return OnSetCallWaiting(data, reply); };
140      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_CALL_RESTRICTION)] =
141          [this](MessageParcel &data, MessageParcel &reply) { return OnGetCallRestriction(data, reply); };
142      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_CALL_RESTRICTION)] =
143          [this](MessageParcel &data, MessageParcel &reply) { return OnSetCallRestriction(data, reply); };
144      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_CALL_RESTRICTION_PASSWORD)] =
145          [this](MessageParcel &data, MessageParcel &reply) { return OnSetCallRestrictionPassword(data, reply); };
146      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_CALL_TRANSFER)] =
147          [this](MessageParcel &data, MessageParcel &reply) { return OnGetTransferNumber(data, reply); };
148      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_CALL_TRANSFER)] =
149          [this](MessageParcel &data, MessageParcel &reply) { return OnSetTransferNumber(data, reply); };
150      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_CAN_SET_CALL_TRANSFER_TIME)] =
151          [this](MessageParcel &data, MessageParcel &reply) { return OnCanSetCallTransferTime(data, reply); };
152      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_CLOSE_UNFINISHED_USSD)] =
153          [this](MessageParcel &data, MessageParcel &reply) { return OnCloseUnFinishedUssd(data, reply); };
154  }
155  
initCallConferenceExRequest()156  void CallManagerServiceStub::initCallConferenceExRequest()
157  {
158      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_MAINID)] =
159          [this](MessageParcel &data, MessageParcel &reply) { return OnGetMainCallId(data, reply); };
160      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_SUBCALL_LIST_ID)] =
161          [this](MessageParcel &data, MessageParcel &reply) { return OnGetSubCallIdList(data, reply); };
162      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_CALL_LIST_ID_FOR_CONFERENCE)] =
163          [this](MessageParcel &data, MessageParcel &reply) { return OnGetCallIdListForConference(data, reply); };
164  }
165  
InitCallMultimediaRequest()166  void CallManagerServiceStub::InitCallMultimediaRequest()
167  {
168      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_MUTE)] =
169          [this](MessageParcel &data, MessageParcel &reply) { return OnSetMute(data, reply); };
170      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_MUTE_RINGER)] =
171          [this](MessageParcel &data, MessageParcel &reply) { return OnMuteRinger(data, reply); };
172      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_AUDIO_DEVICE)] =
173          [this](MessageParcel &data, MessageParcel &reply) { return OnSetAudioDevice(data, reply); };
174      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_CTRL_CAMERA)] =
175          [this](MessageParcel &data, MessageParcel &reply) { return OnControlCamera(data, reply); };
176      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_PREVIEW_WINDOW)] =
177          [this](MessageParcel &data, MessageParcel &reply) { return OnSetPreviewWindow(data, reply); };
178      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_DISPLAY_WINDOW)] =
179          [this](MessageParcel &data, MessageParcel &reply) { return OnSetDisplayWindow(data, reply); };
180      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_CAMERA_ZOOM)] =
181          [this](MessageParcel &data, MessageParcel &reply) { return OnSetCameraZoom(data, reply); };
182      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_PAUSE_IMAGE)] =
183          [this](MessageParcel &data, MessageParcel &reply) { return OnSetPausePicture(data, reply); };
184      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_DEVICE_DIRECTION)] =
185          [this](MessageParcel &data, MessageParcel &reply) { return OnSetDeviceDirection(data, reply); };
186      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_UPDATE_CALL_MEDIA_MODE)] =
187          [this](MessageParcel &data, MessageParcel &reply) { return OnUpdateCallMediaMode(data, reply); };
188      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_REPORT_AUDIO_DEVICE_INFO)] =
189          [this](MessageParcel &data, MessageParcel &reply) { return OnReportAudioDeviceInfo(data, reply); };
190      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_CANCEL_CALL_UPGRADE)] =
191          [this](MessageParcel &data, MessageParcel &reply) { return OnCancelCallUpgrade(data, reply); };
192      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_REQUEST_CAMERA_CAPABILITIES)] =
193          [this](MessageParcel &data, MessageParcel &reply) { return OnRequestCameraCapabilities(data, reply); };
194  }
195  
InitImsServiceRequest()196  void CallManagerServiceStub::InitImsServiceRequest()
197  {
198      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SETCALL_PREFERENCEMODE)] =
199          [this](MessageParcel &data, MessageParcel &reply) { return OnSetCallPreferenceMode(data, reply); };
200      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_IMS_CONFIG)] =
201          [this](MessageParcel &data, MessageParcel &reply) { return OnGetImsConfig(data, reply); };
202      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_IMS_CONFIG)] =
203          [this](MessageParcel &data, MessageParcel &reply) { return OnSetImsConfig(data, reply); };
204      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_IMS_FEATURE_VALUE)] =
205          [this](MessageParcel &data, MessageParcel &reply) { return OnGetImsFeatureValue(data, reply); };
206      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_IMS_FEATURE_VALUE)] =
207          [this](MessageParcel &data, MessageParcel &reply) { return OnSetImsFeatureValue(data, reply); };
208      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_ENABLE_VOLTE)] =
209          [this](MessageParcel &data, MessageParcel &reply) { return OnEnableVoLte(data, reply); };
210      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_DISABLE_VOLTE)] =
211          [this](MessageParcel &data, MessageParcel &reply) { return OnDisableVoLte(data, reply); };
212      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_IS_VOLTE_ENABLED)] =
213          [this](MessageParcel &data, MessageParcel &reply) { return OnIsVoLteEnabled(data, reply); };
214      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_VONR_STATE)] =
215          [this](MessageParcel &data, MessageParcel &reply) { return OnSetVoNRState(data, reply); };
216      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_VONR_STATE)] =
217          [this](MessageParcel &data, MessageParcel &reply) { return OnGetVoNRState(data, reply); };
218      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_START_RTT)] =
219          [this](MessageParcel &data, MessageParcel &reply) { return OnStartRtt(data, reply); };
220      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_STOP_RTT)] =
221          [this](MessageParcel &data, MessageParcel &reply) { return OnStopRtt(data, reply); };
222      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_SET_VOIP_CALL_STATE)] =
223          [this](MessageParcel &data, MessageParcel &reply) { return OnSetVoIPCallState(data, reply); };
224      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_GET_VOIP_CALL_STATE)] =
225          [this](MessageParcel &data, MessageParcel &reply) { return OnGetVoIPCallState(data, reply); };
226  }
227  
InitOttServiceRequest()228  void CallManagerServiceStub::InitOttServiceRequest()
229  {
230      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_REPORT_OTT_CALL_DETAIL_INFO)] =
231          [this](MessageParcel &data, MessageParcel &reply) { return OnReportOttCallDetailsInfo(data, reply); };
232      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_REPORT_OTT_CALL_EVENT_INFO)] =
233          [this](MessageParcel &data, MessageParcel &reply) { return OnReportOttCallEventInfo(data, reply); };
234  }
235  
InitVoipOperationRequest()236  void CallManagerServiceStub::InitVoipOperationRequest()
237  {
238      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_VOIP_REGISTER_CALLBACK)] =
239          [this](MessageParcel &data, MessageParcel &reply) { return OnRegisterVoipCallManagerCallback(data, reply); };
240      memberFuncMap_[static_cast<int32_t>(CallManagerInterfaceCode::INTERFACE_VOIP_UNREGISTER_CALLBACK)] =
241          [this](MessageParcel &data, MessageParcel &reply) { return OnUnRegisterVoipCallManagerCallback(data, reply); };
242  }
243  
OnRegisterVoipCallManagerCallback(MessageParcel & data,MessageParcel & reply)244  int32_t CallManagerServiceStub::OnRegisterVoipCallManagerCallback(MessageParcel &data, MessageParcel &reply)
245  {
246      int32_t result = RegisterVoipCallManagerCallback();
247      TELEPHONY_LOGI("OnRegisterVoipCallManagerCallback result:%{public}d", result);
248      if (!reply.WriteInt32(result)) {
249          TELEPHONY_LOGE("OnRegisterVoipCallManagerCallback write reply failed.");
250          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
251      }
252  
253      return TELEPHONY_SUCCESS;
254  }
255  
OnUnRegisterVoipCallManagerCallback(MessageParcel & data,MessageParcel & reply)256  int32_t CallManagerServiceStub::OnUnRegisterVoipCallManagerCallback(MessageParcel &data, MessageParcel &reply)
257  {
258      int32_t result = TELEPHONY_ERR_FAIL;
259      result = UnRegisterVoipCallManagerCallback();
260      if (!reply.WriteInt32(result)) {
261          TELEPHONY_LOGE("fail to write parcel");
262          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
263      }
264      return result;
265  }
266  
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)267  int32_t CallManagerServiceStub::OnRemoteRequest(
268      uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
269  {
270      std::u16string myDescriptor = CallManagerServiceStub::GetDescriptor();
271      std::u16string remoteDescriptor = data.ReadInterfaceToken();
272      if (myDescriptor != remoteDescriptor) {
273          TELEPHONY_LOGE("descriptor checked fail !");
274          return TELEPHONY_ERR_DESCRIPTOR_MISMATCH;
275      }
276      TELEPHONY_LOGD("OnReceived, cmd = %{public}u", code);
277      auto itFunc = memberFuncMap_.find(code);
278      if (itFunc != memberFuncMap_.end()) {
279          auto memberFunc = itFunc->second;
280          if (memberFunc != nullptr) {
281              int32_t idTimer = SetTimer(code);
282              int32_t result = memberFunc(data, reply);
283              CancelTimer(idTimer);
284              return result;
285          }
286      }
287      return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
288  }
289  
OnRegisterCallBack(MessageParcel & data,MessageParcel & reply)290  int32_t CallManagerServiceStub::OnRegisterCallBack(MessageParcel &data, MessageParcel &reply)
291  {
292      int32_t result = TELEPHONY_ERR_FAIL;
293      sptr<IRemoteObject> remote = data.ReadRemoteObject();
294      if (remote == nullptr) {
295          TELEPHONY_LOGE("callback ptr is nullptr.");
296          reply.WriteInt32(result);
297          return result;
298      }
299      sptr<ICallAbilityCallback> callback = iface_cast<ICallAbilityCallback>(remote);
300      result = RegisterCallBack(callback);
301      reply.WriteInt32(result);
302      return result;
303  }
304  
OnUnRegisterCallBack(MessageParcel & data,MessageParcel & reply)305  int32_t CallManagerServiceStub::OnUnRegisterCallBack(MessageParcel &data, MessageParcel &reply)
306  {
307      int32_t result = TELEPHONY_ERR_FAIL;
308      result = UnRegisterCallBack();
309      if (!reply.WriteInt32(result)) {
310          TELEPHONY_LOGE("fail to write parcel");
311          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
312      }
313      return result;
314  }
315  
OnObserverOnCallDetailsChange(MessageParcel & data,MessageParcel & reply)316  int32_t CallManagerServiceStub::OnObserverOnCallDetailsChange(MessageParcel &data, MessageParcel &reply)
317  {
318      int32_t result = TELEPHONY_ERR_FAIL;
319      result = ObserverOnCallDetailsChange();
320      if (!reply.WriteInt32(result)) {
321          TELEPHONY_LOGE("fail to write parcel");
322          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
323      }
324      return result;
325  }
326  
OnDialCall(MessageParcel & data,MessageParcel & reply)327  int32_t CallManagerServiceStub::OnDialCall(MessageParcel &data, MessageParcel &reply)
328  {
329      int32_t result = TELEPHONY_ERR_FAIL;
330      AppExecFwk::PacMap dialInfo;
331      std::u16string callNumber = data.ReadString16();
332      dialInfo.PutIntValue("accountId", data.ReadInt32());
333      dialInfo.PutIntValue("videoState", data.ReadInt32());
334      dialInfo.PutIntValue("dialScene", data.ReadInt32());
335      dialInfo.PutIntValue("dialType", data.ReadInt32());
336      dialInfo.PutIntValue("callType", data.ReadInt32());
337      dialInfo.PutStringValue("bundleName", data.ReadString());
338      if (callNumber.length() > ACCOUNT_NUMBER_MAX_LENGTH) {
339          TELEPHONY_LOGE("the account number length exceeds the limit");
340          return CALL_ERR_NUMBER_OUT_OF_RANGE;
341      }
342      result = DialCall(callNumber, dialInfo);
343      TELEPHONY_LOGI("result:%{public}d", result);
344      if (!reply.WriteInt32(result)) {
345          TELEPHONY_LOGE("fail to write parcel");
346          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
347      }
348      return result;
349  }
350  
OnMakeCall(MessageParcel & data,MessageParcel & reply)351  int32_t CallManagerServiceStub::OnMakeCall(MessageParcel &data, MessageParcel &reply)
352  {
353      int32_t result = TELEPHONY_ERR_FAIL;
354      AppExecFwk::PacMap dialInfo;
355      std::string callNumber = data.ReadString();
356      if (callNumber.length() > ACCOUNT_NUMBER_MAX_LENGTH) {
357          TELEPHONY_LOGE("the account number length exceeds the limit");
358          return CALL_ERR_NUMBER_OUT_OF_RANGE;
359      }
360      result = MakeCall(callNumber);
361      TELEPHONY_LOGI("result:%{public}d", result);
362      if (!reply.WriteInt32(result)) {
363          TELEPHONY_LOGE("fail to write parcel");
364          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
365      }
366      return result;
367  }
368  
OnAcceptCall(MessageParcel & data,MessageParcel & reply)369  int32_t CallManagerServiceStub::OnAcceptCall(MessageParcel &data, MessageParcel &reply)
370  {
371      int32_t callId = data.ReadInt32();
372      int32_t videoState = data.ReadInt32();
373      int32_t result = AnswerCall(callId, videoState);
374      TELEPHONY_LOGI("result:%{public}d", result);
375      if (!reply.WriteInt32(result)) {
376          TELEPHONY_LOGE("fail to write parcel");
377          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
378      }
379      return result;
380  }
381  
OnRejectCall(MessageParcel & data,MessageParcel & reply)382  int32_t CallManagerServiceStub::OnRejectCall(MessageParcel &data, MessageParcel &reply)
383  {
384      int32_t callId = data.ReadInt32();
385      bool isSendSms = data.ReadBool();
386      std::u16string content = data.ReadString16();
387      int32_t result = RejectCall(callId, isSendSms, content);
388      TELEPHONY_LOGI("result:%{public}d", result);
389      if (!reply.WriteInt32(result)) {
390          TELEPHONY_LOGE("fail to write parcel");
391          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
392      }
393      return result;
394  }
395  
OnHangUpCall(MessageParcel & data,MessageParcel & reply)396  int32_t CallManagerServiceStub::OnHangUpCall(MessageParcel &data, MessageParcel &reply)
397  {
398      int32_t callId = data.ReadInt32();
399      int32_t result = HangUpCall(callId);
400      TELEPHONY_LOGI("result:%{public}d", result);
401      if (!reply.WriteInt32(result)) {
402          TELEPHONY_LOGE("fail to write parcel");
403          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
404      }
405      return result;
406  }
407  
OnGetCallState(MessageParcel & data,MessageParcel & reply)408  int32_t CallManagerServiceStub::OnGetCallState(MessageParcel &data, MessageParcel &reply)
409  {
410      int32_t result = GetCallState();
411      TELEPHONY_LOGD("result:%{public}d", result);
412      if (!reply.WriteInt32(result)) {
413          TELEPHONY_LOGE("fail to write parcel");
414          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
415      }
416      return TELEPHONY_SUCCESS;
417  }
418  
OnHoldCall(MessageParcel & data,MessageParcel & reply)419  int32_t CallManagerServiceStub::OnHoldCall(MessageParcel &data, MessageParcel &reply)
420  {
421      int32_t callId = data.ReadInt32();
422      int32_t result = HoldCall(callId);
423      TELEPHONY_LOGI("result:%{public}d", result);
424      if (!reply.WriteInt32(result)) {
425          TELEPHONY_LOGE("fail to write parcel");
426          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
427      }
428      return result;
429  }
430  
OnUnHoldCall(MessageParcel & data,MessageParcel & reply)431  int32_t CallManagerServiceStub::OnUnHoldCall(MessageParcel &data, MessageParcel &reply)
432  {
433      int32_t callId = data.ReadInt32();
434      int32_t result = UnHoldCall(callId);
435      TELEPHONY_LOGI("result:%{public}d", result);
436      if (!reply.WriteInt32(result)) {
437          TELEPHONY_LOGE("fail to write parcel");
438          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
439      }
440      return result;
441  }
442  
OnSwitchCall(MessageParcel & data,MessageParcel & reply)443  int32_t CallManagerServiceStub::OnSwitchCall(MessageParcel &data, MessageParcel &reply)
444  {
445      int32_t callId = data.ReadInt32();
446      int32_t result = SwitchCall(callId);
447      TELEPHONY_LOGI("result:%{public}d", result);
448      if (!reply.WriteInt32(result)) {
449          TELEPHONY_LOGE("fail to write parcel");
450          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
451      }
452      return result;
453  }
454  
OnHasCall(MessageParcel & data,MessageParcel & reply)455  int32_t CallManagerServiceStub::OnHasCall(MessageParcel &data, MessageParcel &reply)
456  {
457      bool result = HasCall();
458      TELEPHONY_LOGD("result:%{public}d", result);
459      if (!reply.WriteBool(result)) {
460          TELEPHONY_LOGE("fail to write parcel");
461          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
462      }
463      return TELEPHONY_SUCCESS;
464  }
465  
OnIsNewCallAllowed(MessageParcel & data,MessageParcel & reply)466  int32_t CallManagerServiceStub::OnIsNewCallAllowed(MessageParcel &data, MessageParcel &reply)
467  {
468      bool enabled = false;
469      int32_t result = IsNewCallAllowed(enabled);
470      TELEPHONY_LOGI("OnIsNewCallAllowed result:%{public}d enabled:%{public}d", result, enabled);
471      if (!reply.WriteInt32(result)) {
472          TELEPHONY_LOGE("OnIsNewCallAllowed write reply failed.");
473          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
474      }
475      if (result != TELEPHONY_ERR_SUCCESS) {
476          return result;
477      }
478      if (!reply.WriteBool(enabled)) {
479          TELEPHONY_LOGE("OnIsNewCallAllowed fail to write parcel");
480          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
481      }
482      return result;
483  }
484  
OnSetMute(MessageParcel & data,MessageParcel & reply)485  int32_t CallManagerServiceStub::OnSetMute(MessageParcel &data, MessageParcel &reply)
486  {
487      bool isMute = data.ReadBool();
488      int32_t result = SetMuted(isMute);
489      TELEPHONY_LOGI("result:%{public}d", result);
490      if (!reply.WriteInt32(result)) {
491          TELEPHONY_LOGE("fail to write parcel");
492          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
493      }
494      return TELEPHONY_SUCCESS;
495  }
496  
OnMuteRinger(MessageParcel & data,MessageParcel & reply)497  int32_t CallManagerServiceStub::OnMuteRinger(MessageParcel &data, MessageParcel &reply)
498  {
499      int32_t result = MuteRinger();
500      TELEPHONY_LOGI("result:%{public}d", result);
501      if (!reply.WriteInt32(result)) {
502          TELEPHONY_LOGE("fail to write parcel");
503          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
504      }
505      return TELEPHONY_SUCCESS;
506  }
507  
OnSetAudioDevice(MessageParcel & data,MessageParcel & reply)508  int32_t CallManagerServiceStub::OnSetAudioDevice(MessageParcel &data, MessageParcel &reply)
509  {
510      AudioDevice *audioDevice = static_cast<AudioDevice *>(const_cast<void *>(data.ReadRawData(sizeof(AudioDevice))));
511      if (audioDevice == nullptr) {
512          TELEPHONY_LOGE("audioDevice is nullptr");
513          return TELEPHONY_ERR_LOCAL_PTR_NULL;
514      }
515      int32_t result = SetAudioDevice(*audioDevice);
516      TELEPHONY_LOGI("result:%{public}d", result);
517      if (!reply.WriteInt32(result)) {
518          TELEPHONY_LOGE("fail to write parcel");
519          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
520      }
521      return TELEPHONY_SUCCESS;
522  }
523  
OnIsRinging(MessageParcel & data,MessageParcel & reply)524  int32_t CallManagerServiceStub::OnIsRinging(MessageParcel &data, MessageParcel &reply)
525  {
526      bool enabled = false;
527      int32_t result = IsRinging(enabled);
528      TELEPHONY_LOGI("result:%{public}d enabled:%{public}d", result, enabled);
529      if (!reply.WriteInt32(result)) {
530          TELEPHONY_LOGE("OnIsRinging write reply failed.");
531          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
532      }
533      if (result != TELEPHONY_ERR_SUCCESS) {
534          return result;
535      }
536      if (!reply.WriteBool(enabled)) {
537          TELEPHONY_LOGE("OnIsRinging fail to write parcel");
538          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
539      }
540      return result;
541  }
542  
OnIsInEmergencyCall(MessageParcel & data,MessageParcel & reply)543  int32_t CallManagerServiceStub::OnIsInEmergencyCall(MessageParcel &data, MessageParcel &reply)
544  {
545      bool enabled = false;
546      int32_t result = IsInEmergencyCall(enabled);
547      TELEPHONY_LOGI("result:%{public}d enabled:%{public}d", result, enabled);
548      if (!reply.WriteInt32(result)) {
549          TELEPHONY_LOGE("OnIsInEmergencyCall write reply failed.");
550          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
551      }
552      if (result != TELEPHONY_ERR_SUCCESS) {
553          return result;
554      }
555      if (!reply.WriteBool(enabled)) {
556          TELEPHONY_LOGE("OnIsInEmergencyCall fail to write parcel");
557          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
558      }
559      return result;
560  }
561  
OnStartDtmf(MessageParcel & data,MessageParcel & reply)562  int32_t CallManagerServiceStub::OnStartDtmf(MessageParcel &data, MessageParcel &reply)
563  {
564      int32_t result = TELEPHONY_ERR_FAIL;
565      int32_t callId = data.ReadInt32();
566      char str = static_cast<char>(data.ReadInt8());
567      result = StartDtmf(callId, str);
568      TELEPHONY_LOGI("result:%{public}d", result);
569      if (!reply.WriteInt32(result)) {
570          TELEPHONY_LOGE("fail to write parcel");
571          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
572      }
573      return TELEPHONY_SUCCESS;
574  }
575  
OnStopDtmf(MessageParcel & data,MessageParcel & reply)576  int32_t CallManagerServiceStub::OnStopDtmf(MessageParcel &data, MessageParcel &reply)
577  {
578      int32_t result = TELEPHONY_ERR_FAIL;
579      int32_t callId = data.ReadInt32();
580      result = StopDtmf(callId);
581      TELEPHONY_LOGI("result:%{public}d", result);
582      if (!reply.WriteInt32(result)) {
583          TELEPHONY_LOGE("fail to write parcel");
584          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
585      }
586      return TELEPHONY_SUCCESS;
587  }
588  
OnPostDialProceed(MessageParcel & data,MessageParcel & reply)589  int32_t CallManagerServiceStub::OnPostDialProceed(MessageParcel &data, MessageParcel &reply)
590  {
591      int32_t result = TELEPHONY_ERR_FAIL;
592      int32_t callId = data.ReadInt32();
593      bool proceed = data.ReadBool();
594  
595      result = PostDialProceed(callId, proceed);
596      TELEPHONY_LOGI("result:%{public}d", result);
597      if (!reply.WriteInt32(result)) {
598          TELEPHONY_LOGE("fail to write parcel");
599          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
600      }
601      return TELEPHONY_SUCCESS;
602  }
603  
OnGetCallWaiting(MessageParcel & data,MessageParcel & reply)604  int32_t CallManagerServiceStub::OnGetCallWaiting(MessageParcel &data, MessageParcel &reply)
605  {
606      int32_t result = TELEPHONY_ERR_FAIL;
607      int32_t slotId = data.ReadInt32();
608      result = GetCallWaiting(slotId);
609      TELEPHONY_LOGI("result:%{public}d", result);
610      if (!reply.WriteInt32(result)) {
611          TELEPHONY_LOGE("fail to write parcel");
612          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
613      }
614      return TELEPHONY_SUCCESS;
615  }
616  
OnSetCallWaiting(MessageParcel & data,MessageParcel & reply)617  int32_t CallManagerServiceStub::OnSetCallWaiting(MessageParcel &data, MessageParcel &reply)
618  {
619      int32_t result = TELEPHONY_ERR_FAIL;
620      int32_t slotId = data.ReadInt32();
621      bool activate = data.ReadBool();
622      result = SetCallWaiting(slotId, activate);
623      TELEPHONY_LOGI("result:%{public}d", result);
624      if (!reply.WriteInt32(result)) {
625          TELEPHONY_LOGE("fail to write parcel");
626          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
627      }
628      return TELEPHONY_SUCCESS;
629  }
630  
OnGetCallRestriction(MessageParcel & data,MessageParcel & reply)631  int32_t CallManagerServiceStub::OnGetCallRestriction(MessageParcel &data, MessageParcel &reply)
632  {
633      int32_t result = TELEPHONY_ERR_FAIL;
634      int32_t slotId = data.ReadInt32();
635      CallRestrictionType type = static_cast<CallRestrictionType>(data.ReadInt32());
636      result = GetCallRestriction(slotId, type);
637      TELEPHONY_LOGI("result:%{public}d", result);
638      if (!reply.WriteInt32(result)) {
639          TELEPHONY_LOGE("fail to write parcel");
640          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
641      }
642      return TELEPHONY_SUCCESS;
643  }
644  
OnSetCallRestriction(MessageParcel & data,MessageParcel & reply)645  int32_t CallManagerServiceStub::OnSetCallRestriction(MessageParcel &data, MessageParcel &reply)
646  {
647      int32_t result = TELEPHONY_ERR_FAIL;
648      if (!data.ContainFileDescriptors()) {
649          TELEPHONY_LOGW("sent raw data is less than 32k");
650      }
651      int32_t slotId = data.ReadInt32();
652      CallRestrictionInfo *pCRInfo = (CallRestrictionInfo *)data.ReadRawData(sizeof(CallRestrictionInfo));
653      if (pCRInfo == nullptr) {
654          TELEPHONY_LOGE("data error");
655          return TELEPHONY_ERR_LOCAL_PTR_NULL;
656      }
657      result = SetCallRestriction(slotId, *pCRInfo);
658      TELEPHONY_LOGI("result:%{public}d", result);
659      if (!reply.WriteInt32(result)) {
660          TELEPHONY_LOGE("fail to write parcel");
661          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
662      }
663      return TELEPHONY_SUCCESS;
664  }
665  
OnSetCallRestrictionPassword(MessageParcel & data,MessageParcel & reply)666  int32_t CallManagerServiceStub::OnSetCallRestrictionPassword(MessageParcel &data, MessageParcel &reply)
667  {
668      int32_t result = TELEPHONY_ERR_FAIL;
669      if (!data.ContainFileDescriptors()) {
670          TELEPHONY_LOGW("sent raw data is less than 32k");
671      }
672      int32_t slotId = data.ReadInt32();
673      CallRestrictionType fac = static_cast<CallRestrictionType>(data.ReadInt32());
674      auto oldPassword = data.ReadCString();
675      auto newPassword = data.ReadCString();
676      result = SetCallRestrictionPassword(slotId, fac, oldPassword, newPassword);
677      TELEPHONY_LOGI("result:%{public}d", result);
678      if (!reply.WriteInt32(result)) {
679          TELEPHONY_LOGE("fail to write parcel");
680          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
681      }
682      return TELEPHONY_SUCCESS;
683  }
684  
OnGetTransferNumber(MessageParcel & data,MessageParcel & reply)685  int32_t CallManagerServiceStub::OnGetTransferNumber(MessageParcel &data, MessageParcel &reply)
686  {
687      int32_t result = TELEPHONY_ERR_FAIL;
688      int32_t slotId = data.ReadInt32();
689      CallTransferType type = static_cast<CallTransferType>(data.ReadInt32());
690      result = GetCallTransferInfo(slotId, type);
691      TELEPHONY_LOGI("result:%{public}d", result);
692      if (!reply.WriteInt32(result)) {
693          TELEPHONY_LOGE("fail to write parcel");
694          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
695      }
696      return TELEPHONY_SUCCESS;
697  }
698  
OnSetTransferNumber(MessageParcel & data,MessageParcel & reply)699  int32_t CallManagerServiceStub::OnSetTransferNumber(MessageParcel &data, MessageParcel &reply)
700  {
701      int32_t result = TELEPHONY_ERR_FAIL;
702      if (!data.ContainFileDescriptors()) {
703          TELEPHONY_LOGW("sent raw data is less than 32k");
704      }
705      int32_t slotId = data.ReadInt32();
706      CallTransferInfo *pCTInfo = (CallTransferInfo *)data.ReadRawData(sizeof(CallTransferInfo));
707      if (pCTInfo == nullptr) {
708          TELEPHONY_LOGE("data error");
709          return TELEPHONY_ERR_LOCAL_PTR_NULL;
710      }
711      result = SetCallTransferInfo(slotId, *pCTInfo);
712      TELEPHONY_LOGI("result:%{public}d", result);
713      if (!reply.WriteInt32(result)) {
714          TELEPHONY_LOGE("fail to write parcel");
715          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
716      }
717      return TELEPHONY_SUCCESS;
718  }
719  
OnCanSetCallTransferTime(MessageParcel & data,MessageParcel & reply)720  int32_t CallManagerServiceStub::OnCanSetCallTransferTime(MessageParcel &data, MessageParcel &reply)
721  {
722      int32_t ret = TELEPHONY_ERR_FAIL;
723      if (!data.ContainFileDescriptors()) {
724          TELEPHONY_LOGW("sent raw data is less than 32k");
725      }
726      int32_t slotId = data.ReadInt32();
727      bool result = data.ReadBool();
728      ret = CanSetCallTransferTime(slotId, result);
729      if (!reply.WriteBool(result)) {
730          TELEPHONY_LOGE("[slot%{public}d] fail to write parcel with bool", slotId);
731          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
732      }
733      if (!reply.WriteInt32(ret)) {
734          TELEPHONY_LOGE("[slot%{public}d] fail to write parcel", slotId);
735          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
736      }
737      return TELEPHONY_SUCCESS;
738  }
739  
OnCombineConference(MessageParcel & data,MessageParcel & reply)740  int32_t CallManagerServiceStub::OnCombineConference(MessageParcel &data, MessageParcel &reply)
741  {
742      int32_t mainCallId = data.ReadInt32();
743      int32_t result = CombineConference(mainCallId);
744      TELEPHONY_LOGI("result:%{public}d", result);
745      if (!reply.WriteInt32(result)) {
746          TELEPHONY_LOGE("fail to write parcel");
747          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
748      }
749      return TELEPHONY_SUCCESS;
750  }
751  
OnSeparateConference(MessageParcel & data,MessageParcel & reply)752  int32_t CallManagerServiceStub::OnSeparateConference(MessageParcel &data, MessageParcel &reply)
753  {
754      int32_t callId = data.ReadInt32();
755      int32_t result = SeparateConference(callId);
756      TELEPHONY_LOGI("result:%{public}d", result);
757      if (!reply.WriteInt32(result)) {
758          TELEPHONY_LOGE("fail to write parcel");
759          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
760      }
761      return TELEPHONY_SUCCESS;
762  }
763  
OnJoinConference(MessageParcel & data,MessageParcel & reply)764  int32_t CallManagerServiceStub::OnJoinConference(MessageParcel &data, MessageParcel &reply)
765  {
766      int32_t result = TELEPHONY_ERR_FAIL;
767      int32_t callId = data.ReadInt32();
768      std::vector<std::u16string> numberList;
769      if (!data.ReadString16Vector(&numberList)) {
770          TELEPHONY_LOGE("read conference participants numberList failed");
771          return TELEPHONY_ERR_WRITE_DATA_FAIL;
772      }
773      result = JoinConference(callId, numberList);
774      if (!reply.WriteInt32(result)) {
775          TELEPHONY_LOGE("JoinConference fail to write parcel");
776          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
777      }
778      return TELEPHONY_SUCCESS;
779  }
780  
OnKickOutFromConference(MessageParcel & data,MessageParcel & reply)781  int32_t CallManagerServiceStub::OnKickOutFromConference(MessageParcel &data, MessageParcel &reply)
782  {
783      int32_t callId = data.ReadInt32();
784      int32_t result = KickOutFromConference(callId);
785      TELEPHONY_LOGI("result:%{public}d", result);
786      if (!reply.WriteInt32(result)) {
787          TELEPHONY_LOGE("fail to write parcel");
788          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
789      }
790      return TELEPHONY_SUCCESS;
791  }
792  
OnSetCallPreferenceMode(MessageParcel & data,MessageParcel & reply)793  int32_t CallManagerServiceStub::OnSetCallPreferenceMode(MessageParcel &data, MessageParcel &reply)
794  {
795      int32_t result = TELEPHONY_ERR_FAIL;
796      int32_t slotId = data.ReadInt32();
797      int32_t mode = data.ReadInt32();
798      result = SetCallPreferenceMode(slotId, mode);
799      if (!reply.WriteInt32(result)) {
800          TELEPHONY_LOGE("SetCallPreferenceMode fail to write parcel");
801          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
802      }
803      return TELEPHONY_SUCCESS;
804  }
805  
OnControlCamera(MessageParcel & data,MessageParcel & reply)806  int32_t CallManagerServiceStub::OnControlCamera(MessageParcel &data, MessageParcel &reply)
807  {
808      int32_t result = TELEPHONY_ERR_FAIL;
809      int32_t callId = data.ReadInt32();
810      std::u16string cameraId = data.ReadString16();
811      result = ControlCamera(callId, cameraId);
812      TELEPHONY_LOGI("result:%{public}d", result);
813      if (!reply.WriteInt32(result)) {
814          TELEPHONY_LOGE("ControlCamera fail to write parcel");
815          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
816      }
817      return TELEPHONY_SUCCESS;
818  }
819  
OnSetPreviewWindow(MessageParcel & data,MessageParcel & reply)820  int32_t CallManagerServiceStub::OnSetPreviewWindow(MessageParcel &data, MessageParcel &reply)
821  {
822      int32_t result = TELEPHONY_ERR_FAIL;
823      int32_t callId = data.ReadInt32();
824      std::string surfaceId = data.ReadString();
825      sptr<Surface> surface = nullptr;
826      sptr<IRemoteObject> object = data.ReadRemoteObject();
827      if (object != nullptr) {
828          sptr<IBufferProducer> producer = iface_cast<IBufferProducer>(object);
829          surface = Surface::CreateSurfaceAsProducer(producer);
830      }
831      TELEPHONY_LOGI("surfaceId:%{public}s", surfaceId.c_str());
832      result = SetPreviewWindow(callId, surfaceId, surface);
833      if (!reply.WriteInt32(result)) {
834          TELEPHONY_LOGE("SetPreviewWindow fail to write parcel");
835          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
836      }
837      return TELEPHONY_SUCCESS;
838  }
839  
OnSetDisplayWindow(MessageParcel & data,MessageParcel & reply)840  int32_t CallManagerServiceStub::OnSetDisplayWindow(MessageParcel &data, MessageParcel &reply)
841  {
842      int32_t result = TELEPHONY_ERR_FAIL;
843      int32_t callId = data.ReadInt32();
844      std::string surfaceId = data.ReadString();
845      sptr<Surface> surface = nullptr;
846      sptr<IRemoteObject> object = data.ReadRemoteObject();
847      if (object != nullptr) {
848          sptr<IBufferProducer> producer = iface_cast<IBufferProducer>(object);
849          surface = Surface::CreateSurfaceAsProducer(producer);
850      }
851      TELEPHONY_LOGI("surfaceId:%{public}s", surfaceId.c_str());
852      result = SetDisplayWindow(callId, surfaceId, surface);
853      if (!reply.WriteInt32(result)) {
854          TELEPHONY_LOGE("SetDisplayWindow fail to write parcel");
855          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
856      }
857      return TELEPHONY_SUCCESS;
858  }
859  
OnSetCameraZoom(MessageParcel & data,MessageParcel & reply)860  int32_t CallManagerServiceStub::OnSetCameraZoom(MessageParcel &data, MessageParcel &reply)
861  {
862      int32_t result = TELEPHONY_ERR_FAIL;
863      float zoom = data.ReadFloat();
864      result = SetCameraZoom(zoom);
865      TELEPHONY_LOGI("result:%{public}d", result);
866      if (!reply.WriteInt32(result)) {
867          TELEPHONY_LOGE("SetCameraZoom fail to write parcel");
868          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
869      }
870      return TELEPHONY_SUCCESS;
871  }
872  
OnSetPausePicture(MessageParcel & data,MessageParcel & reply)873  int32_t CallManagerServiceStub::OnSetPausePicture(MessageParcel &data, MessageParcel &reply)
874  {
875      int32_t result = TELEPHONY_ERR_FAIL;
876      int32_t callId = data.ReadInt32();
877      std::u16string path = data.ReadString16();
878      result = SetPausePicture(callId, path);
879      TELEPHONY_LOGI("result:%{public}d", result);
880      if (!reply.WriteInt32(result)) {
881          TELEPHONY_LOGE("SetPausePicture fail to write parcel");
882          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
883      }
884      return TELEPHONY_SUCCESS;
885  }
886  
OnSetDeviceDirection(MessageParcel & data,MessageParcel & reply)887  int32_t CallManagerServiceStub::OnSetDeviceDirection(MessageParcel &data, MessageParcel &reply)
888  {
889      int32_t result = TELEPHONY_ERR_FAIL;
890      int32_t callId = data.ReadInt32();
891      int32_t rotation = data.ReadInt32();
892      result = SetDeviceDirection(callId, rotation);
893      TELEPHONY_LOGI("result:%{public}d", result);
894      if (!reply.WriteInt32(result)) {
895          TELEPHONY_LOGE("SetDeviceDirection fail to write parcel");
896          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
897      }
898      return TELEPHONY_SUCCESS;
899  }
900  
OnIsEmergencyPhoneNumber(MessageParcel & data,MessageParcel & reply)901  int32_t CallManagerServiceStub::OnIsEmergencyPhoneNumber(MessageParcel &data, MessageParcel &reply)
902  {
903      std::u16string callNumber = data.ReadString16();
904      int32_t slotId = data.ReadInt32();
905      bool enabled = false;
906      int32_t result = IsEmergencyPhoneNumber(callNumber, slotId, enabled);
907      TELEPHONY_LOGI("OnIsEmergencyPhoneNumber result:%{public}d enabled:%{public}d", result, enabled);
908      if (!reply.WriteInt32(result)) {
909          TELEPHONY_LOGE("OnIsEmergencyPhoneNumber write reply failed.");
910          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
911      }
912      if (result != TELEPHONY_ERR_SUCCESS) {
913          return result;
914      }
915      if (!reply.WriteBool(enabled)) {
916          TELEPHONY_LOGE("OnIsEmergencyPhoneNumber fail to write parcel");
917          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
918      }
919      return TELEPHONY_SUCCESS;
920  }
921  
OnFormatPhoneNumber(MessageParcel & data,MessageParcel & reply)922  int32_t CallManagerServiceStub::OnFormatPhoneNumber(MessageParcel &data, MessageParcel &reply)
923  {
924      std::u16string callNumber = data.ReadString16();
925      std::u16string countryCode = data.ReadString16();
926      std::u16string formatNumber;
927      int32_t result = FormatPhoneNumber(callNumber, countryCode, formatNumber);
928      TELEPHONY_LOGD("result:%{public}d", result);
929      if (!reply.WriteInt32(result)) {
930          TELEPHONY_LOGE("OnFormatPhoneNumber write reply failed.");
931          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
932      }
933      if (result != TELEPHONY_ERR_SUCCESS) {
934          return result;
935      }
936      if (!reply.WriteString16(formatNumber)) {
937          TELEPHONY_LOGE("OnFormatPhoneNumber fail to write parcel");
938          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
939      }
940      return TELEPHONY_SUCCESS;
941  }
942  
OnFormatPhoneNumberToE164(MessageParcel & data,MessageParcel & reply)943  int32_t CallManagerServiceStub::OnFormatPhoneNumberToE164(MessageParcel &data, MessageParcel &reply)
944  {
945      std::u16string callNumber = data.ReadString16();
946      std::u16string countryCode = data.ReadString16();
947      std::u16string formatNumber;
948      int32_t result = FormatPhoneNumberToE164(callNumber, countryCode, formatNumber);
949      TELEPHONY_LOGD("result:%{public}d", result);
950      if (!reply.WriteInt32(result)) {
951          TELEPHONY_LOGE("OnFormatPhoneNumberToE164 write reply failed.");
952          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
953      }
954      if (result != TELEPHONY_ERR_SUCCESS) {
955          return result;
956      }
957      if (!reply.WriteString16(formatNumber)) {
958          TELEPHONY_LOGE("OnFormatPhoneNumberToE164 fail to write parcel");
959          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
960      }
961      return TELEPHONY_SUCCESS;
962  }
963  
OnGetMainCallId(MessageParcel & data,MessageParcel & reply)964  int32_t CallManagerServiceStub::OnGetMainCallId(MessageParcel &data, MessageParcel &reply)
965  {
966      int32_t callId = data.ReadInt32();
967      int32_t mainCallId = 0;
968      int32_t result = GetMainCallId(callId, mainCallId);
969      TELEPHONY_LOGI("result:%{public}d mainCallId:%{public}d", result, mainCallId);
970      if (!reply.WriteInt32(result)) {
971          TELEPHONY_LOGE("fail to write parcel");
972          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
973      }
974      if (result != TELEPHONY_ERR_SUCCESS) {
975          return result;
976      }
977      if (!reply.WriteInt32(mainCallId)) {
978          TELEPHONY_LOGE("OnIsNewCallAllowed fail to write parcel");
979          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
980      }
981      return TELEPHONY_SUCCESS;
982  }
983  
OnGetSubCallIdList(MessageParcel & data,MessageParcel & reply)984  int32_t CallManagerServiceStub::OnGetSubCallIdList(MessageParcel &data, MessageParcel &reply)
985  {
986      int32_t callId = data.ReadInt32();
987      std::vector<std::u16string> callIdList;
988      int32_t result = GetSubCallIdList(callId, callIdList);
989      if (!reply.WriteInt32(result)) {
990          TELEPHONY_LOGE("fail to write parcel");
991          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
992      }
993      if (result != TELEPHONY_ERR_SUCCESS) {
994          return result;
995      }
996      if (!reply.WriteString16Vector(callIdList)) {
997          TELEPHONY_LOGE("OnIsNewCallAllowed fail to write parcel");
998          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
999      }
1000      return result;
1001  }
1002  
OnGetCallIdListForConference(MessageParcel & data,MessageParcel & reply)1003  int32_t CallManagerServiceStub::OnGetCallIdListForConference(MessageParcel &data, MessageParcel &reply)
1004  {
1005      int32_t callId = data.ReadInt32();
1006      std::vector<std::u16string> callIdList;
1007      int32_t result = GetCallIdListForConference(callId, callIdList);
1008      if (!reply.WriteInt32(result)) {
1009          TELEPHONY_LOGE("fail to write parcel");
1010          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1011      }
1012      if (result != TELEPHONY_ERR_SUCCESS) {
1013          return result;
1014      }
1015      if (!reply.WriteString16Vector(callIdList)) {
1016          TELEPHONY_LOGE("OnIsNewCallAllowed fail to write parcel");
1017          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1018      }
1019      return result;
1020  }
1021  
OnGetImsConfig(MessageParcel & data,MessageParcel & reply)1022  int32_t CallManagerServiceStub::OnGetImsConfig(MessageParcel &data, MessageParcel &reply)
1023  {
1024      int32_t result = TELEPHONY_ERR_FAIL;
1025      int32_t slotId = data.ReadInt32();
1026      int32_t item = data.ReadInt32();
1027      result = GetImsConfig(slotId, static_cast<ImsConfigItem>(item));
1028      if (!reply.WriteInt32(result)) {
1029          TELEPHONY_LOGE("GetImsConfig fail to write parcel");
1030          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1031      }
1032      return TELEPHONY_SUCCESS;
1033  }
1034  
OnSetImsConfig(MessageParcel & data,MessageParcel & reply)1035  int32_t CallManagerServiceStub::OnSetImsConfig(MessageParcel &data, MessageParcel &reply)
1036  {
1037      int32_t result = TELEPHONY_ERR_FAIL;
1038      int32_t slotId = data.ReadInt32();
1039      int32_t item = data.ReadInt32();
1040      std::u16string value = data.ReadString16();
1041      result = SetImsConfig(slotId, static_cast<ImsConfigItem>(item), value);
1042      if (!reply.WriteInt32(result)) {
1043          TELEPHONY_LOGE("SetImsConfig fail to write parcel");
1044          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1045      }
1046      return TELEPHONY_SUCCESS;
1047  }
1048  
OnGetImsFeatureValue(MessageParcel & data,MessageParcel & reply)1049  int32_t CallManagerServiceStub::OnGetImsFeatureValue(MessageParcel &data, MessageParcel &reply)
1050  {
1051      int32_t result = TELEPHONY_ERR_FAIL;
1052      int32_t slotId = data.ReadInt32();
1053      FeatureType type = static_cast<FeatureType>(data.ReadInt32());
1054      result = GetImsFeatureValue(slotId, type);
1055      if (!reply.WriteInt32(result)) {
1056          TELEPHONY_LOGE("GetImsFeatureValue fail to write parcel");
1057          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1058      }
1059      return TELEPHONY_SUCCESS;
1060  }
1061  
OnSetImsFeatureValue(MessageParcel & data,MessageParcel & reply)1062  int32_t CallManagerServiceStub::OnSetImsFeatureValue(MessageParcel &data, MessageParcel &reply)
1063  {
1064      int32_t result = TELEPHONY_ERR_FAIL;
1065      int32_t slotId = data.ReadInt32();
1066      FeatureType type = static_cast<FeatureType>(data.ReadInt32());
1067      int32_t value = data.ReadInt32();
1068      result = SetImsFeatureValue(slotId, type, value);
1069      if (!reply.WriteInt32(result)) {
1070          TELEPHONY_LOGE("SetImsFeatureValue fail to write parcel");
1071          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1072      }
1073      return TELEPHONY_SUCCESS;
1074  }
1075  
OnUpdateCallMediaMode(MessageParcel & data,MessageParcel & reply)1076  int32_t CallManagerServiceStub::OnUpdateCallMediaMode(MessageParcel &data, MessageParcel &reply)
1077  {
1078      int32_t result = TELEPHONY_ERR_FAIL;
1079      if (!data.ContainFileDescriptors()) {
1080          TELEPHONY_LOGW("sent raw data is less than 32k");
1081      }
1082      int32_t callId = data.ReadInt32();
1083      ImsCallMode mode = static_cast<ImsCallMode>(data.ReadUint32());
1084      result = UpdateImsCallMode(callId, mode);
1085      if (!reply.WriteInt32(result)) {
1086          TELEPHONY_LOGE("OnUpdateCallMediaMode fail to write parcel");
1087          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1088      }
1089      return TELEPHONY_SUCCESS;
1090  }
1091  
OnEnableVoLte(MessageParcel & data,MessageParcel & reply)1092  int32_t CallManagerServiceStub::OnEnableVoLte(MessageParcel &data, MessageParcel &reply)
1093  {
1094      int32_t result = TELEPHONY_ERR_FAIL;
1095      int32_t slotId = data.ReadInt32();
1096      result = EnableImsSwitch(slotId);
1097      if (!reply.WriteInt32(result)) {
1098          TELEPHONY_LOGE("EnableImsSwitch fail to write parcel");
1099          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1100      }
1101      return TELEPHONY_SUCCESS;
1102  }
1103  
OnDisableVoLte(MessageParcel & data,MessageParcel & reply)1104  int32_t CallManagerServiceStub::OnDisableVoLte(MessageParcel &data, MessageParcel &reply)
1105  {
1106      int32_t result = TELEPHONY_ERR_FAIL;
1107      int32_t slotId = data.ReadInt32();
1108      result = DisableImsSwitch(slotId);
1109      if (!reply.WriteInt32(result)) {
1110          TELEPHONY_LOGE("DisableImsSwitch fail to write parcel");
1111          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1112      }
1113      return TELEPHONY_SUCCESS;
1114  }
1115  
OnIsVoLteEnabled(MessageParcel & data,MessageParcel & reply)1116  int32_t CallManagerServiceStub::OnIsVoLteEnabled(MessageParcel &data, MessageParcel &reply)
1117  {
1118      int32_t result = TELEPHONY_ERR_FAIL;
1119      int32_t slotId = data.ReadInt32();
1120      bool enabled;
1121      result = IsImsSwitchEnabled(slotId, enabled);
1122      if (!reply.WriteBool(enabled)) {
1123          TELEPHONY_LOGE("IsImsSwitchEnabled fail to write parcel");
1124          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1125      }
1126      if (!reply.WriteInt32(result)) {
1127          TELEPHONY_LOGE("IsImsSwitchEnabled fail to write parcel");
1128          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1129      }
1130      return TELEPHONY_SUCCESS;
1131  }
1132  
OnSetVoNRState(MessageParcel & data,MessageParcel & reply)1133  int32_t CallManagerServiceStub::OnSetVoNRState(MessageParcel &data, MessageParcel &reply)
1134  {
1135      int32_t result = TELEPHONY_ERR_FAIL;
1136      int32_t slotId = data.ReadInt32();
1137      int32_t state = data.ReadInt32();
1138      result = SetVoNRState(slotId, state);
1139      if (!reply.WriteInt32(result)) {
1140          TELEPHONY_LOGE("SetVoNRState fail to write parcel");
1141          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1142      }
1143      return TELEPHONY_SUCCESS;
1144  }
1145  
OnGetVoNRState(MessageParcel & data,MessageParcel & reply)1146  int32_t CallManagerServiceStub::OnGetVoNRState(MessageParcel &data, MessageParcel &reply)
1147  {
1148      int32_t result = TELEPHONY_ERR_FAIL;
1149      int32_t slotId = data.ReadInt32();
1150      int32_t state;
1151      result = GetVoNRState(slotId, state);
1152      if (!reply.WriteInt32(state)) {
1153          TELEPHONY_LOGE("GetVoNRState fail to write parcel");
1154          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1155      }
1156      if (!reply.WriteInt32(result)) {
1157          TELEPHONY_LOGE("GetVoNRState fail to write parcel");
1158          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1159      }
1160      return TELEPHONY_SUCCESS;
1161  }
1162  
OnStartRtt(MessageParcel & data,MessageParcel & reply)1163  int32_t CallManagerServiceStub::OnStartRtt(MessageParcel &data, MessageParcel &reply)
1164  {
1165      int32_t result = TELEPHONY_ERR_FAIL;
1166      int32_t callId = data.ReadInt32();
1167      std::u16string msg = data.ReadString16();
1168      result = StartRtt(callId, msg);
1169      if (!reply.WriteInt32(result)) {
1170          TELEPHONY_LOGE("fail to write parcel");
1171          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1172      }
1173      return TELEPHONY_SUCCESS;
1174  }
1175  
OnStopRtt(MessageParcel & data,MessageParcel & reply)1176  int32_t CallManagerServiceStub::OnStopRtt(MessageParcel &data, MessageParcel &reply)
1177  {
1178      int32_t result = TELEPHONY_ERR_FAIL;
1179      int32_t callId = data.ReadInt32();
1180      result = StopRtt(callId);
1181      if (!reply.WriteInt32(result)) {
1182          TELEPHONY_LOGE("fail to write parcel");
1183          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1184      }
1185      return TELEPHONY_SUCCESS;
1186  }
1187  
OnReportOttCallDetailsInfo(MessageParcel & data,MessageParcel & reply)1188  int32_t CallManagerServiceStub::OnReportOttCallDetailsInfo(MessageParcel &data, MessageParcel &reply)
1189  {
1190      int32_t result = TELEPHONY_ERR_FAIL;
1191      if (!data.ContainFileDescriptors()) {
1192          TELEPHONY_LOGW("sent raw data is less than 32k");
1193      }
1194      int32_t vecCnt = data.ReadInt32();
1195      if (vecCnt <= 0 || vecCnt > MAX_CALLS_NUM) {
1196          TELEPHONY_LOGE("vector is empty");
1197          return TELEPHONY_ERR_ARGUMENT_INVALID;
1198      }
1199      std::vector<OttCallDetailsInfo> ottVec;
1200      OttCallDetailsInfo *infoPtr = nullptr;
1201      for (int32_t i = 0; i < vecCnt; i++) {
1202          if ((infoPtr = (OttCallDetailsInfo *)data.ReadRawData(sizeof(OttCallDetailsInfo))) == nullptr) {
1203              TELEPHONY_LOGE("reading raw data failed");
1204              return TELEPHONY_ERR_LOCAL_PTR_NULL;
1205          }
1206          ottVec.push_back(*infoPtr);
1207      }
1208      result = ReportOttCallDetailsInfo(ottVec);
1209      if (!reply.WriteInt32(result)) {
1210          TELEPHONY_LOGE("ReportOttCallDetailsInfo fail to write parcel");
1211          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1212      }
1213      return TELEPHONY_SUCCESS;
1214  }
1215  
OnReportOttCallEventInfo(MessageParcel & data,MessageParcel & reply)1216  int32_t CallManagerServiceStub::OnReportOttCallEventInfo(MessageParcel &data, MessageParcel &reply)
1217  {
1218      int32_t result = TELEPHONY_ERR_FAIL;
1219      if (!data.ContainFileDescriptors()) {
1220          TELEPHONY_LOGW("sent raw data is less than 32k");
1221      }
1222      OttCallEventInfo *pEventInfo = (OttCallEventInfo *)data.ReadRawData(sizeof(OttCallEventInfo));
1223      if (pEventInfo == nullptr) {
1224          TELEPHONY_LOGE("data error");
1225          return result;
1226      }
1227      result = ReportOttCallEventInfo(*pEventInfo);
1228      if (!reply.WriteInt32(result)) {
1229          TELEPHONY_LOGE("ReportOttCallDetailsInfo fail to write parcel");
1230          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1231      }
1232      return TELEPHONY_SUCCESS;
1233  }
1234  
OnCloseUnFinishedUssd(MessageParcel & data,MessageParcel & reply)1235  int32_t CallManagerServiceStub::OnCloseUnFinishedUssd(MessageParcel &data, MessageParcel &reply)
1236  {
1237      int32_t result = TELEPHONY_ERR_FAIL;
1238      int32_t slotId = data.ReadInt32();
1239      result = CloseUnFinishedUssd(slotId);
1240      TELEPHONY_LOGI("result:%{public}d", result);
1241      if (!reply.WriteInt32(result)) {
1242          TELEPHONY_LOGE("fail to write parcel");
1243          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1244      }
1245      return TELEPHONY_SUCCESS;
1246  }
1247  
OnInputDialerSpecialCode(MessageParcel & data,MessageParcel & reply)1248  int32_t CallManagerServiceStub::OnInputDialerSpecialCode(MessageParcel &data, MessageParcel &reply)
1249  {
1250      int32_t result = TELEPHONY_ERR_FAIL;
1251      std::string specialCode = data.ReadString();
1252      result = InputDialerSpecialCode(specialCode);
1253      TELEPHONY_LOGI("result:%{public}d", result);
1254      if (!reply.WriteInt32(result)) {
1255          TELEPHONY_LOGE("fail to write parcel");
1256          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1257      }
1258      return TELEPHONY_SUCCESS;
1259  }
1260  
OnRemoveMissedIncomingCallNotification(MessageParcel & data,MessageParcel & reply)1261  int32_t CallManagerServiceStub::OnRemoveMissedIncomingCallNotification(MessageParcel &data, MessageParcel &reply)
1262  {
1263      int32_t result = RemoveMissedIncomingCallNotification();
1264      if (!reply.WriteInt32(result)) {
1265          TELEPHONY_LOGE("OnRemoveMissedIncomingCallNotification fail to write parcel");
1266          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1267      }
1268      return TELEPHONY_SUCCESS;
1269  }
1270  
OnSetVoIPCallState(MessageParcel & data,MessageParcel & reply)1271  int32_t CallManagerServiceStub::OnSetVoIPCallState(MessageParcel &data, MessageParcel &reply)
1272  {
1273      int32_t result = TELEPHONY_ERR_FAIL;
1274      int32_t state = data.ReadInt32();
1275      result = SetVoIPCallState(state);
1276      if (!reply.WriteInt32(result)) {
1277          TELEPHONY_LOGE("SetVoIPCallState fail to write parcel");
1278          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1279      }
1280      return TELEPHONY_SUCCESS;
1281  }
1282  
OnGetVoIPCallState(MessageParcel & data,MessageParcel & reply)1283  int32_t CallManagerServiceStub::OnGetVoIPCallState(MessageParcel &data, MessageParcel &reply)
1284  {
1285      int32_t result = TELEPHONY_ERR_FAIL;
1286      int32_t state;
1287      result = GetVoIPCallState(state);
1288      if (!reply.WriteInt32(state)) {
1289          TELEPHONY_LOGE("GetVoIPCallState fail to write parcel");
1290          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1291      }
1292      if (!reply.WriteInt32(result)) {
1293          TELEPHONY_LOGE("GetVoIPCallState fail to write parcel");
1294          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1295      }
1296      return TELEPHONY_SUCCESS;
1297  }
1298  
OnGetProxyObjectPtr(MessageParcel & data,MessageParcel & reply)1299  int32_t CallManagerServiceStub::OnGetProxyObjectPtr(MessageParcel &data, MessageParcel &reply)
1300  {
1301      CallManagerProxyType proxyType = static_cast<CallManagerProxyType>(data.ReadInt32());
1302      sptr<IRemoteObject> objectPtr = GetProxyObjectPtr(proxyType);
1303      if (!reply.WriteRemoteObject(objectPtr)) {
1304          TELEPHONY_LOGE("OnGetProxyObjectPtr fail to write parcel");
1305          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1306      }
1307      return TELEPHONY_SUCCESS;
1308  }
1309  
OnReportAudioDeviceInfo(MessageParcel & data,MessageParcel & reply)1310  int32_t CallManagerServiceStub::OnReportAudioDeviceInfo(MessageParcel &data, MessageParcel &reply)
1311  {
1312      int32_t result = ReportAudioDeviceInfo();
1313      TELEPHONY_LOGI("OnReportAudioDeviceInfo result:%{public}d", result);
1314      if (!reply.WriteInt32(result)) {
1315          TELEPHONY_LOGE("OnReportAudioDeviceInfo write reply failed.");
1316          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1317      }
1318  
1319      return TELEPHONY_SUCCESS;
1320  }
1321  
OnCancelCallUpgrade(MessageParcel & data,MessageParcel & reply)1322  int32_t CallManagerServiceStub::OnCancelCallUpgrade(MessageParcel &data, MessageParcel &reply)
1323  {
1324      int32_t result = TELEPHONY_ERR_FAIL;
1325      int32_t callId = data.ReadInt32();
1326      result = CancelCallUpgrade(callId);
1327      if (!reply.WriteInt32(result)) {
1328          TELEPHONY_LOGE("fail to write parcel");
1329          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1330      }
1331      return TELEPHONY_SUCCESS;
1332  }
1333  
OnRequestCameraCapabilities(MessageParcel & data,MessageParcel & reply)1334  int32_t CallManagerServiceStub::OnRequestCameraCapabilities(MessageParcel &data, MessageParcel &reply)
1335  {
1336      int32_t result = TELEPHONY_ERR_FAIL;
1337      int32_t callId = data.ReadInt32();
1338      result = RequestCameraCapabilities(callId);
1339      if (!reply.WriteInt32(result)) {
1340          TELEPHONY_LOGE("fail to write parcel");
1341          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1342      }
1343      return TELEPHONY_SUCCESS;
1344  }
1345  
OnSendCallUiEvent(MessageParcel & data,MessageParcel & reply)1346  int32_t CallManagerServiceStub::OnSendCallUiEvent(MessageParcel &data, MessageParcel &reply)
1347  {
1348      int32_t callId = data.ReadInt32();
1349      std::string eventName = data.ReadString();
1350      int32_t result = SendCallUiEvent(callId, eventName);
1351      TELEPHONY_LOGI("result:%{public}d", result);
1352      if (!reply.WriteInt32(result)) {
1353          TELEPHONY_LOGE("fail to write parcel");
1354          return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1355      }
1356      return result;
1357  }
1358  
SetTimer(uint32_t code)1359  int32_t CallManagerServiceStub::SetTimer(uint32_t code)
1360  {
1361  #ifdef HICOLLIE_ENABLE
1362      int32_t idTimer = HiviewDFX::INVALID_ID;
1363      std::map<uint32_t, std::string>::iterator itCollieId = collieCodeStringMap_.find(code);
1364      if (itCollieId != collieCodeStringMap_.end()) {
1365          std::string collieStr = itCollieId->second;
1366          std::string collieName = "CallManagerServiceStub: " + collieStr;
1367          unsigned int flag = HiviewDFX::XCOLLIE_FLAG_NOOP;
1368          auto TimerCallback = [collieStr](void *) {
1369              TELEPHONY_LOGE("OnRemoteRequest timeout func: %{public}s",
1370                  collieStr.c_str());
1371              exit(1);
1372          };
1373          idTimer = HiviewDFX::XCollie::GetInstance().SetTimer(
1374              collieName, XCOLLIE_TIMEOUT_SECONDS, TimerCallback, nullptr, flag);
1375          TELEPHONY_LOGD("SetTimer id: %{public}d, name: %{public}s.", idTimer, collieStr.c_str());
1376      }
1377      return idTimer;
1378  #else
1379      TELEPHONY_LOGD("No HICOLLIE_ENABLE");
1380      return -1;
1381  #endif
1382  }
1383  
CancelTimer(int32_t id)1384  void CallManagerServiceStub::CancelTimer(int32_t id)
1385  {
1386  #ifdef HICOLLIE_ENABLE
1387      if (id == HiviewDFX::INVALID_ID) {
1388          return;
1389      }
1390      TELEPHONY_LOGD("CancelTimer id: %{public}d.", id);
1391      HiviewDFX::XCollie::GetInstance().CancelTimer(id);
1392  #else
1393      return;
1394  #endif
1395  }
1396  } // namespace Telephony
1397  } // namespace OHOS
1398