• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "core_service.h"
17 
18 #include "core_manager_inner.h"
19 #include "core_service_dump_helper.h"
20 #include "common_event_data.h"
21 #include "common_event_manager.h"
22 #include "common_event_publish_info.h"
23 #include "ffrt_inner.h"
24 #include "ims_core_service_client.h"
25 #include "network_search_manager.h"
26 #include "network_search_types.h"
27 #include "tel_ril_manager.h"
28 #include "sim_constant.h"
29 #include "parameter.h"
30 #include "sim_manager.h"
31 #include "string_ex.h"
32 #include "system_ability_definition.h"
33 #include "telephony_common_utils.h"
34 #include "telephony_errors.h"
35 #include "telephony_ext_wrapper.h"
36 #include "telephony_log_wrapper.h"
37 #include "telephony_permission.h"
38 #ifdef CORE_SERVICE_SUPPORT_ESIM
39 #include "esim_manager.h"
40 #endif
41 
42 namespace OHOS {
43 namespace Telephony {
44 namespace {
45 const int32_t MAX_FFRT_THREAD_NUM = 32;
46 }
47 const bool G_REGISTER_RESULT =
48     SystemAbility::MakeAndRegisterAbility(DelayedSingleton<CoreService>::GetInstance().get());
49 
CoreService()50 CoreService::CoreService() : SystemAbility(TELEPHONY_CORE_SERVICE_SYS_ABILITY_ID, true) {}
51 
~CoreService()52 CoreService::~CoreService() {}
53 
OnStart()54 void CoreService::OnStart()
55 {
56     bindTime_ = std::chrono::duration_cast<std::chrono::milliseconds>(
57         std::chrono::system_clock::now().time_since_epoch()).count();
58     if (state_ == ServiceRunningState::STATE_RUNNING) {
59         TELEPHONY_LOGE("CoreService has already started.");
60         return;
61     }
62 
63     if (!registerToService_) {
64         bool ret = Publish(DelayedSingleton<CoreService>::GetInstance().get());
65         if (!ret) {
66             TELEPHONY_LOGE("CoreService::Init Publish failed!");
67             return;
68         }
69         registerToService_ = true;
70     }
71     int ffrtRet = ffrt_set_cpu_worker_max_num(ffrt::qos_default, MAX_FFRT_THREAD_NUM);
72     if (ffrtRet == -1) {
73         TELEPHONY_LOGE("ffrt_set_cpu_worker_max_num fail");
74     }
75     if (!Init()) {
76         TELEPHONY_LOGE("failed to init CoreService");
77         return;
78     }
79     state_ = ServiceRunningState::STATE_RUNNING;
80     endTime_ =
81         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
82             .count();
83     bool res = NotifyCoreServiceReady();
84     TELEPHONY_LOGI("CoreService start success, notify [%{public}d]", res);
85 }
86 
Init()87 bool CoreService::Init()
88 {
89     TELEPHONY_LOGI("CoreService::Init");
90 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_EXT
91     TELEPHONY_EXT_WRAPPER.InitTelephonyExtWrapper();
92 #endif
93     telRilManager_ = std::make_shared<TelRilManager>();
94     if (!telRilManager_->OnInit()) {
95         TELEPHONY_LOGE("TelRilManager init is failed!");
96         return false;
97     }
98     CoreManagerInner::GetInstance().SetTelRilMangerObj(telRilManager_);
99     int32_t slotCount = GetMaxSimCount();
100 #ifdef CORE_SERVICE_SUPPORT_ESIM
101     esimManager_ = std::make_shared<EsimManager>(telRilManager_);
102     esimManager_->OnInit(slotCount);
103     CoreManagerInner::GetInstance().SetEsimManagerObj(esimManager_);
104 #endif
105     simManager_ = std::make_shared<SimManager>(telRilManager_);
106     simManager_->OnInit(slotCount);
107     // connect ims_service
108     DelayedSingleton<ImsCoreServiceClient>::GetInstance()->Init();
109     networkSearchManager_ = std::make_shared<NetworkSearchManager>(telRilManager_, simManager_);
110     if (!networkSearchManager_->OnInit()) {
111         TELEPHONY_LOGE("NetworkSearchManager init is failed!");
112         return false;
113     }
114     CoreManagerInner::GetInstance().OnInit(networkSearchManager_, simManager_, telRilManager_);
115     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
116         networkSearchManager_->InitAirplaneMode(slotId);
117     }
118     TELEPHONY_LOGI("CoreService::Init success");
119     return true;
120 }
121 
NotifyCoreServiceReady()122 bool CoreService::NotifyCoreServiceReady()
123 {
124     AAFwk::Want want;
125     want.SetAction("telephony.event.CORE_SERVICE_READY");
126     EventFwk::CommonEventData commonEventData;
127     commonEventData.SetWant(want);
128     EventFwk::CommonEventPublishInfo publishInfo;
129     std::vector<std::string> callPermissions;
130     callPermissions.emplace_back(Permission::GET_TELEPHONY_STATE);
131     publishInfo.SetSubscriberPermissions(callPermissions);
132     return EventFwk::CommonEventManager::PublishCommonEvent(commonEventData, publishInfo, nullptr);
133 }
134 
OnStop()135 void CoreService::OnStop()
136 {
137     state_ = ServiceRunningState::STATE_NOT_START;
138     registerToService_ = false;
139     DelayedSingleton<ImsCoreServiceClient>::GetInstance()->UnInit();
140     telRilManager_->DeInit();
141 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_EXT
142     TELEPHONY_EXT_WRAPPER.DeInitTelephonyExtWrapper();
143 #endif
144     TELEPHONY_LOGI("CoreService Stop success");
145 }
146 
GetServiceRunningState()147 int32_t CoreService::GetServiceRunningState()
148 {
149     return static_cast<int32_t>(state_);
150 }
151 
AsyncNetSearchExecute(const std::function<void ()> task)152 void CoreService::AsyncNetSearchExecute(const std::function<void()> task)
153 {
154     if (networkSearchManagerHandler_ == nullptr) {
155         std::lock_guard<std::mutex> lock(handlerInitMutex_);
156         if (networkSearchManagerHandler_ == nullptr) {
157             auto networkSearchRunner = AppExecFwk::EventRunner::Create("networkSearchHandler",
158                 AppExecFwk::ThreadMode::FFRT);
159             networkSearchManagerHandler_ = std::make_shared<AppExecFwk::EventHandler>(networkSearchRunner);
160         }
161     }
162     networkSearchManagerHandler_->PostTask(task);
163 }
164 
AsyncSimGeneralExecute(const std::function<void ()> task)165 void CoreService::AsyncSimGeneralExecute(const std::function<void()> task)
166 {
167     if (simGeneralHandler_ == nullptr) {
168         std::lock_guard<std::mutex> lock(handlerInitMutex_);
169         if (simGeneralHandler_ == nullptr) {
170             auto simManagerRunner = AppExecFwk::EventRunner::Create("simManagerHandler",
171                 AppExecFwk::ThreadMode::FFRT);
172             simGeneralHandler_ = std::make_shared<AppExecFwk::EventHandler>(simManagerRunner);
173         }
174     }
175     simGeneralHandler_->PostTask(task);
176 }
177 
AsyncSimPinExecute(const std::function<void ()> task)178 void CoreService::AsyncSimPinExecute(const std::function<void()> task)
179 {
180     if (simPinHandler_ == nullptr) {
181         std::lock_guard<std::mutex> lock(handlerInitMutex_);
182         if (simPinHandler_ == nullptr) {
183             auto simManagerRunner = AppExecFwk::EventRunner::Create("simPinManagerHandler",
184                 AppExecFwk::ThreadMode::FFRT);
185             simPinHandler_ = std::make_shared<AppExecFwk::EventHandler>(simManagerRunner);
186         }
187     }
188     simPinHandler_->PostTask(task);
189 }
190 
GetPsRadioTech(int32_t slotId,int32_t & psRadioTech)191 int32_t CoreService::GetPsRadioTech(int32_t slotId, int32_t &psRadioTech)
192 {
193     if (!TelephonyPermission::CheckPermission(Permission::GET_NETWORK_INFO)) {
194         TELEPHONY_LOGE("permission denied!");
195         return TELEPHONY_ERR_PERMISSION_ERR;
196     }
197     if (networkSearchManager_ == nullptr) {
198         TELEPHONY_LOGE("networkSearchManager_ is null");
199         return TELEPHONY_ERR_LOCAL_PTR_NULL;
200     }
201     return networkSearchManager_->GetPsRadioTech(slotId, psRadioTech);
202 }
203 
GetCsRadioTech(int32_t slotId,int32_t & csRadioTech)204 int32_t CoreService::GetCsRadioTech(int32_t slotId, int32_t &csRadioTech)
205 {
206     if (!TelephonyPermission::CheckPermission(Permission::GET_NETWORK_INFO)) {
207         TELEPHONY_LOGE("permission denied!");
208         return TELEPHONY_ERR_PERMISSION_ERR;
209     }
210     if (networkSearchManager_ == nullptr) {
211         TELEPHONY_LOGE("networkSearchManager_ is null");
212         return TELEPHONY_ERR_LOCAL_PTR_NULL;
213     }
214     return networkSearchManager_->GetCsRadioTech(slotId, csRadioTech);
215 }
216 
SetNetworkSelectionMode(int32_t slotId,int32_t selectMode,const sptr<NetworkInformation> & networkInformation,bool resumeSelection,const sptr<INetworkSearchCallback> & callback)217 int32_t CoreService::SetNetworkSelectionMode(int32_t slotId, int32_t selectMode,
218     const sptr<NetworkInformation> &networkInformation, bool resumeSelection,
219     const sptr<INetworkSearchCallback> &callback)
220 {
221     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
222         TELEPHONY_LOGE("Non-system applications use system APIs!");
223         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
224     }
225     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
226         TELEPHONY_LOGE("permission denied!");
227         return TELEPHONY_ERR_PERMISSION_ERR;
228     }
229     if (networkSearchManager_ == nullptr) {
230         TELEPHONY_LOGE("networkSearchManager_ is null");
231         return TELEPHONY_ERR_LOCAL_PTR_NULL;
232     }
233     TELEPHONY_LOGI("CoreService::SetNetworkSelectionMode selectMode:%{public}d", selectMode);
234     return networkSearchManager_->SetNetworkSelectionMode(
235         slotId, selectMode, networkInformation, resumeSelection, callback);
236 }
237 
GetSignalInfoList(int32_t slotId,std::vector<sptr<SignalInformation>> & signals)238 int32_t CoreService::GetSignalInfoList(int32_t slotId, std::vector<sptr<SignalInformation>> &signals)
239 {
240     if (networkSearchManager_ == nullptr) {
241         TELEPHONY_LOGE("networkSearchManager_ is null");
242         return TELEPHONY_ERR_LOCAL_PTR_NULL;
243     }
244     return networkSearchManager_->GetSignalInfoList(slotId, signals);
245 }
246 
GetOperatorNumeric(int32_t slotId)247 std::u16string CoreService::GetOperatorNumeric(int32_t slotId)
248 {
249     if (networkSearchManager_ == nullptr) {
250         TELEPHONY_LOGE("networkSearchManager_ is null");
251         return std::u16string();
252     }
253     return networkSearchManager_->GetOperatorNumeric(slotId);
254 }
255 
GetResidentNetworkNumeric(int32_t slotId)256 std::string CoreService::GetResidentNetworkNumeric(int32_t slotId)
257 {
258     if (networkSearchManager_ == nullptr) {
259         TELEPHONY_LOGE("networkSearchManager_ is null");
260         return "";
261     }
262     return networkSearchManager_->GetResidentNetworkNumeric(slotId);
263 }
264 
GetOperatorName(int32_t slotId,std::u16string & operatorName)265 int32_t CoreService::GetOperatorName(int32_t slotId, std::u16string &operatorName)
266 {
267     if (networkSearchManager_ == nullptr) {
268         TELEPHONY_LOGE("networkSearchManager_ is null");
269         return TELEPHONY_ERR_LOCAL_PTR_NULL;
270     }
271     return networkSearchManager_->GetOperatorName(slotId, operatorName);
272 }
273 
GetNetworkState(int32_t slotId,sptr<NetworkState> & networkState)274 int32_t CoreService::GetNetworkState(int32_t slotId, sptr<NetworkState> &networkState)
275 {
276     if (!TelephonyPermission::CheckPermission(Permission::GET_NETWORK_INFO)) {
277         TELEPHONY_LOGE("permission denied!");
278         return TELEPHONY_ERR_PERMISSION_ERR;
279     }
280     if (networkSearchManager_ == nullptr) {
281         TELEPHONY_LOGE("networkSearchManager_ is null");
282         return TELEPHONY_ERR_LOCAL_PTR_NULL;
283     }
284     return networkSearchManager_->GetNetworkStatus(slotId, networkState);
285 }
286 
SetRadioState(int32_t slotId,bool isOn,const sptr<INetworkSearchCallback> & callback)287 int32_t CoreService::SetRadioState(int32_t slotId, bool isOn, const sptr<INetworkSearchCallback> &callback)
288 {
289     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
290         TELEPHONY_LOGE("Non-system applications use system APIs!");
291         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
292     }
293     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
294         TELEPHONY_LOGE("permission denied!");
295         return TELEPHONY_ERR_PERMISSION_ERR;
296     }
297     if (networkSearchManager_ == nullptr) {
298         TELEPHONY_LOGE("networkSearchManager_ is null");
299         return TELEPHONY_ERR_LOCAL_PTR_NULL;
300     }
301     TELEPHONY_LOGI("CoreService::SetRadioState --> slotId:%{public}d, isOn:%{public}d", slotId, isOn);
302     return networkSearchManager_->SetRadioState(slotId, isOn, 0, callback);
303 }
304 
GetRadioState(int32_t slotId,const sptr<INetworkSearchCallback> & callback)305 int32_t CoreService::GetRadioState(int32_t slotId, const sptr<INetworkSearchCallback> &callback)
306 {
307     if (!TelephonyPermission::CheckPermission(Permission::GET_NETWORK_INFO)) {
308         TELEPHONY_LOGE("permission denied!");
309         return TELEPHONY_ERR_PERMISSION_ERR;
310     }
311     if (networkSearchManager_ == nullptr) {
312         TELEPHONY_LOGE("networkSearchManager_ is null");
313         return TELEPHONY_ERR_LOCAL_PTR_NULL;
314     }
315     return networkSearchManager_->GetRadioState(slotId, callback);
316 }
317 
GetIsoCountryCodeForNetwork(int32_t slotId,std::u16string & countryCode)318 int32_t CoreService::GetIsoCountryCodeForNetwork(int32_t slotId, std::u16string &countryCode)
319 {
320     if (networkSearchManager_ == nullptr) {
321         TELEPHONY_LOGE("networkSearchManager_ is null");
322         return TELEPHONY_ERR_LOCAL_PTR_NULL;
323     }
324     return networkSearchManager_->GetIsoCountryCodeForNetwork(slotId, countryCode);
325 }
326 
GetImei(int32_t slotId,const sptr<IRawParcelCallback> & callback)327 int32_t CoreService::GetImei(int32_t slotId, const sptr<IRawParcelCallback> &callback)
328 {
329     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
330         TELEPHONY_LOGE("Non-system applications use system APIs!");
331         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
332     }
333     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
334         TELEPHONY_LOGE("permission denied!");
335         return TELEPHONY_ERR_PERMISSION_ERR;
336     }
337     if (networkSearchManager_ == nullptr) {
338         TELEPHONY_LOGE("networkSearchManager_ is null");
339         return TELEPHONY_ERR_LOCAL_PTR_NULL;
340     }
341     if (callback == nullptr) {
342         TELEPHONY_LOGE("GetImei no callback");
343         return TELEPHONY_ERR_LOCAL_PTR_NULL;
344     }
345     AsyncNetSearchExecute([wp = std::weak_ptr<INetworkSearch>(networkSearchManager_), slotId, callback]() {
346         std::u16string imei = u"";
347         MessageParcel dataTmp;
348         auto networkSearchManager = wp.lock();
349         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
350         if (networkSearchManager) {
351             ret = networkSearchManager->GetImei(slotId, imei);
352         }
353         callback->Transfer([=](MessageParcel &data) {
354             data.WriteInt32(ret);
355             if (ret == TELEPHONY_ERR_SUCCESS) {
356                 data.WriteString16(imei);
357             }
358             }, dataTmp);
359     });
360     return TELEPHONY_ERR_SUCCESS;
361 }
362 
GetImeiSv(int32_t slotId,const sptr<IRawParcelCallback> & callback)363 int32_t CoreService::GetImeiSv(int32_t slotId, const sptr<IRawParcelCallback> &callback)
364 {
365     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
366         TELEPHONY_LOGE("Non-system applications use system APIs!");
367         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
368     }
369     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
370         TELEPHONY_LOGE("permission denied!");
371         return TELEPHONY_ERR_PERMISSION_ERR;
372     }
373     if (networkSearchManager_ == nullptr) {
374         TELEPHONY_LOGE("networkSearchManager_ is null");
375         return TELEPHONY_ERR_LOCAL_PTR_NULL;
376     }
377     if (callback == nullptr) {
378         TELEPHONY_LOGE("GetImeiSv no callback");
379         return TELEPHONY_ERR_LOCAL_PTR_NULL;
380     }
381     AsyncNetSearchExecute([wp = std::weak_ptr<INetworkSearch>(networkSearchManager_), slotId, callback]() {
382         std::u16string imeiSv = u"";
383         MessageParcel dataTmp;
384         auto networkSearchManager = wp.lock();
385         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
386         if (networkSearchManager) {
387             ret = networkSearchManager->GetImeiSv(slotId, imeiSv);
388         }
389         callback->Transfer([=](MessageParcel &data) {
390             data.WriteInt32(ret);
391             if (ret == TELEPHONY_ERR_SUCCESS) {
392                 data.WriteString16(imeiSv);
393             }
394             }, dataTmp);
395     });
396     return TELEPHONY_ERR_SUCCESS;
397 }
398 
GetMeid(int32_t slotId,std::u16string & meid)399 int32_t CoreService::GetMeid(int32_t slotId, std::u16string &meid)
400 {
401     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
402         TELEPHONY_LOGE("Non-system applications use system APIs!");
403         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
404     }
405     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
406         TELEPHONY_LOGE("permission denied!");
407         return TELEPHONY_ERR_PERMISSION_ERR;
408     }
409     if (networkSearchManager_ == nullptr) {
410         TELEPHONY_LOGE("networkSearchManager_ is null");
411         return TELEPHONY_ERR_LOCAL_PTR_NULL;
412     }
413     return networkSearchManager_->GetMeid(slotId, meid);
414 }
415 
GetUniqueDeviceId(int32_t slotId,std::u16string & deviceId)416 int32_t CoreService::GetUniqueDeviceId(int32_t slotId, std::u16string &deviceId)
417 {
418     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
419         TELEPHONY_LOGE("Non-system applications use system APIs!");
420         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
421     }
422     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
423         TELEPHONY_LOGE("permission denied!");
424         return TELEPHONY_ERR_PERMISSION_ERR;
425     }
426     if (networkSearchManager_ == nullptr) {
427         TELEPHONY_LOGE("networkSearchManager_ is null");
428         return TELEPHONY_ERR_LOCAL_PTR_NULL;
429     }
430     return networkSearchManager_->GetUniqueDeviceId(slotId, deviceId);
431 }
432 
IsNrSupported(int32_t slotId)433 bool CoreService::IsNrSupported(int32_t slotId)
434 {
435     if (networkSearchManager_ == nullptr) {
436         TELEPHONY_LOGE("networkSearchManager_ is null");
437         return false;
438     }
439     return networkSearchManager_->IsNrSupported(slotId);
440 }
441 
SetNrOptionMode(int32_t slotId,int32_t mode,const sptr<INetworkSearchCallback> & callback)442 int32_t CoreService::SetNrOptionMode(int32_t slotId, int32_t mode, const sptr<INetworkSearchCallback> &callback)
443 {
444     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
445         TELEPHONY_LOGE("Non-system applications use system APIs!");
446         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
447     }
448     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
449         TELEPHONY_LOGE("permission denied!");
450         return TELEPHONY_ERR_PERMISSION_ERR;
451     }
452     if (networkSearchManager_ == nullptr) {
453         TELEPHONY_LOGE("networkSearchManager_ is null");
454         return TELEPHONY_ERR_LOCAL_PTR_NULL;
455     }
456     return networkSearchManager_->SetNrOptionMode(slotId, mode, callback);
457 }
458 
GetNrOptionMode(int32_t slotId,const sptr<INetworkSearchCallback> & callback)459 int32_t CoreService::GetNrOptionMode(int32_t slotId, const sptr<INetworkSearchCallback> &callback)
460 {
461     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
462         TELEPHONY_LOGE("Non-system applications use system APIs!");
463         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
464     }
465     if (networkSearchManager_ == nullptr) {
466         TELEPHONY_LOGE("networkSearchManager_ is null");
467         return TELEPHONY_ERR_LOCAL_PTR_NULL;
468     }
469     return networkSearchManager_->GetNrOptionMode(slotId, callback);
470 }
471 
HasSimCard(int32_t slotId,const sptr<IRawParcelCallback> & callback)472 int32_t CoreService::HasSimCard(int32_t slotId, const sptr<IRawParcelCallback> &callback)
473 {
474     if (simManager_ == nullptr) {
475         TELEPHONY_LOGE("simManager_ is null");
476         return TELEPHONY_ERR_LOCAL_PTR_NULL;
477     }
478     if (callback == nullptr) {
479         TELEPHONY_LOGE("HasSimCard no callback");
480         return TELEPHONY_ERR_LOCAL_PTR_NULL;
481     }
482     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
483         bool hasSimCard = false;
484         MessageParcel dataTmp;
485         auto simManager = wp.lock();
486         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
487         if (simManager) {
488             ret = simManager->HasSimCard(slotId, hasSimCard);
489         }
490         callback->Transfer([=](MessageParcel &data) {
491             data.WriteInt32(ret);
492             if (ret == TELEPHONY_ERR_SUCCESS) {
493                 data.WriteBool(hasSimCard);
494             }
495             }, dataTmp);
496     });
497     return TELEPHONY_ERR_SUCCESS;
498 }
499 
GetSimState(int32_t slotId,const sptr<IRawParcelCallback> & callback)500 int32_t CoreService::GetSimState(int32_t slotId, const sptr<IRawParcelCallback> &callback)
501 {
502     if (simManager_ == nullptr) {
503         TELEPHONY_LOGE("simManager_ is null");
504         return TELEPHONY_ERR_LOCAL_PTR_NULL;
505     }
506     if (callback == nullptr) {
507         TELEPHONY_LOGE("GetSimState no callback");
508         return TELEPHONY_ERR_LOCAL_PTR_NULL;
509     }
510     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
511         SimState simState = SimState::SIM_STATE_UNKNOWN;
512         MessageParcel dataTmp;
513         auto simManager = wp.lock();
514         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
515         if (simManager) {
516             ret = simManager->GetSimState(slotId, simState);
517         }
518         callback->Transfer([=](MessageParcel &data) {
519             data.WriteInt32(ret);
520             if (ret == TELEPHONY_ERR_SUCCESS) {
521                 data.WriteInt32(static_cast<int32_t>(simState));
522             }
523             }, dataTmp);
524     });
525     return TELEPHONY_ERR_SUCCESS;
526 }
527 
GetDsdsMode(int32_t & dsdsMode)528 int32_t CoreService::GetDsdsMode(int32_t &dsdsMode)
529 {
530     TELEPHONY_LOGI("CoreService::GetDsdsMode()");
531     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
532         TELEPHONY_LOGE("Non-system applications use system APIs!");
533         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
534     }
535     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
536         TELEPHONY_LOGE("permission denied!");
537         return TELEPHONY_ERR_PERMISSION_ERR;
538     }
539     if (simManager_ == nullptr) {
540         TELEPHONY_LOGE("simManager_ is null");
541         return TELEPHONY_ERR_LOCAL_PTR_NULL;
542     }
543 
544     return simManager_->GetDsdsMode(dsdsMode);
545 }
546 
GetCardType(int32_t slotId,CardType & cardType)547 int32_t CoreService::GetCardType(int32_t slotId, CardType &cardType)
548 {
549     if (simManager_ == nullptr) {
550         TELEPHONY_LOGE("simManager_ is null");
551         return TELEPHONY_ERR_LOCAL_PTR_NULL;
552     }
553 
554     return simManager_->GetCardType(slotId, cardType);
555 }
556 
GetISOCountryCodeForSim(int32_t slotId,std::u16string & countryCode)557 int32_t CoreService::GetISOCountryCodeForSim(int32_t slotId, std::u16string &countryCode)
558 {
559     if (simManager_ == nullptr) {
560         TELEPHONY_LOGE("simManager_ is null");
561         return TELEPHONY_ERR_LOCAL_PTR_NULL;
562     }
563 
564     return simManager_->GetISOCountryCodeForSim(slotId, countryCode);
565 }
566 
GetSimSpn(int32_t slotId,std::u16string & spn)567 int32_t CoreService::GetSimSpn(int32_t slotId, std::u16string &spn)
568 {
569     if (simManager_ == nullptr) {
570         TELEPHONY_LOGE("simManager_ is null");
571         return TELEPHONY_ERR_LOCAL_PTR_NULL;
572     }
573     return simManager_->GetSimSpn(slotId, spn);
574 }
575 
GetSimIccId(int32_t slotId,std::u16string & iccId)576 int32_t CoreService::GetSimIccId(int32_t slotId, std::u16string &iccId)
577 {
578     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
579         TELEPHONY_LOGE("Non-system applications use system APIs!");
580         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
581     }
582     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
583         TELEPHONY_LOGE("permission denied!");
584         return TELEPHONY_ERR_PERMISSION_ERR;
585     }
586     if (simManager_ == nullptr) {
587         TELEPHONY_LOGE("simManager_ is null");
588         return TELEPHONY_ERR_LOCAL_PTR_NULL;
589     }
590     return simManager_->GetSimIccId(slotId, iccId);
591 }
592 
GetSimOperatorNumeric(int32_t slotId,std::u16string & operatorNumeric)593 int32_t CoreService::GetSimOperatorNumeric(int32_t slotId, std::u16string &operatorNumeric)
594 {
595     if (simManager_ == nullptr) {
596         TELEPHONY_LOGE("simManager_ is null");
597         return TELEPHONY_ERR_LOCAL_PTR_NULL;
598     }
599     return simManager_->GetSimOperatorNumeric(slotId, operatorNumeric);
600 }
601 
GetIMSI(int32_t slotId,std::u16string & imsi)602 int32_t CoreService::GetIMSI(int32_t slotId, std::u16string &imsi)
603 {
604     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
605         TELEPHONY_LOGE("Non-system applications use system APIs!");
606         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
607     }
608     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
609         TELEPHONY_LOGE("permission denied!");
610         return TELEPHONY_ERR_PERMISSION_ERR;
611     }
612     if (simManager_ == nullptr) {
613         TELEPHONY_LOGE("simManager_ is null");
614         return TELEPHONY_ERR_LOCAL_PTR_NULL;
615     }
616     return simManager_->GetIMSI(slotId, imsi);
617 }
618 
IsCTSimCard(int32_t slotId,const sptr<IRawParcelCallback> & callback)619 int32_t CoreService::IsCTSimCard(int32_t slotId, const sptr<IRawParcelCallback> &callback)
620 {
621     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
622         TELEPHONY_LOGE("Non-system applications use system APIs!");
623         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
624     }
625     if (simManager_ == nullptr) {
626         TELEPHONY_LOGE("simManager_ is null");
627         return TELEPHONY_ERR_LOCAL_PTR_NULL;
628     }
629     if (callback == nullptr) {
630         TELEPHONY_LOGE("IsCTSimCard no callback");
631         return TELEPHONY_ERR_LOCAL_PTR_NULL;
632     }
633     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
634         bool isCTSimCard = false;
635         MessageParcel dataTmp;
636         auto simManager = wp.lock();
637         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
638         if (simManager) {
639             ret = simManager->IsCTSimCard(slotId, isCTSimCard);
640         }
641         callback->Transfer([=](MessageParcel &data) {
642             data.WriteInt32(ret);
643             if (ret == TELEPHONY_ERR_SUCCESS) {
644                 data.WriteBool(isCTSimCard);
645             }
646             }, dataTmp);
647     });
648     return TELEPHONY_ERR_SUCCESS;
649 }
650 
IsSimActive(int32_t slotId,const sptr<IRawParcelCallback> & callback)651 bool CoreService::IsSimActive(int32_t slotId, const sptr<IRawParcelCallback> &callback)
652 {
653     if (simManager_ == nullptr) {
654         TELEPHONY_LOGE("simManager_ is null");
655         return false;
656     }
657     if (callback == nullptr) {
658         TELEPHONY_LOGE("IsSimActive no callback");
659         return false;
660     }
661     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
662         bool isSimActive = false;
663         MessageParcel dataTmp;
664         auto simManager = wp.lock();
665         if (simManager) {
666             isSimActive = simManager->IsSimActive(slotId);
667         }
668         callback->Transfer([=](MessageParcel &data) {
669             data.WriteBool(isSimActive);
670             }, dataTmp);
671     });
672     return true;
673 }
674 
GetSlotId(int32_t simId)675 int32_t CoreService::GetSlotId(int32_t simId)
676 {
677     if (simManager_ == nullptr) {
678         TELEPHONY_LOGE("CoreService::GetSlotId(), simManager_ is nullptr!");
679         return TELEPHONY_ERR_LOCAL_PTR_NULL;
680     }
681     return simManager_->GetSlotId(simId);
682 }
683 
GetSimId(int32_t slotId)684 int32_t CoreService::GetSimId(int32_t slotId)
685 {
686     if (simManager_ == nullptr) {
687         TELEPHONY_LOGE("CoreService::GetSimId(), simManager_ is nullptr!");
688         return TELEPHONY_ERROR;
689     }
690     return simManager_->GetSimId(slotId);
691 }
692 
GetNetworkSearchInformation(int32_t slotId,const sptr<INetworkSearchCallback> & callback)693 int32_t CoreService::GetNetworkSearchInformation(int32_t slotId, const sptr<INetworkSearchCallback> &callback)
694 {
695     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
696         TELEPHONY_LOGE("Non-system applications use system APIs!");
697         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
698     }
699     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
700         TELEPHONY_LOGE("permission denied!");
701         return TELEPHONY_ERR_PERMISSION_ERR;
702     }
703     if (networkSearchManager_ == nullptr) {
704         TELEPHONY_LOGE("networkSearchManager_ is null");
705         return TELEPHONY_ERR_LOCAL_PTR_NULL;
706     }
707     return networkSearchManager_->GetNetworkSearchInformation(slotId, callback);
708 }
709 
GetNetworkSelectionMode(int32_t slotId,const sptr<INetworkSearchCallback> & callback)710 int32_t CoreService::GetNetworkSelectionMode(int32_t slotId, const sptr<INetworkSearchCallback> &callback)
711 {
712     if (networkSearchManager_ == nullptr) {
713         TELEPHONY_LOGE("networkSearchManager_ is null");
714         return TELEPHONY_ERR_LOCAL_PTR_NULL;
715     }
716     return networkSearchManager_->GetNetworkSelectionMode(slotId, callback);
717 }
718 
GetLocaleFromDefaultSim()719 std::u16string CoreService::GetLocaleFromDefaultSim()
720 {
721     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
722         TELEPHONY_LOGE("CoreService::GetLocaleFromDefaultSim, Permission denied!");
723         return std::u16string();
724     }
725     if (simManager_ == nullptr) {
726         TELEPHONY_LOGE("simManager_ is null");
727         return std::u16string();
728     }
729     int32_t slotId = INVALID_VALUE;
730     simManager_->GetPrimarySlotId(slotId);
731     if (slotId < DEFAULT_SIM_SLOT_ID) {
732         slotId = DEFAULT_SIM_SLOT_ID;
733     }
734     return simManager_->GetLocaleFromDefaultSim(slotId);
735 }
736 
GetSimGid1(int32_t slotId,std::u16string & gid1)737 int32_t CoreService::GetSimGid1(int32_t slotId, std::u16string &gid1)
738 {
739     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
740         TELEPHONY_LOGE("Non-system applications use system APIs!");
741         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
742     }
743     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
744         TELEPHONY_LOGE("CoreService::GetSimGid1, Permission denied!");
745         return TELEPHONY_ERR_PERMISSION_ERR;
746     }
747     if (simManager_ == nullptr) {
748         TELEPHONY_LOGE("simManager_ is null");
749         return TELEPHONY_ERR_LOCAL_PTR_NULL;
750     }
751     return simManager_->GetSimGid1(slotId, gid1);
752 }
753 
GetSimGid2(int32_t slotId)754 std::u16string CoreService::GetSimGid2(int32_t slotId)
755 {
756     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
757         TELEPHONY_LOGE("Non-system applications use system APIs!");
758         return std::u16string();
759     }
760     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
761         TELEPHONY_LOGE("CoreService::GetSimGid2, Permission denied!");
762         return std::u16string();
763     }
764     if (simManager_ == nullptr) {
765         TELEPHONY_LOGE("simManager_ is null");
766         return std::u16string();
767     }
768     return simManager_->GetSimGid2(slotId);
769 }
770 
GetSimEons(int32_t slotId,const std::string & plmn,int32_t lac,bool longNameRequired)771 std::u16string CoreService::GetSimEons(int32_t slotId, const std::string &plmn, int32_t lac, bool longNameRequired)
772 {
773     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
774         TELEPHONY_LOGE("Non-system applications use system APIs!");
775         return std::u16string();
776     }
777     if (simManager_ == nullptr) {
778         TELEPHONY_LOGE("CoreService::GetSimEons, Permission denied!");
779         return std::u16string();
780     }
781     return simManager_->GetSimEons(slotId, plmn, lac, longNameRequired);
782 }
783 
GetSimAccountInfo(int32_t slotId,IccAccountInfo & info)784 int32_t CoreService::GetSimAccountInfo(int32_t slotId, IccAccountInfo &info)
785 {
786     bool denied = false;
787     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
788         TELEPHONY_LOGE("permission denied!");
789         denied = true;
790     }
791     if (simManager_ == nullptr) {
792         TELEPHONY_LOGE("simManager_ is null");
793         return TELEPHONY_ERR_LOCAL_PTR_NULL;
794     }
795     return simManager_->GetSimAccountInfo(slotId, denied, info);
796 }
797 
SetDefaultVoiceSlotId(int32_t slotId)798 int32_t CoreService::SetDefaultVoiceSlotId(int32_t slotId)
799 {
800     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
801         TELEPHONY_LOGE("Non-system applications use system APIs!");
802         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
803     }
804     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
805         TELEPHONY_LOGE("permission denied!");
806         return TELEPHONY_ERR_PERMISSION_ERR;
807     }
808     if (simManager_ == nullptr) {
809         TELEPHONY_LOGE("simManager_ is null");
810         return TELEPHONY_ERR_LOCAL_PTR_NULL;
811     }
812     return simManager_->SetDefaultVoiceSlotId(slotId);
813 }
814 
GetDefaultVoiceSlotId()815 int32_t CoreService::GetDefaultVoiceSlotId()
816 {
817     if (simManager_ == nullptr) {
818         TELEPHONY_LOGE("simManager_ is null");
819         return TELEPHONY_ERROR;
820     }
821     return simManager_->GetDefaultVoiceSlotId();
822 }
823 
GetDefaultVoiceSimId(const sptr<IRawParcelCallback> & callback)824 int32_t CoreService::GetDefaultVoiceSimId(const sptr<IRawParcelCallback> &callback)
825 {
826     if (simManager_ == nullptr) {
827         TELEPHONY_LOGE("simManager_ is null");
828         return TELEPHONY_ERR_LOCAL_PTR_NULL;
829     }
830 
831     if (callback == nullptr) {
832         TELEPHONY_LOGE("GetDefaultVoiceSimId no callback");
833         return TELEPHONY_ERR_LOCAL_PTR_NULL;
834     }
835     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), callback]() {
836         int32_t simId = 0;
837         MessageParcel dataTmp;
838         auto simManager = wp.lock();
839         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
840         if (simManager) {
841             ret = simManager->GetDefaultVoiceSimId(simId);
842         }
843         callback->Transfer([=](MessageParcel &data) {
844             data.WriteInt32(ret);
845             if (ret == TELEPHONY_ERR_SUCCESS) {
846                 data.WriteInt32(simId);
847             }
848             }, dataTmp);
849     });
850     return TELEPHONY_ERR_SUCCESS;
851 }
852 
SetPrimarySlotId(int32_t slotId)853 int32_t CoreService::SetPrimarySlotId(int32_t slotId)
854 {
855     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
856         TELEPHONY_LOGE("Non-system applications use system APIs!");
857         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
858     }
859     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
860         TELEPHONY_LOGE("permission denied!");
861         return TELEPHONY_ERR_PERMISSION_ERR;
862     }
863     if (simManager_ == nullptr) {
864         TELEPHONY_LOGE("simManager_ is null");
865         return TELEPHONY_ERR_LOCAL_PTR_NULL;
866     }
867     bool hasSim = false;
868     simManager_->HasSimCard(slotId, hasSim);
869     if (!hasSim) {
870         TELEPHONY_LOGE("has no sim");
871         return TELEPHONY_ERR_NO_SIM_CARD;
872     }
873     if (!simManager_->IsSimActive(slotId)) {
874         TELEPHONY_LOGE("sim is not active");
875         return TELEPHONY_ERR_SLOTID_INVALID;
876     }
877     return simManager_->SetPrimarySlotId(slotId, true);
878 }
879 
GetPrimarySlotId(int32_t & slotId)880 int32_t CoreService::GetPrimarySlotId(int32_t &slotId)
881 {
882     if (simManager_ == nullptr) {
883         TELEPHONY_LOGE("simManager_ is null");
884         return TELEPHONY_ERR_LOCAL_PTR_NULL;
885     }
886     return simManager_->GetPrimarySlotId(slotId);
887 }
888 
SetShowNumber(int32_t slotId,const std::u16string & number,const sptr<IRawParcelCallback> & callback)889 int32_t CoreService::SetShowNumber(int32_t slotId, const std::u16string &number,
890     const sptr<IRawParcelCallback> &callback)
891 {
892     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
893         TELEPHONY_LOGE("Non-system applications use system APIs!");
894         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
895     }
896     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
897         TELEPHONY_LOGE("permission denied!");
898         return TELEPHONY_ERR_PERMISSION_ERR;
899     }
900     if (simManager_ == nullptr) {
901         TELEPHONY_LOGE("simManager_ is null");
902         return TELEPHONY_ERR_LOCAL_PTR_NULL;
903     }
904     if (callback == nullptr) {
905         TELEPHONY_LOGE("SetShowNumber no callback");
906         return TELEPHONY_ERR_LOCAL_PTR_NULL;
907     }
908     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, number, callback]() {
909         MessageParcel dataTmp;
910         auto simManager = wp.lock();
911         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
912         if (simManager) {
913             ret = simManager->SetShowNumber(slotId, number);
914         }
915         callback->Transfer([=](MessageParcel &data) {
916             data.WriteInt32(ret);
917             }, dataTmp);
918     });
919     return TELEPHONY_ERR_SUCCESS;
920 }
921 
GetShowNumber(int32_t slotId,const sptr<IRawParcelCallback> & callback)922 int32_t CoreService::GetShowNumber(int32_t slotId, const sptr<IRawParcelCallback> &callback)
923 {
924     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
925         TELEPHONY_LOGE("Non-system applications use system APIs!");
926         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
927     }
928     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
929         TELEPHONY_LOGE("permission denied!");
930         return TELEPHONY_ERR_PERMISSION_ERR;
931     }
932     if (simManager_ == nullptr) {
933         TELEPHONY_LOGE("simManager_ is null");
934         return TELEPHONY_ERR_LOCAL_PTR_NULL;
935     }
936     if (callback == nullptr) {
937         TELEPHONY_LOGE("GetShowNumber no callback");
938         return TELEPHONY_ERR_LOCAL_PTR_NULL;
939     }
940     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
941         std::u16string showNumber = u"";
942         MessageParcel dataTmp;
943         auto simManager = wp.lock();
944         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
945         if (simManager) {
946             ret = simManager->GetShowNumber(slotId, showNumber);
947         }
948         callback->Transfer([=](MessageParcel &data) {
949             data.WriteInt32(ret);
950             if (ret == TELEPHONY_ERR_SUCCESS) {
951                 data.WriteString16(showNumber);
952             }
953             }, dataTmp);
954     });
955     return TELEPHONY_ERR_SUCCESS;
956 }
957 
SetShowName(int32_t slotId,const std::u16string & name,const sptr<IRawParcelCallback> & callback)958 int32_t CoreService::SetShowName(int32_t slotId, const std::u16string &name,
959     const sptr<IRawParcelCallback> &callback)
960 {
961     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
962         TELEPHONY_LOGE("Non-system applications use system APIs!");
963         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
964     }
965     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
966         TELEPHONY_LOGE("permission denied!");
967         return TELEPHONY_ERR_PERMISSION_ERR;
968     }
969     if (simManager_ == nullptr) {
970         TELEPHONY_LOGE("simManager_ is null");
971         return TELEPHONY_ERR_LOCAL_PTR_NULL;
972     }
973     if (callback == nullptr) {
974         TELEPHONY_LOGE("SetShowName no callback");
975         return TELEPHONY_ERR_LOCAL_PTR_NULL;
976     }
977     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, name, callback]() {
978         MessageParcel dataTmp;
979         auto simManager = wp.lock();
980         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
981         if (simManager) {
982             ret = simManager->SetShowName(slotId, name);
983         }
984         callback->Transfer([=](MessageParcel &data) {
985             data.WriteInt32(ret);
986             }, dataTmp);
987     });
988     return TELEPHONY_ERR_SUCCESS;
989 }
990 
GetShowName(int32_t slotId,const sptr<IRawParcelCallback> & callback)991 int32_t CoreService::GetShowName(int32_t slotId, const sptr<IRawParcelCallback> &callback)
992 {
993     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
994         TELEPHONY_LOGE("Non-system applications use system APIs!");
995         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
996     }
997     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
998         TELEPHONY_LOGE("permission denied!");
999         return TELEPHONY_ERR_PERMISSION_ERR;
1000     }
1001     if (simManager_ == nullptr) {
1002         TELEPHONY_LOGE("simManager_ is null");
1003         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1004     }
1005     if (callback == nullptr) {
1006         TELEPHONY_LOGE("GetShowName no callback");
1007         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1008     }
1009     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
1010         std::u16string showName = u"";
1011         MessageParcel dataTmp;
1012         auto simManager = wp.lock();
1013         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1014         if (simManager) {
1015             ret = simManager->GetShowName(slotId, showName);
1016         }
1017         callback->Transfer([=](MessageParcel &data) {
1018             data.WriteInt32(ret);
1019             if (ret == TELEPHONY_ERR_SUCCESS) {
1020                 data.WriteString16(showName);
1021             }
1022             }, dataTmp);
1023     });
1024     return TELEPHONY_ERR_SUCCESS;
1025 }
1026 
GetActiveSimAccountInfoList(std::vector<IccAccountInfo> & iccAccountInfoList)1027 int32_t CoreService::GetActiveSimAccountInfoList(std::vector<IccAccountInfo> &iccAccountInfoList)
1028 {
1029     bool denied = false;
1030     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1031         TELEPHONY_LOGW("permission denied!");
1032         denied = true;
1033     }
1034     if (simManager_ == nullptr) {
1035         TELEPHONY_LOGE("simManager_ is null");
1036         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1037     }
1038     return simManager_->GetActiveSimAccountInfoList(denied, iccAccountInfoList);
1039 }
1040 
GetOperatorConfigs(int32_t slotId,OperatorConfig & poc)1041 int32_t CoreService::GetOperatorConfigs(int32_t slotId, OperatorConfig &poc)
1042 {
1043     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1044         TELEPHONY_LOGE("Non-system applications use system APIs!");
1045         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1046     }
1047     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1048         TELEPHONY_LOGE("permission denied!");
1049         return TELEPHONY_ERR_PERMISSION_ERR;
1050     }
1051     if (simManager_ == nullptr) {
1052         TELEPHONY_LOGE("simManager_ is null");
1053         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1054     }
1055     return simManager_->GetOperatorConfigs(slotId, poc);
1056 }
1057 
UnlockPin(const int32_t slotId,const std::u16string & pin,const sptr<IRawParcelCallback> & callback)1058 int32_t CoreService::UnlockPin(const int32_t slotId, const std::u16string &pin,
1059     const sptr<IRawParcelCallback> &callback)
1060 {
1061     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1062         TELEPHONY_LOGE("Non-system applications use system APIs!");
1063         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1064     }
1065     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1066         TELEPHONY_LOGE("permission denied!");
1067         return TELEPHONY_ERR_PERMISSION_ERR;
1068     }
1069     if (simManager_ == nullptr) {
1070         TELEPHONY_LOGE("simManager_ is null");
1071         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1072     }
1073     if (callback == nullptr) {
1074         TELEPHONY_LOGE("UnlockPin no callback");
1075         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1076     }
1077     AsyncSimPinExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, pin, callback]() {
1078         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1079         MessageParcel dataTmp;
1080         auto simManager = wp.lock();
1081         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1082         if (simManager) {
1083             ret = simManager->UnlockPin(slotId, Str16ToStr8(pin), response);
1084         }
1085         callback->Transfer([=](MessageParcel &data) {
1086             data.WriteInt32(ret);
1087             if (ret == TELEPHONY_ERR_SUCCESS) {
1088                 data.WriteInt32(response.result);
1089                 data.WriteInt32(response.remain);
1090             }
1091             }, dataTmp);
1092     });
1093     return TELEPHONY_ERR_SUCCESS;
1094 }
1095 
UnlockPuk(const int slotId,const std::u16string & newPin,const std::u16string & puk,const sptr<IRawParcelCallback> & callback)1096 int32_t CoreService::UnlockPuk(const int slotId, const std::u16string &newPin, const std::u16string &puk,
1097     const sptr<IRawParcelCallback> &callback)
1098 {
1099     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1100         TELEPHONY_LOGE("Non-system applications use system APIs!");
1101         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1102     }
1103     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1104         TELEPHONY_LOGE("permission denied!");
1105         return TELEPHONY_ERR_PERMISSION_ERR;
1106     }
1107     TELEPHONY_LOGI("CoreService::UnlockPuk(), newPinLen = %{public}lu, pukLen = %{public}lu, slotId = %{public}d",
1108         static_cast<unsigned long>(newPin.length()), static_cast<unsigned long>(puk.length()), slotId);
1109     if (simManager_ == nullptr) {
1110         TELEPHONY_LOGE("simManager_ is null");
1111         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1112     }
1113     if (callback == nullptr) {
1114         TELEPHONY_LOGE("UnlockPuk no callback");
1115         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1116     }
1117     AsyncSimPinExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, newPin, puk, callback]() {
1118         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1119         MessageParcel dataTmp;
1120         auto simManager = wp.lock();
1121         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1122         if (simManager) {
1123             ret = simManager->UnlockPuk(slotId, Str16ToStr8(newPin), Str16ToStr8(puk), response);
1124         }
1125         callback->Transfer([=](MessageParcel &data) {
1126             data.WriteInt32(ret);
1127             if (ret == TELEPHONY_ERR_SUCCESS) {
1128                 data.WriteInt32(response.result);
1129                 data.WriteInt32(response.remain);
1130             }
1131             }, dataTmp);
1132     });
1133     return TELEPHONY_ERR_SUCCESS;
1134 }
1135 
AlterPin(const int slotId,const std::u16string & newPin,const std::u16string & oldPin,const sptr<IRawParcelCallback> & callback)1136 int32_t CoreService::AlterPin(const int slotId, const std::u16string &newPin, const std::u16string &oldPin,
1137     const sptr<IRawParcelCallback> &callback)
1138 {
1139     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1140         TELEPHONY_LOGE("Non-system applications use system APIs!");
1141         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1142     }
1143     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1144         TELEPHONY_LOGE("permission denied!");
1145         return TELEPHONY_ERR_PERMISSION_ERR;
1146     }
1147     TELEPHONY_LOGI("CoreService::AlterPin(), newPinLen = %{public}lu, oldPinLen = %{public}lu, slotId = %{public}d",
1148         static_cast<unsigned long>(newPin.length()), static_cast<unsigned long>(oldPin.length()), slotId);
1149     if (simManager_ == nullptr) {
1150         TELEPHONY_LOGE("simManager_ is null");
1151         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1152     }
1153     if (callback == nullptr) {
1154         TELEPHONY_LOGE("AlterPin no callback");
1155         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1156     }
1157     AsyncSimPinExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, newPin, oldPin, callback]() {
1158         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1159         MessageParcel dataTmp;
1160         auto simManager = wp.lock();
1161         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1162         if (simManager) {
1163             ret = simManager->AlterPin(slotId, Str16ToStr8(newPin), Str16ToStr8(oldPin), response);
1164         }
1165         callback->Transfer([=](MessageParcel &data) {
1166             data.WriteInt32(ret);
1167             if (ret == TELEPHONY_ERR_SUCCESS) {
1168                 data.WriteInt32(response.result);
1169                 data.WriteInt32(response.remain);
1170             }
1171             }, dataTmp);
1172     });
1173     return TELEPHONY_ERR_SUCCESS;
1174 }
1175 
UnlockPin2(const int32_t slotId,const std::u16string & pin2,const sptr<IRawParcelCallback> & callback)1176 int32_t CoreService::UnlockPin2(const int32_t slotId, const std::u16string &pin2,
1177     const sptr<IRawParcelCallback> &callback)
1178 {
1179     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1180         TELEPHONY_LOGE("Non-system applications use system APIs!");
1181         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1182     }
1183     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1184         TELEPHONY_LOGE("permission denied!");
1185         return TELEPHONY_ERR_PERMISSION_ERR;
1186     }
1187     TELEPHONY_LOGI("CoreService::UnlockPin2(), pin2Len = %{public}lu, slotId = %{public}d",
1188         static_cast<unsigned long>(pin2.length()), slotId);
1189     if (simManager_ == nullptr) {
1190         TELEPHONY_LOGE("simManager_ is null");
1191         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1192     }
1193     if (callback == nullptr) {
1194         TELEPHONY_LOGE("UnlockPin2 no callback");
1195         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1196     }
1197     AsyncSimPinExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, pin2, callback]() {
1198         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1199         MessageParcel dataTmp;
1200         auto simManager = wp.lock();
1201         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1202         if (simManager) {
1203             ret = simManager->UnlockPin2(slotId, Str16ToStr8(pin2), response);
1204         }
1205         callback->Transfer([=](MessageParcel &data) {
1206             data.WriteInt32(ret);
1207             if (ret == TELEPHONY_ERR_SUCCESS) {
1208                 data.WriteInt32(response.result);
1209                 data.WriteInt32(response.remain);
1210             }
1211             }, dataTmp);
1212     });
1213     return TELEPHONY_ERR_SUCCESS;
1214 }
1215 
UnlockPuk2(const int slotId,const std::u16string & newPin2,const std::u16string & puk2,const sptr<IRawParcelCallback> & callback)1216 int32_t CoreService::UnlockPuk2(const int slotId, const std::u16string &newPin2, const std::u16string &puk2,
1217     const sptr<IRawParcelCallback> &callback)
1218 {
1219     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1220         TELEPHONY_LOGE("Non-system applications use system APIs!");
1221         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1222     }
1223     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1224         TELEPHONY_LOGE("permission denied!");
1225         return TELEPHONY_ERR_PERMISSION_ERR;
1226     }
1227     TELEPHONY_LOGI("CoreService::UnlockPuk2(), newPin2Len = %{public}lu, puk2Len = %{public}lu, slotId = %{public}d",
1228         static_cast<unsigned long>(newPin2.length()), static_cast<unsigned long>(puk2.length()), slotId);
1229     if (simManager_ == nullptr) {
1230         TELEPHONY_LOGE("simManager_ is null");
1231         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1232     }
1233     if (callback == nullptr) {
1234         TELEPHONY_LOGE("UnlockPuk2 no callback");
1235         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1236     }
1237     AsyncSimPinExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, newPin2, puk2, callback]() {
1238         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1239         MessageParcel dataTmp;
1240         auto simManager = wp.lock();
1241         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1242         if (simManager) {
1243             ret = simManager->UnlockPuk2(slotId, Str16ToStr8(newPin2), Str16ToStr8(puk2), response);
1244         }
1245         callback->Transfer([=](MessageParcel &data) {
1246             data.WriteInt32(ret);
1247             if (ret == TELEPHONY_ERR_SUCCESS) {
1248                 data.WriteInt32(response.result);
1249                 data.WriteInt32(response.remain);
1250             }
1251             }, dataTmp);
1252     });
1253     return TELEPHONY_ERR_SUCCESS;
1254 }
1255 
AlterPin2(const int slotId,const std::u16string & newPin2,const std::u16string & oldPin2,const sptr<IRawParcelCallback> & callback)1256 int32_t CoreService::AlterPin2(const int slotId, const std::u16string &newPin2,
1257     const std::u16string &oldPin2, const sptr<IRawParcelCallback> &callback)
1258 {
1259     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1260         TELEPHONY_LOGE("Non-system applications use system APIs!");
1261         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1262     }
1263     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1264         TELEPHONY_LOGE("permission denied!");
1265         return TELEPHONY_ERR_PERMISSION_ERR;
1266     }
1267     TELEPHONY_LOGI("CoreService::AlterPin2(), newPin2Len = %{public}lu, oldPin2Len = %{public}lu, slotId = %{public}d",
1268         static_cast<unsigned long>(newPin2.length()), static_cast<unsigned long>(oldPin2.length()), slotId);
1269     if (simManager_ == nullptr) {
1270         TELEPHONY_LOGE("simManager_ is null");
1271         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1272     }
1273     if (callback == nullptr) {
1274         TELEPHONY_LOGE("AlterPin2 no callback");
1275         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1276     }
1277     AsyncSimPinExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, newPin2, oldPin2, callback]() {
1278         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1279         MessageParcel dataTmp;
1280         auto simManager = wp.lock();
1281         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1282         if (simManager) {
1283             ret = simManager->AlterPin2(slotId, Str16ToStr8(newPin2), Str16ToStr8(oldPin2), response);
1284         }
1285         callback->Transfer([=](MessageParcel &data) {
1286             data.WriteInt32(ret);
1287             if (ret == TELEPHONY_ERR_SUCCESS) {
1288                 data.WriteInt32(response.result);
1289                 data.WriteInt32(response.remain);
1290             }
1291             }, dataTmp);
1292     });
1293     return TELEPHONY_ERR_SUCCESS;
1294 }
1295 
SetLockState(int32_t slotId,const LockInfo & options,const sptr<IRawParcelCallback> & callback)1296 int32_t CoreService::SetLockState(int32_t slotId, const LockInfo &options, const sptr<IRawParcelCallback> &callback)
1297 {
1298     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1299         TELEPHONY_LOGE("Non-system applications use system APIs!");
1300         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1301     }
1302     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1303         TELEPHONY_LOGE("permission denied!");
1304         return TELEPHONY_ERR_PERMISSION_ERR;
1305     }
1306     std::u16string strPin = options.password;
1307     TELEPHONY_LOGI(
1308         "CoreService::SetLockState(),lockType = %{public}d, pinLen = %{public}lu, lockState = %{public}d, slotId "
1309         "= "
1310         "%{public}d",
1311         options.lockType, static_cast<unsigned long>(strPin.length()), options.lockState, slotId);
1312     if (simManager_ == nullptr) {
1313         TELEPHONY_LOGE("simManager_ is null");
1314         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1315     }
1316     if (callback == nullptr) {
1317         TELEPHONY_LOGE("SetLockState no callback");
1318         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1319     }
1320     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, options, callback]() {
1321         LockStatusResponse response = { UNLOCK_FAIL, TELEPHONY_ERROR };
1322         MessageParcel dataTmp;
1323         auto simManager = wp.lock();
1324         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1325         if (simManager) {
1326             ret = simManager->SetLockState(slotId, options, response);
1327         }
1328         callback->Transfer([=](MessageParcel &data) {
1329             data.WriteInt32(ret);
1330             if (ret == TELEPHONY_ERR_SUCCESS) {
1331                 data.WriteInt32(response.result);
1332                 data.WriteInt32(response.remain);
1333             }
1334             }, dataTmp);
1335     });
1336     return TELEPHONY_ERR_SUCCESS;
1337 }
1338 
GetLockState(int32_t slotId,LockType lockType,const sptr<IRawParcelCallback> & callback)1339 int32_t CoreService::GetLockState(int32_t slotId, LockType lockType, const sptr<IRawParcelCallback> &callback)
1340 {
1341     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1342         TELEPHONY_LOGE("Non-system applications use system APIs!");
1343         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1344     }
1345     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1346         TELEPHONY_LOGE("CoreService::GetLockState, Permission denied!");
1347         return TELEPHONY_ERR_PERMISSION_ERR;
1348     }
1349     TELEPHONY_LOGI("CoreService::GetLockState(), lockType = %{public}d, slotId = %{public}d", lockType, slotId);
1350     if (simManager_ == nullptr) {
1351         TELEPHONY_LOGE("simManager_ is null");
1352         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1353     }
1354     if (callback == nullptr) {
1355         TELEPHONY_LOGE("GetLockState no callback");
1356         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1357     }
1358     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, lockType, callback]() {
1359         LockState lockState = LockState::LOCK_ERROR;
1360         MessageParcel dataTmp;
1361         auto simManager = wp.lock();
1362         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1363         if (simManager) {
1364             ret = simManager->GetLockState(slotId, lockType, lockState);
1365         }
1366         callback->Transfer([=](MessageParcel &data) {
1367             data.WriteInt32(ret);
1368             if (ret == TELEPHONY_ERR_SUCCESS) {
1369                 data.WriteInt32(static_cast<int32_t>(lockState));
1370             }
1371             }, dataTmp);
1372     });
1373     return TELEPHONY_ERR_SUCCESS;
1374 }
1375 
RefreshSimState(int32_t slotId)1376 int32_t CoreService::RefreshSimState(int32_t slotId)
1377 {
1378     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1379         TELEPHONY_LOGE("Non-system applications use system APIs!");
1380         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1381     }
1382     if (simManager_ == nullptr) {
1383         TELEPHONY_LOGE("simManager_ is null");
1384         return TELEPHONY_ERROR;
1385     }
1386     return simManager_->RefreshSimState(slotId);
1387 }
1388 
SetActiveSim(int32_t slotId,int32_t enable)1389 int32_t CoreService::SetActiveSim(int32_t slotId, int32_t enable)
1390 {
1391     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1392         TELEPHONY_LOGE("Non-system applications use system APIs!");
1393         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1394     }
1395     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1396         TELEPHONY_LOGE("permission denied!");
1397         return TELEPHONY_ERR_PERMISSION_ERR;
1398     }
1399     if (simManager_ == nullptr) {
1400         TELEPHONY_LOGE("simManager_ is null");
1401         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1402     }
1403     return simManager_->SetActiveSim(slotId, enable);
1404 }
1405 
SetActiveSimSatellite(int32_t slotId,int32_t enable)1406 int32_t CoreService::SetActiveSimSatellite(int32_t slotId, int32_t enable)
1407 {
1408     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1409         TELEPHONY_LOGE("Non-system applications use system APIs!");
1410         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1411     }
1412     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1413         TELEPHONY_LOGE("permission denied!");
1414         return TELEPHONY_ERR_PERMISSION_ERR;
1415     }
1416     if (simManager_ == nullptr) {
1417         TELEPHONY_LOGE("simManager_ is null");
1418         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1419     }
1420     return simManager_->SetActiveSimSatellite(slotId, enable);
1421 }
1422 
GetPreferredNetwork(int32_t slotId,const sptr<INetworkSearchCallback> & callback)1423 int32_t CoreService::GetPreferredNetwork(int32_t slotId, const sptr<INetworkSearchCallback> &callback)
1424 {
1425     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1426         TELEPHONY_LOGE("Non-system applications use system APIs!");
1427         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1428     }
1429     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1430         TELEPHONY_LOGE("permission denied!");
1431         return TELEPHONY_ERR_PERMISSION_ERR;
1432     }
1433     if (networkSearchManager_ == nullptr) {
1434         TELEPHONY_LOGE("networkSearchManager_ is null");
1435         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1436     }
1437     return networkSearchManager_->GetPreferredNetwork(slotId, callback);
1438 }
1439 
SetPreferredNetwork(int32_t slotId,int32_t networkMode,const sptr<INetworkSearchCallback> & callback)1440 int32_t CoreService::SetPreferredNetwork(
1441     int32_t slotId, int32_t networkMode, const sptr<INetworkSearchCallback> &callback)
1442 {
1443     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1444         TELEPHONY_LOGE("Non-system applications use system APIs!");
1445         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1446     }
1447     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1448         TELEPHONY_LOGE("permission denied!");
1449         return TELEPHONY_ERR_PERMISSION_ERR;
1450     }
1451     if (networkSearchManager_ == nullptr) {
1452         TELEPHONY_LOGE("networkSearchManager_ is null");
1453         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1454     }
1455     return networkSearchManager_->SetPreferredNetwork(slotId, networkMode, callback);
1456 }
1457 
GetNetworkCapability(int32_t slotId,int32_t networkCapabilityType,int32_t & networkCapabilityState)1458 int32_t CoreService::GetNetworkCapability(
1459     int32_t slotId, int32_t networkCapabilityType, int32_t &networkCapabilityState)
1460 {
1461     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1462         TELEPHONY_LOGE("Non-system applications use system APIs!");
1463         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1464     }
1465     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1466         TELEPHONY_LOGE("permission denied!");
1467         return TELEPHONY_ERR_PERMISSION_ERR;
1468     }
1469     if (networkSearchManager_ == nullptr) {
1470         TELEPHONY_LOGE("networkSearchManager_ is null");
1471         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1472     }
1473     return networkSearchManager_->GetNetworkCapability(slotId, networkCapabilityType, networkCapabilityState);
1474 }
1475 
SetNetworkCapability(int32_t slotId,int32_t networkCapabilityType,int32_t networkCapabilityState)1476 int32_t CoreService::SetNetworkCapability(int32_t slotId, int32_t networkCapabilityType, int32_t networkCapabilityState)
1477 {
1478     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1479         TELEPHONY_LOGE("Non-system applications use system APIs!");
1480         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1481     }
1482     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1483         TELEPHONY_LOGE("permission denied!");
1484         return TELEPHONY_ERR_PERMISSION_ERR;
1485     }
1486     if (networkSearchManager_ == nullptr) {
1487         TELEPHONY_LOGE("networkSearchManager_ is null");
1488         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1489     }
1490     return networkSearchManager_->SetNetworkCapability(slotId, networkCapabilityType, networkCapabilityState);
1491 }
1492 
GetSimTelephoneNumber(int32_t slotId,std::u16string & telephoneNumber)1493 int32_t CoreService::GetSimTelephoneNumber(int32_t slotId, std::u16string &telephoneNumber)
1494 {
1495     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1496         TELEPHONY_LOGE("Non-system applications use system APIs!");
1497         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1498     }
1499     if ((!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) &&
1500         (!TelephonyPermission::CheckPermission(Permission::GET_PHONE_NUMBERS))) {
1501         TELEPHONY_LOGE("permission denied!");
1502         return TELEPHONY_ERR_PERMISSION_ERR;
1503     }
1504     if (simManager_ == nullptr) {
1505         TELEPHONY_LOGE("simManager_ is null");
1506         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1507     }
1508     return simManager_->GetSimTelephoneNumber(slotId, telephoneNumber);
1509 }
1510 
GetSimTeleNumberIdentifier(const int32_t slotId)1511 std::u16string CoreService::GetSimTeleNumberIdentifier(const int32_t slotId)
1512 {
1513     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1514         TELEPHONY_LOGE("CoreService::GetSimTeleNumberIdentifier, Permission denied!");
1515         return std::u16string();
1516     }
1517     if (simManager_ == nullptr) {
1518         TELEPHONY_LOGE("simManager_ is null");
1519         return std::u16string();
1520     }
1521     return simManager_->GetSimTeleNumberIdentifier(slotId);
1522 }
1523 
GetVoiceMailIdentifier(int32_t slotId,std::u16string & voiceMailIdentifier)1524 int32_t CoreService::GetVoiceMailIdentifier(int32_t slotId, std::u16string &voiceMailIdentifier)
1525 {
1526     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1527         TELEPHONY_LOGE("Non-system applications use system APIs!");
1528         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1529     }
1530     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1531         TELEPHONY_LOGE("permission denied!");
1532         return TELEPHONY_ERR_PERMISSION_ERR;
1533     }
1534     if (simManager_ == nullptr) {
1535         TELEPHONY_LOGE("simManager_ is null");
1536         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1537     }
1538     return simManager_->GetVoiceMailIdentifier(slotId, voiceMailIdentifier);
1539 }
1540 
GetVoiceMailNumber(int32_t slotId,std::u16string & voiceMailNumber)1541 int32_t CoreService::GetVoiceMailNumber(int32_t slotId, std::u16string &voiceMailNumber)
1542 {
1543     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1544         TELEPHONY_LOGE("Non-system applications use system APIs!");
1545         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1546     }
1547     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1548         TELEPHONY_LOGE("permission denied!");
1549         return TELEPHONY_ERR_PERMISSION_ERR;
1550     }
1551     if (simManager_ == nullptr) {
1552         TELEPHONY_LOGE("simManager_ is null");
1553         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1554     }
1555     return simManager_->GetVoiceMailNumber(slotId, voiceMailNumber);
1556 }
1557 
GetVoiceMailCount(int32_t slotId,int32_t & voiceMailCount)1558 int32_t CoreService::GetVoiceMailCount(int32_t slotId, int32_t &voiceMailCount)
1559 {
1560     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1561         TELEPHONY_LOGE("Non-system applications use system APIs!");
1562         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1563     }
1564     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1565         TELEPHONY_LOGE("permission denied!");
1566         return TELEPHONY_ERR_PERMISSION_ERR;
1567     }
1568     TELEPHONY_LOGI("CoreService::GetVoiceMailCount(), slotId = %{public}d", slotId);
1569     if (simManager_ == nullptr) {
1570         TELEPHONY_LOGE("simManager_ is null");
1571         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1572     }
1573     return simManager_->GetVoiceMailCount(slotId, voiceMailCount);
1574 }
1575 
SetVoiceMailCount(int32_t slotId,int32_t voiceMailCount)1576 int32_t CoreService::SetVoiceMailCount(int32_t slotId, int32_t voiceMailCount)
1577 {
1578     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1579         TELEPHONY_LOGE("permission denied!");
1580         return TELEPHONY_ERR_PERMISSION_ERR;
1581     }
1582     TELEPHONY_LOGI("CoreService::SetVoiceMailCount(), slotId = %{public}d", slotId);
1583     if (simManager_ == nullptr) {
1584         TELEPHONY_LOGE("simManager_ is null");
1585         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1586     }
1587     return simManager_->SetVoiceMailCount(slotId, voiceMailCount);
1588 }
1589 
SetVoiceCallForwarding(int32_t slotId,bool enable,const std::string & number)1590 int32_t CoreService::SetVoiceCallForwarding(int32_t slotId, bool enable, const std::string &number)
1591 {
1592     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1593         TELEPHONY_LOGE("permission denied!");
1594         return TELEPHONY_ERR_PERMISSION_ERR;
1595     }
1596     TELEPHONY_LOGI("CoreService::SetVoiceCallForwarding(), slotId = %{public}d", slotId);
1597     if (simManager_ == nullptr) {
1598         TELEPHONY_LOGE("simManager_ is null");
1599         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1600     }
1601     return simManager_->SetVoiceCallForwarding(slotId, enable, number);
1602 }
1603 
QueryIccDiallingNumbers(int slotId,int type,std::vector<std::shared_ptr<DiallingNumbersInfo>> & reslut)1604 int32_t CoreService::QueryIccDiallingNumbers(
1605     int slotId, int type, std::vector<std::shared_ptr<DiallingNumbersInfo>> &reslut)
1606 {
1607     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1608         TELEPHONY_LOGE("Non-system applications use system APIs!");
1609         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1610     }
1611     if (!TelephonyPermission::CheckPermission(Permission::READ_CONTACTS)) {
1612         TELEPHONY_LOGE("permission denied!");
1613         return TELEPHONY_ERR_PERMISSION_ERR;
1614     }
1615     if (simManager_ == nullptr) {
1616         TELEPHONY_LOGE("simManager_ is null");
1617         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1618     }
1619     return simManager_->QueryIccDiallingNumbers(slotId, type, reslut);
1620 }
1621 
AddIccDiallingNumbers(int slotId,int type,const std::shared_ptr<DiallingNumbersInfo> & diallingNumber)1622 int32_t CoreService::AddIccDiallingNumbers(
1623     int slotId, int type, const std::shared_ptr<DiallingNumbersInfo> &diallingNumber)
1624 {
1625     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1626         TELEPHONY_LOGE("Non-system applications use system APIs!");
1627         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1628     }
1629     if (!TelephonyPermission::CheckPermission(Permission::WRITE_CONTACTS)) {
1630         TELEPHONY_LOGE("permission denied!");
1631         return TELEPHONY_ERR_PERMISSION_ERR;
1632     }
1633     if (simManager_ == nullptr) {
1634         TELEPHONY_LOGE("simManager_ is null");
1635         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1636     }
1637     return simManager_->AddIccDiallingNumbers(slotId, type, diallingNumber);
1638 }
1639 
DelIccDiallingNumbers(int slotId,int type,const std::shared_ptr<DiallingNumbersInfo> & diallingNumber)1640 int32_t CoreService::DelIccDiallingNumbers(
1641     int slotId, int type, const std::shared_ptr<DiallingNumbersInfo> &diallingNumber)
1642 {
1643     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1644         TELEPHONY_LOGE("Non-system applications use system APIs!");
1645         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1646     }
1647     if (!TelephonyPermission::CheckPermission(Permission::WRITE_CONTACTS)) {
1648         TELEPHONY_LOGE("permission denied!");
1649         return TELEPHONY_ERR_PERMISSION_ERR;
1650     }
1651     if (simManager_ == nullptr) {
1652         TELEPHONY_LOGE("simManager_ is null");
1653         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1654     }
1655     return simManager_->DelIccDiallingNumbers(slotId, type, diallingNumber);
1656 }
1657 
UpdateIccDiallingNumbers(int slotId,int type,const std::shared_ptr<DiallingNumbersInfo> & diallingNumber)1658 int32_t CoreService::UpdateIccDiallingNumbers(
1659     int slotId, int type, const std::shared_ptr<DiallingNumbersInfo> &diallingNumber)
1660 {
1661     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1662         TELEPHONY_LOGE("Non-system applications use system APIs!");
1663         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1664     }
1665     if (!TelephonyPermission::CheckPermission(Permission::WRITE_CONTACTS)) {
1666         TELEPHONY_LOGE("permission denied!");
1667         return TELEPHONY_ERR_PERMISSION_ERR;
1668     }
1669     if (simManager_ == nullptr) {
1670         TELEPHONY_LOGE("simManager_ is null");
1671         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1672     }
1673     return simManager_->UpdateIccDiallingNumbers(slotId, type, diallingNumber);
1674 }
1675 
SetVoiceMailInfo(const int32_t slotId,const std::u16string & mailName,const std::u16string & mailNumber)1676 int32_t CoreService::SetVoiceMailInfo(
1677     const int32_t slotId, const std::u16string &mailName, const std::u16string &mailNumber)
1678 {
1679     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1680         TELEPHONY_LOGE("Non-system applications use system APIs!");
1681         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1682     }
1683     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1684         TELEPHONY_LOGE("permission denied!");
1685         return TELEPHONY_ERR_PERMISSION_ERR;
1686     }
1687     if (simManager_ == nullptr) {
1688         TELEPHONY_LOGE("simManager_ is null");
1689         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1690     }
1691     return simManager_->SetVoiceMailInfo(slotId, mailName, mailNumber);
1692 }
1693 
GetMaxSimCount()1694 int32_t CoreService::GetMaxSimCount()
1695 {
1696     return SIM_SLOT_COUNT;
1697 }
1698 
GetOpKey(int32_t slotId,std::u16string & opkey)1699 int32_t CoreService::GetOpKey(int32_t slotId, std::u16string &opkey)
1700 {
1701     if (simManager_ == nullptr) {
1702         TELEPHONY_LOGE("simManager_ is null");
1703         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1704     }
1705     return simManager_->GetOpKey(slotId, opkey);
1706 }
1707 
GetOpKeyExt(int32_t slotId,std::u16string & opkeyExt)1708 int32_t CoreService::GetOpKeyExt(int32_t slotId, std::u16string &opkeyExt)
1709 {
1710     if (simManager_ == nullptr) {
1711         TELEPHONY_LOGE("simManager_ is null");
1712         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1713     }
1714     return simManager_->GetOpKeyExt(slotId, opkeyExt);
1715 }
1716 
GetOpName(int32_t slotId,std::u16string & opname)1717 int32_t CoreService::GetOpName(int32_t slotId, std::u16string &opname)
1718 {
1719     if (simManager_ == nullptr) {
1720         TELEPHONY_LOGE("simManager_ is null");
1721         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1722     }
1723     return simManager_->GetOpName(slotId, opname);
1724 }
1725 
SendEnvelopeCmd(int32_t slotId,const std::string & cmd)1726 int32_t CoreService::SendEnvelopeCmd(int32_t slotId, const std::string &cmd)
1727 {
1728     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1729         TELEPHONY_LOGE("Non-system applications use system APIs!");
1730         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1731     }
1732     if (simManager_ == nullptr) {
1733         TELEPHONY_LOGE("CoreService::SendEnvelopeCmd simManager_ is nullptr");
1734         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1735     }
1736     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1737         TELEPHONY_LOGE("CoreService::SendEnvelopeCmd, Permission denied!");
1738         return TELEPHONY_ERR_PERMISSION_ERR;
1739     }
1740     return simManager_->SendEnvelopeCmd(slotId, cmd);
1741 }
1742 
SendTerminalResponseCmd(int32_t slotId,const std::string & cmd)1743 int32_t CoreService::SendTerminalResponseCmd(int32_t slotId, const std::string &cmd)
1744 {
1745     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1746         TELEPHONY_LOGE("Non-system applications use system APIs!");
1747         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1748     }
1749     if (simManager_ == nullptr) {
1750         TELEPHONY_LOGE("CoreService::SendEnvelopeCmd simManager_ is nullptr");
1751         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1752     }
1753     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1754         TELEPHONY_LOGE("CoreService::SendTerminalResponseCmd, Permission denied!");
1755         return TELEPHONY_ERR_PERMISSION_ERR;
1756     }
1757     return simManager_->SendTerminalResponseCmd(slotId, cmd);
1758 }
1759 
SendCallSetupRequestResult(int32_t slotId,bool accept)1760 int32_t CoreService::SendCallSetupRequestResult(int32_t slotId, bool accept)
1761 {
1762     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1763         TELEPHONY_LOGE("Non-system applications use system APIs!");
1764         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1765     }
1766     if (simManager_ == nullptr) {
1767         TELEPHONY_LOGE("CoreService::SendEnvelopeCmd simManager_ is nullptr");
1768         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1769     }
1770     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1771         TELEPHONY_LOGE("CoreService::SendCallSetupRequestResult, Permission denied!");
1772         return TELEPHONY_ERR_PERMISSION_ERR;
1773     }
1774     return simManager_->SendCallSetupRequestResult(slotId, accept);
1775 }
1776 
UnlockSimLock(int32_t slotId,const PersoLockInfo & lockInfo,LockStatusResponse & response)1777 int32_t CoreService::UnlockSimLock(int32_t slotId, const PersoLockInfo &lockInfo, LockStatusResponse &response)
1778 {
1779     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1780         TELEPHONY_LOGE("Non-system applications use system APIs!");
1781         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1782     }
1783     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1784         TELEPHONY_LOGE("permission denied!");
1785         return TELEPHONY_ERR_PERMISSION_ERR;
1786     }
1787     TELEPHONY_LOGI(
1788         "CoreService::UnlockSimLock(), lockType = %{public}d, slotId = %{public}d", lockInfo.lockType, slotId);
1789     if (simManager_ == nullptr) {
1790         TELEPHONY_LOGE("simManager_ is null");
1791         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1792     }
1793     return simManager_->UnlockSimLock(slotId, lockInfo, response);
1794 }
1795 
GetImsRegStatus(int32_t slotId,ImsServiceType imsSrvType,ImsRegInfo & info)1796 int32_t CoreService::GetImsRegStatus(int32_t slotId, ImsServiceType imsSrvType, ImsRegInfo &info)
1797 {
1798     TELEPHONY_LOGI("CoreService::GetImsRegStatus --> slotId:%{public}d, imsSrvType:%{public}d", slotId, imsSrvType);
1799     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1800         TELEPHONY_LOGE("Non-system applications use system APIs!");
1801         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1802     }
1803     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1804         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
1805         return TELEPHONY_ERR_PERMISSION_ERR;
1806     }
1807     if (networkSearchManager_ == nullptr) {
1808         TELEPHONY_LOGE("failed! network search manager is nullptr!");
1809         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1810     }
1811     return networkSearchManager_->GetImsRegStatus(slotId, imsSrvType, info);
1812 }
1813 
GetCellInfoList(int32_t slotId,std::vector<sptr<CellInformation>> & cellInfo)1814 int32_t CoreService::GetCellInfoList(int32_t slotId, std::vector<sptr<CellInformation>> &cellInfo)
1815 {
1816     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1817         TELEPHONY_LOGE("Non-system applications use system APIs!");
1818         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1819     }
1820     if (!TelephonyPermission::CheckPermission(Permission::CELL_LOCATION)) {
1821         return TELEPHONY_ERR_PERMISSION_ERR;
1822     }
1823     if (networkSearchManager_ == nullptr) {
1824         TELEPHONY_LOGE("networkSearchManager_ is null");
1825         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1826     }
1827     return networkSearchManager_->GetCellInfoList(slotId, cellInfo);
1828 }
1829 
GetNeighboringCellInfoList(int32_t slotId,std::vector<sptr<CellInformation>> & cellInfo)1830 int32_t CoreService::GetNeighboringCellInfoList(int32_t slotId, std::vector<sptr<CellInformation>> &cellInfo)
1831 {
1832     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1833         TELEPHONY_LOGE("Non-system applications use system APIs!");
1834         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1835     }
1836     if (!TelephonyPermission::CheckPermission(Permission::CELL_LOCATION)) {
1837         return TELEPHONY_ERR_PERMISSION_ERR;
1838     }
1839     if (networkSearchManager_ == nullptr) {
1840         TELEPHONY_LOGE("networkSearchManager_ is null");
1841         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1842     }
1843     return networkSearchManager_->GetNeighboringCellInfoList(slotId, cellInfo);
1844 }
1845 
SendUpdateCellLocationRequest(int32_t slotId)1846 int32_t CoreService::SendUpdateCellLocationRequest(int32_t slotId)
1847 {
1848     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1849         TELEPHONY_LOGE("Non-system applications use system APIs!");
1850         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1851     }
1852     if (!TelephonyPermission::CheckPermission(Permission::CELL_LOCATION)) {
1853         TELEPHONY_LOGE("CoreService::SendUpdateCellLocationRequest, Permission denied!");
1854         return TELEPHONY_ERR_PERMISSION_ERR;
1855     }
1856     if (networkSearchManager_ == nullptr) {
1857         TELEPHONY_LOGE("networkSearchManager_ is null");
1858         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1859     }
1860     return networkSearchManager_->SendUpdateCellLocationRequest(slotId);
1861 }
1862 
HasOperatorPrivileges(const int32_t slotId,const sptr<IRawParcelCallback> & callback)1863 int32_t CoreService::HasOperatorPrivileges(const int32_t slotId, const sptr<IRawParcelCallback> &callback)
1864 {
1865     if (simManager_ == nullptr) {
1866         TELEPHONY_LOGE("simManager_ is null");
1867         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1868     }
1869     if (callback == nullptr) {
1870         TELEPHONY_LOGE("HasOperatorPrivileges no callback");
1871         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1872     }
1873     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
1874         bool hasOperatorPrivileges = false;
1875         MessageParcel dataTmp;
1876         auto simManager = wp.lock();
1877         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1878         if (simManager) {
1879             ret = simManager->HasOperatorPrivileges(slotId, hasOperatorPrivileges);
1880         }
1881         callback->Transfer([=](MessageParcel &data) {
1882             data.WriteInt32(ret);
1883             if (ret == TELEPHONY_ERR_SUCCESS) {
1884                 data.WriteBool(hasOperatorPrivileges);
1885             }
1886             }, dataTmp);
1887     });
1888     return TELEPHONY_ERR_SUCCESS;
1889 }
1890 
SimAuthentication(int32_t slotId,AuthType authType,const std::string & authData,SimAuthenticationResponse & response)1891 int32_t CoreService::SimAuthentication(
1892     int32_t slotId, AuthType authType, const std::string &authData, SimAuthenticationResponse &response)
1893 {
1894     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1895         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
1896         return TELEPHONY_ERR_PERMISSION_ERR;
1897     }
1898     if (simManager_ == nullptr) {
1899         TELEPHONY_LOGE("simManager_ is null");
1900         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1901     }
1902     return simManager_->SimAuthentication(slotId, authType, authData, response);
1903 }
1904 
RegisterImsRegInfoCallback(int32_t slotId,ImsServiceType imsSrvType,const sptr<ImsRegInfoCallback> & callback)1905 int32_t CoreService::RegisterImsRegInfoCallback(
1906     int32_t slotId, ImsServiceType imsSrvType, const sptr<ImsRegInfoCallback> &callback)
1907 {
1908     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1909         TELEPHONY_LOGE("Non-system applications use system APIs!");
1910         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1911     }
1912     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1913         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
1914         return TELEPHONY_ERR_PERMISSION_ERR;
1915     }
1916     if (networkSearchManager_ == nullptr) {
1917         TELEPHONY_LOGE("failed! network search manager is nullptr!");
1918         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1919     }
1920     return networkSearchManager_->RegisterImsRegInfoCallback(slotId, imsSrvType, GetTokenID(), callback);
1921 }
1922 
UnregisterImsRegInfoCallback(int32_t slotId,ImsServiceType imsSrvType)1923 int32_t CoreService::UnregisterImsRegInfoCallback(int32_t slotId, ImsServiceType imsSrvType)
1924 {
1925     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1926         TELEPHONY_LOGE("Non-system applications use system APIs!");
1927         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1928     }
1929     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1930         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
1931         return TELEPHONY_ERR_PERMISSION_ERR;
1932     }
1933     if (networkSearchManager_ == nullptr) {
1934         TELEPHONY_LOGE("failed! network search manager is nullptr!");
1935         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1936     }
1937     return networkSearchManager_->UnregisterImsRegInfoCallback(slotId, imsSrvType, GetTokenID());
1938 }
1939 
GetBasebandVersion(int32_t slotId,std::string & version)1940 int32_t CoreService::GetBasebandVersion(int32_t slotId, std::string &version)
1941 {
1942     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1943         TELEPHONY_LOGE("Non-system applications use system APIs!");
1944         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1945     }
1946     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1947         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
1948         return TELEPHONY_ERR_PERMISSION_ERR;
1949     }
1950     if (networkSearchManager_ == nullptr) {
1951         TELEPHONY_LOGE("networkSearchManager_ is null");
1952         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1953     }
1954     return networkSearchManager_->GetBasebandVersion(slotId, version);
1955 }
1956 
FactoryReset(int32_t slotId)1957 int32_t CoreService::FactoryReset(int32_t slotId)
1958 {
1959     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1960         TELEPHONY_LOGE("Non-system applications use system APIs!");
1961         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1962     }
1963     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
1964         TELEPHONY_LOGE("Permission denied!");
1965         return TELEPHONY_ERR_PERMISSION_ERR;
1966     }
1967     if (networkSearchManager_ == nullptr) {
1968         TELEPHONY_LOGE("networkSearchManager_ is null");
1969         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1970     }
1971     return networkSearchManager_->FactoryReset(slotId);
1972 }
1973 
Dump(std::int32_t fd,const std::vector<std::u16string> & args)1974 int32_t CoreService::Dump(std::int32_t fd, const std::vector<std::u16string> &args)
1975 {
1976     if (fd < 0) {
1977         TELEPHONY_LOGE("dump fd invalid");
1978         return TELEPHONY_ERR_ARGUMENT_INVALID;
1979     }
1980     std::vector<std::string> argsInStr;
1981     for (const auto &arg : args) {
1982         TELEPHONY_LOGI("Dump args: %s", Str16ToStr8(arg).c_str());
1983         argsInStr.emplace_back(Str16ToStr8(arg));
1984     }
1985     std::string result;
1986     CoreServiceDumpHelper dumpHelper;
1987     if (dumpHelper.Dump(argsInStr, result)) {
1988         TELEPHONY_LOGI("%s", result.c_str());
1989         std::int32_t ret = dprintf(fd, "%s", result.c_str());
1990         if (ret < 0) {
1991             TELEPHONY_LOGE("dprintf to dump fd failed");
1992             return TELEPHONY_ERROR;
1993         }
1994         return 0;
1995     }
1996     TELEPHONY_LOGW("dumpHelper failed");
1997     return TELEPHONY_ERROR;
1998 }
1999 
GetBindTime()2000 int64_t CoreService::GetBindTime()
2001 {
2002     return bindTime_;
2003 }
2004 
GetEndTime()2005 int64_t CoreService::GetEndTime()
2006 {
2007     return endTime_;
2008 }
2009 
GetSpendTime()2010 int64_t CoreService::GetSpendTime()
2011 {
2012     return endTime_ - bindTime_;
2013 }
2014 
GetNrSsbIdInfo(int32_t slotId,const std::shared_ptr<NrSsbInformation> & nrSsbInformation)2015 int32_t CoreService::GetNrSsbIdInfo(int32_t slotId, const std::shared_ptr<NrSsbInformation> &nrSsbInformation)
2016 {
2017     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
2018         TELEPHONY_LOGE("Non-system applications use system APIs!");
2019         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
2020     }
2021     if (!TelephonyPermission::CheckPermission(Permission::CELL_LOCATION)) {
2022         TELEPHONY_LOGE("Do not support Permission::CELL_LOCATION");
2023         return TELEPHONY_ERR_PERMISSION_ERR;
2024     }
2025     if (networkSearchManager_ == nullptr) {
2026         TELEPHONY_LOGE("networkSearchManager_ is null");
2027         return TELEPHONY_ERR_LOCAL_PTR_NULL;
2028     }
2029     return networkSearchManager_->GetNrSsbId(slotId, nrSsbInformation);
2030 }
2031 
IsAllowedInsertApn(std::string & value)2032 bool CoreService::IsAllowedInsertApn(std::string &value)
2033 {
2034     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
2035         TELEPHONY_LOGE("Non-system applications use system APIs!");
2036         return true;
2037     }
2038     if (TELEPHONY_EXT_WRAPPER.isAllowedInsertApn_ != nullptr) {
2039         return TELEPHONY_EXT_WRAPPER.isAllowedInsertApn_(value);
2040     }
2041     return true;
2042 }
2043 
GetTargetOpkey(int32_t slotId,std::u16string & opkey)2044 int32_t CoreService::GetTargetOpkey(int32_t slotId, std::u16string &opkey)
2045 {
2046     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
2047         TELEPHONY_LOGE("Non-system applications use system APIs!");
2048         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
2049     }
2050     if (TELEPHONY_EXT_WRAPPER.getTargetOpkey_ != nullptr) {
2051         TELEPHONY_EXT_WRAPPER.getTargetOpkey_(slotId, opkey);
2052     }
2053     return TELEPHONY_ERR_SUCCESS;
2054 }
2055 
GetOpkeyVersion(std::string & versionInfo)2056 int32_t CoreService::GetOpkeyVersion(std::string &versionInfo)
2057 {
2058     if (TELEPHONY_EXT_WRAPPER.getOpkeyVersion_ != nullptr) {
2059         TELEPHONY_EXT_WRAPPER.getOpkeyVersion_(versionInfo);
2060         return TELEPHONY_ERR_SUCCESS;
2061     }
2062     return TELEPHONY_ERR_LOCAL_PTR_NULL;
2063 }
2064 
GetOpnameVersion(std::string & versionInfo)2065 int32_t CoreService::GetOpnameVersion(std::string &versionInfo)
2066 {
2067     if (TELEPHONY_EXT_WRAPPER.getOpnameVersion_ != nullptr) {
2068         TELEPHONY_EXT_WRAPPER.getOpnameVersion_(versionInfo);
2069         return TELEPHONY_ERR_SUCCESS;
2070     }
2071     return TELEPHONY_ERR_LOCAL_PTR_NULL;
2072 }
2073 
GetSimIO(int32_t slotId,int32_t command,int32_t fileId,const std::string & data,const std::string & path,SimAuthenticationResponse & response)2074 int32_t CoreService::GetSimIO(int32_t slotId, int32_t command,
2075     int32_t fileId, const std::string &data, const std::string &path, SimAuthenticationResponse &response)
2076 {
2077     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
2078         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
2079         return TELEPHONY_ERR_PERMISSION_ERR;
2080     }
2081     if (simManager_ == nullptr) {
2082         TELEPHONY_LOGE("simManager_ is null");
2083         return TELEPHONY_ERR_LOCAL_PTR_NULL;
2084     }
2085     return simManager_->GetSimIO(slotId, command, fileId, data, path, response);
2086 }
2087 
GetAllSimAccountInfoList(std::vector<IccAccountInfo> & iccAccountInfoList)2088 int32_t CoreService::GetAllSimAccountInfoList(std::vector<IccAccountInfo> &iccAccountInfoList)
2089 {
2090     bool denied = false;
2091     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
2092         TELEPHONY_LOGE("permission denied!");
2093         denied = true;
2094     }
2095     if (simManager_ == nullptr) {
2096         TELEPHONY_LOGE("simManager_ is null");
2097         return TELEPHONY_ERR_LOCAL_PTR_NULL;
2098     }
2099     return simManager_->GetAllSimAccountInfoList(denied, iccAccountInfoList);
2100 }
2101 
GetSimLabel(int32_t slotId,SimLabel & simLabel,const sptr<IRawParcelCallback> & callback)2102 int32_t CoreService::GetSimLabel(int32_t slotId, SimLabel &simLabel, const sptr<IRawParcelCallback> &callback)
2103 {
2104     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
2105         TELEPHONY_LOGE("Non-system applications use system APIs!");
2106         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
2107     }
2108     if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
2109         TELEPHONY_LOGE("Failed because no permission:GET_TELEPHONY_STATE");
2110         return TELEPHONY_ERR_PERMISSION_ERR;
2111     }
2112     if (simManager_ == nullptr) {
2113         TELEPHONY_LOGE("simManager_ is null");
2114         return TELEPHONY_ERR_LOCAL_PTR_NULL;
2115     }
2116     AsyncSimGeneralExecute([wp = std::weak_ptr<ISimManager>(simManager_), slotId, callback]() {
2117         SimLabel simLabel;
2118         MessageParcel dataTmp;
2119         auto simManager = wp.lock();
2120         int32_t ret = TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2121         if (simManager) {
2122             ret = simManager->GetSimLabel(slotId, simLabel);
2123         }
2124         callback->Transfer([=](MessageParcel &data) {
2125             data.WriteInt32(ret);
2126             if (ret == TELEPHONY_ERR_SUCCESS) {
2127                 data.WriteInt32(static_cast<int32_t>(simLabel.simType));
2128                 data.WriteInt32(simLabel.index);
2129             }
2130             }, dataTmp);
2131     });
2132     return TELEPHONY_ERR_SUCCESS;
2133 }
2134 
SendApduData(int32_t slotId,const std::u16string & aid,const EsimApduData & apduData,ResponseEsimResult & responseResult)2135 int32_t CoreService::SendApduData(
2136     int32_t slotId, const std::u16string &aid, const EsimApduData &apduData, ResponseEsimResult &responseResult)
2137 {
2138     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
2139         TELEPHONY_LOGE("Non-system applications use system APIs!");
2140         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
2141     }
2142     if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_ESIM_STATE)) {
2143         TELEPHONY_LOGE("Failed because no permission:SET_TELEPHONY_ESIM_STATE");
2144         return TELEPHONY_ERR_PERMISSION_ERR;
2145     }
2146     if (esimManager_ == nullptr) {
2147         TELEPHONY_LOGE("esimManager_ is null");
2148         return TELEPHONY_ERR_LOCAL_PTR_NULL;
2149     }
2150     OHOS::Telephony::ResponseEsimInnerResult result;
2151     int32_t res = esimManager_->SendApduData(slotId, aid, apduData, result);
2152     responseResult.resultCode_ = static_cast<EsimResultCode>(result.resultCode_);
2153     responseResult.response_ = result.response_;
2154     responseResult.sw1_ = result.sw1_;
2155     responseResult.sw2_ = result.sw2_;
2156 
2157     return res;
2158 }
2159 } // namespace Telephony
2160 } // namespace OHOS
2161