1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "sim_file_manager.h"
17
18 #include <openssl/sha.h>
19 #include "core_manager_inner.h"
20 #include "network_state.h"
21 #include "parameters.h"
22 #include "radio_event.h"
23 #include "system_ability_definition.h"
24 #include "telephony_ext_wrapper.h"
25
26 namespace OHOS {
27 namespace Telephony {
28 static constexpr int32_t VM_NUMBER_LEN = 256;
29 constexpr const char *VM_NUMBER_SIM_IMSI_KEY = "persist.telephony.voicemail.simimsi";
30 const std::vector<std::string> CT_CPLMNS = { "46003", "46005", "46011", "46012", "47008", "45502", "45507", "46050",
31 "46051", "46059" };
32 const std::vector<std::string> CT_ICCID_ARRAY = { "898603", "898606", "898611", "8985302", "8985307" };
33 constexpr int32_t ICCID_LEN_MINIMUM = 7;
34 constexpr int32_t ICCID_LEN_SIX = 6;
35 constexpr int32_t PREFIX_LOCAL_ICCID_LEN = 4;
36 constexpr const char *GC_ICCID = "8985231";
37 constexpr const char *PREFIX_LOCAL_ICCID = "8986";
38 constexpr const char *ROAMING_CPLMN = "20404";
39
SimFileManager(const EventFwk::CommonEventSubscribeInfo & sp,std::weak_ptr<ITelRilManager> telRilManager,std::weak_ptr<Telephony::SimStateManager> state)40 SimFileManager::SimFileManager(
41 const EventFwk::CommonEventSubscribeInfo &sp, std::weak_ptr<ITelRilManager> telRilManager,
42 std::weak_ptr<Telephony::SimStateManager> state)
43 : TelEventHandler("SimFileManager"), CommonEventSubscriber(sp), telRilManager_(telRilManager),
44 simStateManager_(state)
45 {
46 if (simStateManager_.lock() == nullptr) {
47 TELEPHONY_LOGE("SimFileManager set NULL simStateManager.");
48 return;
49 }
50 TELEPHONY_LOGI("SIM manager SimFileManager::SimFileManager started ");
51 }
52
~SimFileManager()53 SimFileManager::~SimFileManager()
54 {
55 if (simFile_ != nullptr) {
56 simFile_->UnInit();
57 }
58 }
59
OnReceiveEvent(const EventFwk::CommonEventData & data)60 void SimFileManager::OnReceiveEvent(const EventFwk::CommonEventData &data)
61 {
62 const AAFwk::Want &want = data.GetWant();
63 std::string action = want.GetAction();
64 int32_t slotId = want.GetIntParam("slotId", 0);
65 TELEPHONY_LOGI("[slot%{public}d] action=%{public}s code=%{public}d", slotId, action.c_str(), data.GetCode());
66 if (EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED == action) {
67 if (slotId_ != slotId || simFile_ == nullptr) {
68 return;
69 }
70 TELEPHONY_LOGI("SimFileManager::OnReceiveEvent");
71 simFile_->LoadVoiceMail();
72 }
73 }
74
Init(int slotId)75 void SimFileManager::Init(int slotId)
76 {
77 TELEPHONY_LOGI("SimFileManager::Init() started slot %{public}d", slotId);
78 slotId_ = slotId;
79 if (stateRecord_ == HandleRunningState::STATE_RUNNING) {
80 TELEPHONY_LOGI("SimFileManager::Init stateRecord_ started.");
81 return;
82 }
83 if (stateHandler_ == HandleRunningState::STATE_RUNNING) {
84 TELEPHONY_LOGI("SimFileManager::Init stateHandler_ started.");
85 return;
86 }
87 auto telRilManager = telRilManager_.lock();
88 if (telRilManager == nullptr) {
89 TELEPHONY_LOGE("SimFileManager get NULL ITelRilManager.");
90 return;
91 }
92 auto simStateManager = simStateManager_.lock();
93 if (simStateManager == nullptr) {
94 TELEPHONY_LOGE("SimFileManager get NULL simStateManager.");
95 return;
96 }
97 CardType cardType = simStateManager->GetCardType();
98 TELEPHONY_LOGI("SimFileManager current card type is %{public}d", cardType);
99 if ((cardType == static_cast<CardType>(0)) || (cardType == CardType::UNKNOWN_CARD)) {
100 cardType = CardType::SINGLE_MODE_USIM_CARD; // default card
101 }
102 iccType_ = GetIccTypeByCardType(cardType);
103 TELEPHONY_LOGI("SimFileManager current icc type is %{public}d", iccType_);
104 if (!InitIccFileController(iccType_)) {
105 TELEPHONY_LOGE("SimFileManager::InitIccFileController fail");
106 return;
107 }
108 if (!InitDiallingNumberHandler()) {
109 TELEPHONY_LOGE("SimFileManager::InitDiallingNumberHandler fail");
110 return;
111 }
112 if (!InitSimFile(iccType_)) {
113 TELEPHONY_LOGE("SimFileManager::InitSimFile fail");
114 return;
115 }
116 stateRecord_ = HandleRunningState::STATE_RUNNING;
117 stateHandler_ = HandleRunningState::STATE_RUNNING;
118
119 simStateManager->RegisterCoreNotify(shared_from_this(), RadioEvent::RADIO_CARD_TYPE_CHANGE);
120 simStateManager->RegisterCoreNotify(shared_from_this(), RadioEvent::RADIO_SIM_ICCID_LOADED);
121 telRilManager->RegisterCoreNotify(slotId, shared_from_this(), RadioEvent::RADIO_VOICE_TECH_CHANGED, nullptr);
122 telRilManager->RegisterCoreNotify(slotId, shared_from_this(), RadioEvent::RADIO_ICC_REFRESH, nullptr);
123 TELEPHONY_LOGI("SimFileManager::Init() end");
124 }
125
InitSimFile(SimFileManager::IccType type)126 bool SimFileManager::InitSimFile(SimFileManager::IccType type)
127 {
128 if (fileController_ == nullptr || diallingNumberHandler_ == nullptr) {
129 TELEPHONY_LOGE("InitSimFile need more helper");
130 return false;
131 }
132 auto iccFileIt = iccFileCache_.find(type);
133 if (iccFileIt == iccFileCache_.end()) {
134 if (type == SimFileManager::IccType::ICC_TYPE_CDMA) {
135 simFile_ = std::make_shared<RuimFile>(simStateManager_.lock());
136 iccFileCache_.insert(std::make_pair(SimFileManager::IccType::ICC_TYPE_CDMA, simFile_));
137 } else if (type == SimFileManager::IccType::ICC_TYPE_IMS) {
138 simFile_ = std::make_shared<IsimFile>(simStateManager_.lock());
139 iccFileCache_.insert(std::make_pair(SimFileManager::IccType::ICC_TYPE_IMS, simFile_));
140 } else {
141 simFile_ = std::make_shared<SimFile>(simStateManager_.lock());
142 iccFileCache_.insert(std::make_pair(SimFileManager::IccType::ICC_TYPE_USIM, simFile_));
143 iccFileCache_.insert(std::make_pair(SimFileManager::IccType::ICC_TYPE_GSM, simFile_));
144 }
145 if (simFile_ != nullptr) {
146 #ifdef CORE_SERVICE_SUPPORT_ESIM
147 eSimFile_ = std::make_shared<EsimFile>(simStateManager_.lock());
148 #endif
149 simFile_->RegisterCoreNotify(shared_from_this(), RadioEvent::RADIO_SIM_RECORDS_LOADED);
150 }
151 } else {
152 simFile_ = iccFileIt->second;
153 }
154
155 if (simFile_ == nullptr) {
156 TELEPHONY_LOGE("SimFileManager::Init simFile create nullptr.");
157 return false;
158 }
159
160 #ifdef CORE_SERVICE_SUPPORT_ESIM
161 eSimFile_->SetRilAndFileController(telRilManager_.lock(), fileController_, diallingNumberHandler_);
162 #endif
163 simFile_->SetRilAndFileController(telRilManager_.lock(), fileController_, diallingNumberHandler_);
164 simFile_->SetId(slotId_);
165 simFile_->Init();
166 if (TELEPHONY_EXT_WRAPPER.createIccFileExt_ != nullptr) {
167 TELEPHONY_EXT_WRAPPER.createIccFileExt_(slotId_, simFile_);
168 }
169 return true;
170 }
171
InitIccFileController(SimFileManager::IccType type)172 bool SimFileManager::InitIccFileController(SimFileManager::IccType type)
173 {
174 auto iccFileConIt = iccFileControllerCache_.find(type);
175 if (iccFileConIt == iccFileControllerCache_.end()) {
176 if (type == SimFileManager::IccType::ICC_TYPE_CDMA) { // ruim 30 usim 20 isim 60
177 fileController_ = std::make_shared<RuimFileController>(slotId_);
178 } else if (type == SimFileManager::IccType::ICC_TYPE_IMS) {
179 fileController_ = std::make_shared<IsimFileController>(slotId_);
180 } else if (type == SimFileManager::IccType::ICC_TYPE_GSM) {
181 fileController_ = std::make_shared<SimFileController>(slotId_);
182 } else {
183 fileController_ = std::make_shared<UsimFileController>(slotId_);
184 }
185 iccFileControllerCache_.insert(std::make_pair(type, fileController_));
186 } else {
187 fileController_ = iccFileConIt->second;
188 }
189 if (fileController_ == nullptr) {
190 TELEPHONY_LOGE("SimFileManager::Init fileController create nullptr.");
191 return false;
192 }
193 fileController_->SetRilManager(telRilManager_.lock());
194 return true;
195 }
196
GetSimOperatorNumeric()197 std::u16string SimFileManager::GetSimOperatorNumeric()
198 {
199 if (simFile_ == nullptr) {
200 TELEPHONY_LOGE("SimFileManager::GetSimOperatorNumeric simFile nullptr");
201 return Str8ToStr16("");
202 }
203
204 std::string result = simFile_->ObtainSimOperator();
205 TELEPHONY_LOGD("SimFileManager::GetOperator result:%{public}s ", (result.empty() ? "false" : "true"));
206 return Str8ToStr16(result);
207 }
208
GetMCC()209 std::u16string SimFileManager::GetMCC()
210 {
211 if (simFile_ == nullptr) {
212 TELEPHONY_LOGE("SimFileManager::GetMCC simFile nullptr");
213 return Str8ToStr16("");
214 }
215
216 std::string result = simFile_->ObtainMCC();
217 TELEPHONY_LOGD("SimFileManager::GetMCC result:%{public}s ", (result.empty() ? "false" : "true"));
218 return Str8ToStr16(result);
219 }
220
GetMNC()221 std::u16string SimFileManager::GetMNC()
222 {
223 if (simFile_ == nullptr) {
224 TELEPHONY_LOGE("SimFileManager::GetMNC simFile nullptr");
225 return Str8ToStr16("");
226 }
227
228 std::string result = simFile_->ObtainMNC();
229 TELEPHONY_LOGD("SimFileManager::GetMNC result:%{public}s ", (result.empty() ? "false" : "true"));
230 return Str8ToStr16(result);
231 }
232
GetISOCountryCodeForSim()233 std::u16string SimFileManager::GetISOCountryCodeForSim()
234 {
235 if (simFile_ == nullptr) {
236 TELEPHONY_LOGE("SimFileManager::GetISOCountryCodeForSim simFile nullptr");
237 return Str8ToStr16("");
238 }
239
240 std::string result = simFile_->ObtainIsoCountryCode();
241 TELEPHONY_LOGD("SimFileManager::ObtainIsoCountryCode result:%{public}s ", (result.empty() ? "false" : "true"));
242 return Str8ToStr16(result);
243 }
244
GetSimSpn()245 std::u16string SimFileManager::GetSimSpn()
246 {
247 if (simFile_ == nullptr) {
248 TELEPHONY_LOGE("SimFileManager::GetSimSpn simFile nullptr");
249 return Str8ToStr16("");
250 }
251
252 std::string result = simFile_->ObtainSPN();
253 TELEPHONY_LOGD("SimFileManager::GetSimSpn result:%{public}s ", (result.empty() ? "false" : "true"));
254 return Str8ToStr16(result);
255 }
256
GetSimEons(const std::string & plmn,int32_t lac,bool longNameRequired)257 std::u16string SimFileManager::GetSimEons(const std::string &plmn, int32_t lac, bool longNameRequired)
258 {
259 if (simFile_ == nullptr) {
260 TELEPHONY_LOGE("SimFileManager::GetEons simFile nullptr");
261 return Str8ToStr16("");
262 }
263
264 std::string result = simFile_->ObtainEons(plmn, lac, longNameRequired);
265 TELEPHONY_LOGD("SimFileManager::GetEons result:%{public}s ", (result.empty() ? "false" : "true"));
266 return Str8ToStr16(result);
267 }
268
GetSimIccId()269 std::u16string SimFileManager::GetSimIccId()
270 {
271 auto simStateManager = simStateManager_.lock();
272 if (simStateManager == nullptr) {
273 TELEPHONY_LOGE("simStateManager nullptr");
274 return Str8ToStr16("");
275 }
276 std::string result = simStateManager->GetIccid();
277 if (!result.empty()) {
278 return Str8ToStr16(result);
279 }
280 if (simFile_ == nullptr) {
281 TELEPHONY_LOGE("SimFileManager::GetSimIccId simFile nullptr");
282 return Str8ToStr16("");
283 }
284 result = simFile_->ObtainIccId();
285 TELEPHONY_LOGD("SimFileManager::GetSimIccId result:%{public}s ", (result.empty() ? "false" : "true"));
286 return Str8ToStr16(result);
287 }
288
GetSimDecIccId()289 std::u16string SimFileManager::GetSimDecIccId()
290 {
291 if (simFile_ == nullptr) {
292 TELEPHONY_LOGE("simFile is nullptr!");
293 return Str8ToStr16("");
294 }
295
296 std::string result = simFile_->ObtainDecIccId();
297 TELEPHONY_LOGD("obtain dec iccId result:%{public}s ", (result.empty() ? "false" : "true"));
298 return Str8ToStr16(result);
299 }
300
GetIMSI()301 std::u16string SimFileManager::GetIMSI()
302 {
303 if (simFile_ == nullptr) {
304 TELEPHONY_LOGE("SimFileManager::GetIMSI simFile nullptr");
305 return Str8ToStr16("");
306 }
307
308 std::string result = simFile_->ObtainIMSI();
309 TELEPHONY_LOGD("SimFileManager::ObtainIMSI result:%{public}s ", (result.empty() ? "false" : "true"));
310 return Str8ToStr16(result);
311 }
312
GetLocaleFromDefaultSim()313 std::u16string SimFileManager::GetLocaleFromDefaultSim()
314 {
315 if (simFile_ == nullptr) {
316 TELEPHONY_LOGE("SimFileManager::GetLocaleFromDefaultSim simFile nullptr");
317 return Str8ToStr16("");
318 }
319
320 std::string result = simFile_->ObtainIccLanguage();
321 TELEPHONY_LOGD("SimFileManager::GetLocaleFromDefaultSim result:%{public}s ", (result.empty() ? "false" : "true"));
322 return Str8ToStr16(result);
323 }
324
GetSimGid1()325 std::u16string SimFileManager::GetSimGid1()
326 {
327 if (simFile_ == nullptr) {
328 TELEPHONY_LOGE("SimFileManager::GetSimGid1 simFile nullptr");
329 return Str8ToStr16("");
330 }
331
332 std::string result = simFile_->ObtainGid1();
333 TELEPHONY_LOGI("SimFileManager::GetSimGid1 result:%{public}s ", (result.empty() ? "false" : "true"));
334 return Str8ToStr16(result);
335 }
336
GetSimGid2()337 std::u16string SimFileManager::GetSimGid2()
338 {
339 if (simFile_ == nullptr) {
340 TELEPHONY_LOGE("SimFileManager::GetSimGid2 simFile nullptr");
341 return Str8ToStr16("");
342 }
343
344 std::string result = simFile_->ObtainGid2();
345 TELEPHONY_LOGI("SimFileManager::GetSimGid2 result:%{public}s ", (result.empty() ? "false" : "true"));
346 return Str8ToStr16(result);
347 }
348
GetSimTelephoneNumber()349 std::u16string SimFileManager::GetSimTelephoneNumber()
350 {
351 std::string result = "";
352 if (simFile_ != nullptr) {
353 result = simFile_->ObtainMsisdnNumber();
354 }
355 TELEPHONY_LOGD("result is empty:%{public}s", (result.empty() ? "true" : "false"));
356 return Str8ToStr16(result);
357 }
358
SetSimTelephoneNumber(const std::u16string & alphaTag,const std::u16string & phoneNumber)359 bool SimFileManager::SetSimTelephoneNumber(const std::u16string &alphaTag, const std::u16string &phoneNumber)
360 {
361 if (simFile_ == nullptr) {
362 TELEPHONY_LOGE("SimFileManager::SetSimTelephoneNumber simFile nullptr");
363 return false;
364 }
365 std::string tag = Str16ToStr8(alphaTag);
366 std::string number = Str16ToStr8(phoneNumber);
367 return simFile_->UpdateMsisdnNumber(tag, number);
368 }
369
GetSimTeleNumberIdentifier()370 std::u16string SimFileManager::GetSimTeleNumberIdentifier()
371 {
372 if (simFile_ == nullptr) {
373 TELEPHONY_LOGE("SimFileManager::GetSimTeleNumberIdentifier simFile nullptr");
374 return Str8ToStr16("");
375 }
376
377 std::string result = simFile_->ObtainMsisdnAlphaStatus();
378 TELEPHONY_LOGI(
379 "SimFileManager::GetSimTeleNumberIdentifier result:%{public}s ", (result.empty() ? "false" : "true"));
380 return Str8ToStr16(result);
381 }
382
GetVoiceMailIdentifier()383 std::u16string SimFileManager::GetVoiceMailIdentifier()
384 {
385 if (simFile_ == nullptr) {
386 TELEPHONY_LOGE("SimFileManager::GetVoiceMailIdentifier simFile nullptr");
387 return Str8ToStr16("");
388 }
389
390 std::string result = simFile_->ObtainVoiceMailInfo();
391 TELEPHONY_LOGI(
392 "SimFileManager::GetVoiceMailIdentifier result:%{public}s ", (result.empty() ? "false" : "true"));
393 return Str8ToStr16(result);
394 }
395
IsPhoneTypeGsm(int32_t slotId)396 bool SimFileManager::IsPhoneTypeGsm(int32_t slotId)
397 {
398 PhoneType phoneType = CoreManagerInner::GetInstance().GetPhoneType(slotId);
399 return phoneType == PhoneType::PHONE_TYPE_IS_GSM;
400 }
401
GetVoiceMailNumberCdmaKey()402 std::string SimFileManager::GetVoiceMailNumberCdmaKey()
403 {
404 std::string key = "";
405 char spNumber[VM_NUMBER_LEN] = {0};
406 std::string spName = VM_NUMBER_CDMA_KEY;
407 GetParameter(key.append(spName).append(std::to_string(slotId_)).c_str(), "", spNumber, VM_NUMBER_LEN);
408 return spNumber;
409 }
410
GetVoiceMailNumberKey()411 std::string SimFileManager::GetVoiceMailNumberKey()
412 {
413 std::string number = simFile_->GetVoiceMailNumber();
414 if (!number.empty()) {
415 return number;
416 }
417 if (TELEPHONY_EXT_WRAPPER.getVoiceMailIccidParameter_ != nullptr) {
418 std::string iccid = simFile_->ObtainIccId();
419 TELEPHONY_EXT_WRAPPER.getVoiceMailIccidParameter_(slotId_, iccid.c_str(), number);
420 if (!number.empty()) {
421 return number;
422 }
423 }
424 std::string key = "";
425 char spNumber[VM_NUMBER_LEN] = {0};
426 std::string spName = VM_NUMBER_KEY;
427 GetParameter(key.append(spName).append(std::to_string(slotId_)).c_str(), "", spNumber, VM_NUMBER_LEN);
428 return spNumber;
429 }
430
GetVoiceMailNumberFromParam()431 std::string SimFileManager::GetVoiceMailNumberFromParam()
432 {
433 std::string number = "";
434 if (IsPhoneTypeGsm(slotId_)) {
435 number = GetVoiceMailNumberKey();
436 } else {
437 number = GetVoiceMailNumberCdmaKey();
438 }
439 return number;
440 }
441
GetVoiceMailNumber()442 std::u16string SimFileManager::GetVoiceMailNumber()
443 {
444 if (simFile_ == nullptr) {
445 TELEPHONY_LOGE("SimFileManager::GetVoiceMailNumber simFile nullptr");
446 return Str8ToStr16("");
447 }
448
449 std::string result = GetVoiceMailNumberFromParam();
450 TELEPHONY_LOGI("SimFileManager::GetVoiceMailNumber result:%{public}s ", (result.empty() ? "false" : "true"));
451 return Str8ToStr16(result);
452 }
453
GetVoiceMailCount()454 int32_t SimFileManager::GetVoiceMailCount()
455 {
456 if (simFile_ == nullptr) {
457 TELEPHONY_LOGE("SimFileManager::GetVoiceMailCount simFile nullptr");
458 return UNKNOWN_VOICE_MAIL_COUNT;
459 }
460
461 return simFile_->ObtainVoiceMailCount();
462 }
463
SetVoiceMailCount(int32_t voiceMailCount)464 bool SimFileManager::SetVoiceMailCount(int32_t voiceMailCount)
465 {
466 if (simFile_ == nullptr) {
467 TELEPHONY_LOGE("SimFileManager::SetVoiceMailCount simFile nullptr");
468 return false;
469 }
470
471 return simFile_->SetVoiceMailCount(voiceMailCount);
472 }
473
SetVoiceCallForwarding(bool enable,const std::string & number)474 bool SimFileManager::SetVoiceCallForwarding(bool enable, const std::string &number)
475 {
476 if (simFile_ == nullptr) {
477 TELEPHONY_LOGE("SimFileManager::SetVoiceCallForwarding simFile nullptr");
478 return false;
479 }
480
481 return simFile_->SetVoiceCallForwarding(enable, number);
482 }
483
GetOpName()484 std::u16string SimFileManager::GetOpName()
485 {
486 return Str8ToStr16(opName_);
487 }
488
GetOpKey()489 std::u16string SimFileManager::GetOpKey()
490 {
491 return Str8ToStr16(opKey_);
492 }
493
GetOpKeyExt()494 std::u16string SimFileManager::GetOpKeyExt()
495 {
496 return Str8ToStr16(opKeyExt_);
497 }
498
SetOpName(const std::string & opName)499 void SimFileManager::SetOpName(const std::string &opName)
500 {
501 opName_ = opName;
502 }
503
SetOpKey(const std::string & opKey)504 void SimFileManager::SetOpKey(const std::string &opKey)
505 {
506 opKey_ = opKey;
507 }
508
SetOpKeyExt(const std::string & opKeyExt)509 void SimFileManager::SetOpKeyExt(const std::string &opKeyExt)
510 {
511 opKeyExt_ = opKeyExt;
512 }
513
ObtainSpnCondition(bool roaming,const std::string & operatorNum)514 int SimFileManager::ObtainSpnCondition(bool roaming, const std::string &operatorNum)
515 {
516 if (simFile_ == nullptr) {
517 TELEPHONY_LOGE("SimFileManager::ObtainSpnCondition simFile nullptr");
518 return 0;
519 }
520
521 int result = simFile_->ObtainSpnCondition(roaming, operatorNum);
522 TELEPHONY_LOGD("SimFileManager::ObtainSpnCondition:%{public}d", result);
523 return result;
524 }
525
GetIccFile()526 std::shared_ptr<IccFile> SimFileManager::GetIccFile()
527 {
528 return simFile_;
529 }
530
GetIccFileController()531 std::shared_ptr<IccFileController> SimFileManager::GetIccFileController()
532 {
533 return fileController_;
534 }
535
RegisterCoreNotify(const std::shared_ptr<AppExecFwk::EventHandler> & handler,int what)536 void SimFileManager::RegisterCoreNotify(const std::shared_ptr<AppExecFwk::EventHandler> &handler, int what)
537 {
538 auto simStateManager = simStateManager_.lock();
539 if (what == RadioEvent::RADIO_SIM_STATE_CHANGE && simStateManager != nullptr) {
540 simStateManager->RegisterCoreNotify(handler, what);
541 return;
542 }
543 if (simFile_ == nullptr) {
544 TELEPHONY_LOGE("SimFileManager::RegisterCoreNotify simFile nullptr");
545 return;
546 }
547 simFile_->RegisterCoreNotify(handler, what);
548 }
549
UnRegisterCoreNotify(const std::shared_ptr<AppExecFwk::EventHandler> & handler,int what)550 void SimFileManager::UnRegisterCoreNotify(const std::shared_ptr<AppExecFwk::EventHandler> &handler, int what)
551 {
552 auto simStateManager = simStateManager_.lock();
553 if (what == RadioEvent::RADIO_SIM_STATE_CHANGE && simStateManager != nullptr) {
554 simStateManager->UnRegisterCoreNotify(handler, what);
555 return;
556 }
557 if (simFile_ == nullptr) {
558 TELEPHONY_LOGE("SimFileManager::UnRegisterCoreNotify simFile nullptr");
559 return;
560 }
561 simFile_->UnRegisterCoreNotify(handler, what);
562 }
563
SetImsi(std::string imsi)564 void SimFileManager::SetImsi(std::string imsi)
565 {
566 if (simFile_ == nullptr) {
567 TELEPHONY_LOGE("SimFileManager::SetImsi simFile nullptr");
568 return;
569 }
570 simFile_->UpdateImsi(imsi);
571 }
572
SetVoiceMailParamGsm(const std::u16string mailNumber,bool isSavedIccRecords)573 void SimFileManager::SetVoiceMailParamGsm(const std::u16string mailNumber, bool isSavedIccRecords)
574 {
575 TELEPHONY_LOGI("SimFileManager::SetVoiceMailParamGsm, set gsm voice mail number");
576 std::string vmNumKey = "";
577 SetParameter(vmNumKey.append(VM_NUMBER_KEY).append(std::to_string(slotId_)).c_str(),
578 Str16ToStr8(mailNumber).c_str());
579 if (isSavedIccRecords) {
580 simFile_->SetVoiceMailNumber(Str16ToStr8(mailNumber));
581 }
582 if (TELEPHONY_EXT_WRAPPER.setVoiceMailIccidParameter_ != nullptr) {
583 std::string iccid = simFile_->ObtainIccId();
584 TELEPHONY_EXT_WRAPPER.setVoiceMailIccidParameter_(slotId_, iccid.c_str(), Str16ToStr8(mailNumber).c_str());
585 }
586 }
587
SetVoiceMailParamCdma(const std::u16string mailNumber)588 void SimFileManager::SetVoiceMailParamCdma(const std::u16string mailNumber)
589 {
590 TELEPHONY_LOGI("SimFileManager::SetVoiceMailParamGsm, set cdma voice mail number");
591 std::string vmNumKey = "";
592 SetParameter(vmNumKey.append(VM_NUMBER_CDMA_KEY).append(std::to_string(slotId_)).c_str(),
593 Str16ToStr8(mailNumber).c_str());
594 }
595
EncryptImsi(const std::string imsi)596 std::string SimFileManager::EncryptImsi(const std::string imsi)
597 {
598 if (imsi.empty()) {
599 return "";
600 }
601 unsigned char hash[SHA256_DIGEST_LENGTH];
602 SHA256_CTX sha256;
603 SHA256_Init(&sha256);
604 SHA256_Update(&sha256, imsi.c_str(), imsi.size());
605 SHA256_Final(hash, &sha256);
606 std::string encryptImsi = SIMUtils::BytesConvertToHexString(hash, SHA256_DIGEST_LENGTH);
607 return encryptImsi;
608 }
609
GetVoiceMailSimImsiFromParam()610 std::string SimFileManager::GetVoiceMailSimImsiFromParam()
611 {
612 std::string key = "";
613 char spNumber[VM_NUMBER_LEN] = {0};
614 GetParameter(key.append(VM_NUMBER_SIM_IMSI_KEY).append(std::to_string(slotId_)).c_str(), "",
615 spNumber, VM_NUMBER_LEN);
616 return spNumber;
617 }
618
SetVoiceMailSimImsiParam(std::string imsi)619 void SimFileManager::SetVoiceMailSimImsiParam(std::string imsi)
620 {
621 std::string encryptImsi = EncryptImsi(imsi);
622 std::string key = "";
623 SetParameter(key.append(VM_NUMBER_SIM_IMSI_KEY).append(std::to_string(slotId_)).c_str(), encryptImsi.c_str());
624 }
625
StoreVoiceMailNumber(const std::u16string mailNumber,bool isSavedIccRecords)626 void SimFileManager::StoreVoiceMailNumber(const std::u16string mailNumber, bool isSavedIccRecords)
627 {
628 std::string imsi = simFile_->ObtainIMSI();
629 SetVoiceMailSimImsiParam(imsi);
630 if (IsPhoneTypeGsm(slotId_)) {
631 SetVoiceMailParamGsm(mailNumber, isSavedIccRecords);
632 } else {
633 SetVoiceMailParamCdma(mailNumber);
634 }
635 }
636
SetVoiceMailInfo(const std::u16string & mailName,const std::u16string & mailNumber)637 bool SimFileManager::SetVoiceMailInfo(const std::u16string &mailName, const std::u16string &mailNumber)
638 {
639 if (simFile_ == nullptr || !HasSimCard()) {
640 TELEPHONY_LOGE("SimFileManager::SetVoiceMail simFile nullptr");
641 return false;
642 }
643 bool isVoiceMailFixed = simFile_->GetIsVoiceMailFixed();
644 if (isVoiceMailFixed) {
645 TELEPHONY_LOGE("SimFileManager::SetVoiceMailInfo, voice mail is fixed by cust, set fail");
646 return false;
647 }
648 StoreVoiceMailNumber(mailNumber, true);
649 std::string name = Str16ToStr8(mailName);
650 std::string number = Str16ToStr8(mailNumber);
651 bool result = simFile_->UpdateVoiceMail(name, number);
652 TELEPHONY_LOGI("SimFileManager::SetVoiceMail result:%{public}s ", (!result ? "false" : "true"));
653 return true;
654 }
655
HasSimCard()656 bool SimFileManager::HasSimCard()
657 {
658 auto simStateManager = simStateManager_.lock();
659 if (simStateManager == nullptr) {
660 TELEPHONY_LOGE("simStateManager nullptr");
661 return false;
662 }
663 bool result = simStateManager->HasSimCard();
664 TELEPHONY_LOGI("result:%{public}s ", (result ? "true" : "false"));
665 return result;
666 }
667
InitDiallingNumberHandler()668 bool SimFileManager::InitDiallingNumberHandler()
669 {
670 if (fileController_ == nullptr) {
671 TELEPHONY_LOGE("InitDiallingNumberHandler null fileController");
672 return false;
673 }
674 if (diallingNumberHandler_ != nullptr) {
675 TELEPHONY_LOGI("InitDiallingNumberHandler update fileController");
676 diallingNumberHandler_->UpdateFileController(fileController_);
677 return true;
678 }
679 diallingNumberHandler_ = std::make_shared<IccDiallingNumbersHandler>(fileController_);
680 if (diallingNumberHandler_ == nullptr) {
681 TELEPHONY_LOGE("SimFileManager failed to create IccDiallingNumbersHandler.");
682 return false;
683 }
684 return true;
685 }
686
UpdateOpkeyConfig()687 void SimFileManager::UpdateOpkeyConfig()
688 {
689 if (simFile_ != nullptr) {
690 simFile_->UpdateOpkeyConfig();
691 }
692 }
693
IsCTSimCard()694 bool SimFileManager::IsCTSimCard()
695 {
696 auto simStateManager = simStateManager_.lock();
697 if (simStateManager == nullptr) {
698 TELEPHONY_LOGE("simStateManager nullptr");
699 return false;
700 }
701 if (simFile_ == nullptr) {
702 TELEPHONY_LOGE("simFile nullptr");
703 return false;
704 }
705 CardType cardType = simStateManager->GetCardType();
706 bool isCTCardType = IsCTCardType(cardType);
707 std::string iccId = simFile_->ObtainIccId();
708 if (!iccId.empty() && iccId.length() >= ICCID_LEN_MINIMUM) {
709 iccId.resize(ICCID_LEN_MINIMUM);
710 }
711 if (isCTCardType && IsCTIccId(iccId)) {
712 TELEPHONY_LOGI("[slot%{public}d] result = 1", slotId_);
713 return true;
714 }
715 TELEPHONY_LOGD("[slot%{public}d] goto check plmn", slotId_);
716 bool result = false;
717 std::string plmn = simFile_->ObtainSimOperator();
718 if (!plmn.empty()) {
719 auto plmnRet = find(CT_CPLMNS.begin(), CT_CPLMNS.end(), plmn);
720 result = plmnRet != CT_CPLMNS.end();
721 TELEPHONY_LOGD("[slot%{public}d] plmn check result = %{public}d", slotId_, result);
722 }
723 if (!iccId.empty()) {
724 if (result) {
725 if (!iccId.compare(GC_ICCID)) {
726 result = false;
727 }
728 } else {
729 if (!plmn.compare(ROAMING_CPLMN) && IsCTIccId(iccId)) {
730 result = true;
731 }
732 }
733 }
734 TELEPHONY_LOGI("[slot%{public}d] result = %{public}d", slotId_, result);
735 return result;
736 }
737
IsCTCardType(CardType type)738 bool SimFileManager::IsCTCardType(CardType type)
739 {
740 bool isCTCardType = false;
741 switch (type) {
742 case CardType::SINGLE_MODE_RUIM_CARD:
743 case CardType::CT_NATIONAL_ROAMING_CARD:
744 case CardType::DUAL_MODE_TELECOM_LTE_CARD:
745 isCTCardType = true;
746 break;
747 default:
748 isCTCardType = false;
749 break;
750 }
751 return isCTCardType;
752 }
753
IsCTIccId(std::string iccId)754 bool SimFileManager::IsCTIccId(std::string iccId)
755 {
756 bool isCTIccId = false;
757 if (!iccId.empty() && iccId.length() >= ICCID_LEN_MINIMUM) {
758 if (iccId.compare(0, PREFIX_LOCAL_ICCID_LEN, PREFIX_LOCAL_ICCID) == 0) {
759 iccId.resize(ICCID_LEN_SIX);
760 }
761 auto iccIdRet = find(CT_ICCID_ARRAY.begin(), CT_ICCID_ARRAY.end(), iccId);
762 isCTIccId = iccIdRet != CT_ICCID_ARRAY.end();
763 }
764 return isCTIccId;
765 }
766
ObtainDiallingNumberHandler()767 std::shared_ptr<IccDiallingNumbersHandler> SimFileManager::ObtainDiallingNumberHandler()
768 {
769 return diallingNumberHandler_;
770 }
771
HandleVoiceTechChanged(std::shared_ptr<VoiceRadioTechnology> tech)772 void SimFileManager::HandleVoiceTechChanged(std::shared_ptr<VoiceRadioTechnology> tech)
773 {
774 TELEPHONY_LOGD("SimFileManager receive RADIO_VOICE_TECH_CHANGED");
775 if (tech == nullptr) {
776 TELEPHONY_LOGE("tech is nullptr!");
777 return;
778 }
779 auto simStateManager = simStateManager_.lock();
780 if (simStateManager == nullptr) {
781 TELEPHONY_LOGE("simStateManager is nullptr");
782 return;
783 }
784 SimFileManager::IccType iccType = GetIccTypeByTech(tech);
785 if (iccType == SimFileManager::IccType::ICC_TYPE_CDMA &&
786 simStateManager->GetCardType() == CardType::SINGLE_MODE_USIM_CARD) {
787 iccType = SimFileManager::IccType::ICC_TYPE_USIM;
788 TELEPHONY_LOGI("change iccType to USIM, slotId: %{public}d", slotId_);
789 }
790 ChangeSimFileByCardType(iccType);
791 }
792
HandleIccRefresh()793 void SimFileManager::HandleIccRefresh()
794 {
795 TELEPHONY_LOGI("handle sim refresh event, slotId: %{public}d", slotId_);
796 if (simFile_ == nullptr) {
797 TELEPHONY_LOGE("simFile_ is null");
798 return;
799 }
800 simFile_->ProcessIccRefresh(MSG_ID_DEFAULT);
801 }
802
HandleOperatorConfigChanged()803 void SimFileManager::HandleOperatorConfigChanged()
804 {
805 TELEPHONY_LOGI("handle operator config change event, slotId: %{public}d", slotId_);
806 if (simFile_ == nullptr) {
807 TELEPHONY_LOGE("simFile_ is null");
808 return;
809 }
810 simFile_->LoadVoiceMail();
811 }
812
HandleSimRecordsLoaded()813 void SimFileManager::HandleSimRecordsLoaded()
814 {
815 if (simFile_ == nullptr) {
816 TELEPHONY_LOGE("simFile_ is null");
817 return;
818 }
819
820 std::string imsiFromSim = simFile_->ObtainIMSI();
821 std::string encryptImsiFromSim = EncryptImsi(imsiFromSim);
822 std::string imsiFromParam = GetVoiceMailSimImsiFromParam();
823 if ((!IsPhoneTypeGsm(slotId_) || !imsiFromParam.empty()) &&
824 !encryptImsiFromSim.empty() && imsiFromParam != encryptImsiFromSim) {
825 std::string nullStr = "";
826 StoreVoiceMailNumber(Str8ToStr16(nullStr), false);
827 SetVoiceMailSimImsiParam(nullStr);
828 }
829 }
830
HandleSimIccidLoaded(std::string iccid)831 void SimFileManager::HandleSimIccidLoaded(std::string iccid)
832 {
833 if (simFile_ == nullptr) {
834 TELEPHONY_LOGE("simFile_ is null");
835 return;
836 }
837 simFile_->UpdateIccId(iccid);
838 }
839
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)840 void SimFileManager::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
841 {
842 if (event == nullptr) {
843 TELEPHONY_LOGE("event is nullptr!");
844 return;
845 }
846 uint32_t id = event->GetInnerEventId();
847 TELEPHONY_LOGD("SimFileManager::ProcessEvent id %{public}d", id);
848 auto simStateManager = simStateManager_.lock();
849 if (simStateManager == nullptr) {
850 TELEPHONY_LOGE("simStateManager is nullptr");
851 return;
852 }
853 switch (id) {
854 case RadioEvent::RADIO_VOICE_TECH_CHANGED: {
855 std::shared_ptr<VoiceRadioTechnology> tech = event->GetSharedObject<VoiceRadioTechnology>();
856 HandleVoiceTechChanged(tech);
857 break;
858 }
859 case RadioEvent::RADIO_CARD_TYPE_CHANGE: {
860 CardType cardType = simStateManager->GetCardType();
861 TELEPHONY_LOGI("getCardType is %{public}d, slotId: %{public}d", cardType, slotId_);
862 SimFileManager::IccType iccType = GetIccTypeByCardType(cardType);
863 ChangeSimFileByCardType(iccType);
864 break;
865 }
866 case RadioEvent::RADIO_SIM_RECORDS_LOADED: {
867 TELEPHONY_LOGI("handle sim records loaded event, slotId: %{public}d", slotId_);
868 HandleSimRecordsLoaded();
869 break;
870 }
871 case RadioEvent::RADIO_ICC_REFRESH: {
872 HandleIccRefresh();
873 break;
874 }
875 case RadioEvent::RADIO_SIM_ICCID_LOADED: {
876 TELEPHONY_LOGI("handle sim iccid load event, slotId: %{public}d", slotId_);
877 std::string iccid = simStateManager->GetIccid();
878 HandleSimIccidLoaded(iccid);
879 break;
880 }
881 case RadioEvent::RADIO_OPERATOR_CONFIG_CHANGED: {
882 HandleOperatorConfigChanged();
883 break;
884 }
885 default:
886 break;
887 }
888 }
889
CreateInstance(std::weak_ptr<ITelRilManager> ril,std::weak_ptr<SimStateManager> simState)890 std::shared_ptr<SimFileManager> SimFileManager::CreateInstance(
891 std::weak_ptr<ITelRilManager> ril, std::weak_ptr<SimStateManager> simState)
892 {
893 if (ril.lock() == nullptr) {
894 TELEPHONY_LOGE("rilmanager null pointer");
895 return nullptr;
896 }
897 if (simState.lock() == nullptr) {
898 TELEPHONY_LOGE("simState null pointer");
899 return nullptr;
900 }
901
902 EventFwk::MatchingSkills matchingSkills;
903 matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
904 EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills);
905 subscribeInfo.SetThreadMode(EventFwk::CommonEventSubscribeInfo::COMMON);
906
907 std::shared_ptr<SimFileManager> manager = std::make_shared<SimFileManager>(subscribeInfo, ril, simState);
908 if (manager == nullptr) {
909 TELEPHONY_LOGE("manager create nullptr.");
910 return nullptr;
911 }
912 TELEPHONY_LOGI("SimFileManager::CreateInstance success");
913 return manager;
914 }
915
ChangeSimFileByCardType(SimFileManager::IccType type)916 void SimFileManager::ChangeSimFileByCardType(SimFileManager::IccType type)
917 {
918 TELEPHONY_LOGI("SimFileManager new icc type:%{public}d, old icc type: %{public}d", type, iccType_);
919 if (!IsValidType(type)) {
920 TELEPHONY_LOGI("SimFileManager handle new icc invalid type received %{public}d", type);
921 return;
922 }
923 if (type == iccType_) {
924 TELEPHONY_LOGI("SimFileManager same type as ready");
925 return;
926 }
927 if (type != iccType_) {
928 TELEPHONY_LOGI("SimFileManager handle new icc type received %{public}d", type);
929 iccType_ = type;
930 if (simFile_ != nullptr) {
931 simFile_->UnInit();
932 }
933 InitIccFileController(type);
934 InitDiallingNumberHandler();
935 InitSimFile(type);
936 }
937 }
938
GetIccTypeByCardType(CardType type)939 SimFileManager::IccType SimFileManager::GetIccTypeByCardType(CardType type)
940 {
941 switch (type) {
942 case CardType::SINGLE_MODE_RUIM_CARD:
943 return SimFileManager::IccType::ICC_TYPE_CDMA;
944 case CardType::SINGLE_MODE_ISIM_CARD:
945 return SimFileManager::IccType::ICC_TYPE_IMS;
946 case CardType::SINGLE_MODE_SIM_CARD:
947 case CardType::DUAL_MODE_CG_CARD:
948 case CardType::CT_NATIONAL_ROAMING_CARD:
949 case CardType::CU_DUAL_MODE_CARD:
950 case CardType::DUAL_MODE_TELECOM_LTE_CARD:
951 case CardType::DUAL_MODE_UG_CARD:
952 return SimFileManager::IccType::ICC_TYPE_GSM;
953 default:
954 break;
955 }
956 return SimFileManager::IccType::ICC_TYPE_USIM;
957 }
958
GetIccTypeByTech(const std::shared_ptr<VoiceRadioTechnology> & tech)959 SimFileManager::IccType SimFileManager::GetIccTypeByTech(const std::shared_ptr<VoiceRadioTechnology> &tech)
960 {
961 if (tech == nullptr) {
962 TELEPHONY_LOGE("GetCardTypeByTech param tech is nullptr then ICC_TYPE_UNKNOW");
963 return SimFileManager::IccType::ICC_TYPE_USIM;
964 }
965 switch (tech->actType) {
966 case int32_t(RadioTech::RADIO_TECHNOLOGY_EHRPD):
967 case int32_t(RadioTech::RADIO_TECHNOLOGY_1XRTT):
968 return SimFileManager::IccType::ICC_TYPE_CDMA;
969 case int32_t(RadioTech::RADIO_TECHNOLOGY_LTE_CA):
970 case int32_t(RadioTech::RADIO_TECHNOLOGY_LTE):
971 case int32_t(RadioTech::RADIO_TECHNOLOGY_GSM):
972 case int32_t(RadioTech::RADIO_TECHNOLOGY_TD_SCDMA):
973 case int32_t(RadioTech::RADIO_TECHNOLOGY_HSPA):
974 case int32_t(RadioTech::RADIO_TECHNOLOGY_HSPAP):
975 default:
976 break;
977 }
978 return SimFileManager::IccType::ICC_TYPE_USIM;
979 }
980
IsValidType(SimFileManager::IccType type)981 bool SimFileManager::IsValidType(SimFileManager::IccType type)
982 {
983 switch (type) {
984 case SimFileManager::IccType::ICC_TYPE_CDMA:
985 case SimFileManager::IccType::ICC_TYPE_GSM:
986 case SimFileManager::IccType::ICC_TYPE_IMS:
987 case SimFileManager::IccType::ICC_TYPE_USIM:
988 return true;
989 default:
990 break;
991 }
992 return false;
993 }
994
GetSimIst()995 std::u16string SimFileManager::GetSimIst()
996 {
997 if (simFile_ == nullptr) {
998 TELEPHONY_LOGE("SimFileManager::GetSimIst simFile nullptr");
999 return Str8ToStr16("");
1000 }
1001 std::string result = static_cast<IsimFile *>(simFile_.get())->ObtainIsimIst();
1002 TELEPHONY_LOGI("SimFileManager::GetSimIst result:%{public}s ", (result.empty() ? "false" : "true"));
1003 return Str8ToStr16(result);
1004 }
1005
ClearData()1006 void SimFileManager::ClearData()
1007 {
1008 opName_ = "";
1009 opKey_ = "";
1010 opKeyExt_ = "";
1011 if (simFile_ == nullptr) {
1012 TELEPHONY_LOGE("SimFileManager::ClearData simFile nullptr");
1013 return;
1014 }
1015 simFile_->ClearData();
1016 }
1017
1018 #ifdef CORE_SERVICE_SUPPORT_ESIM
GetEsimfile()1019 std::shared_ptr<EsimFile> SimFileManager::GetEsimfile()
1020 {
1021 return eSimFile_;
1022 }
1023
GetEid()1024 std::u16string SimFileManager::GetEid()
1025 {
1026 if (eSimFile_ == nullptr) {
1027 TELEPHONY_LOGE("esimFile is nullptr");
1028 return Str8ToStr16("");
1029 }
1030 std::string result = eSimFile_->ObtainEid();
1031 return Str8ToStr16(result);
1032 }
1033
GetEuiccProfileInfoList()1034 GetEuiccProfileInfoListInnerResult SimFileManager::GetEuiccProfileInfoList()
1035 {
1036 if (eSimFile_ == nullptr) {
1037 TELEPHONY_LOGE("esimFile is nullptr");
1038 return GetEuiccProfileInfoListInnerResult();
1039 }
1040 return eSimFile_->GetEuiccProfileInfoList();
1041 }
1042
GetEuiccInfo()1043 EuiccInfo SimFileManager::GetEuiccInfo()
1044 {
1045 if (eSimFile_ == nullptr) {
1046 TELEPHONY_LOGE("simFile is nullptr");
1047 return EuiccInfo();
1048 }
1049 return eSimFile_->GetEuiccInfo();
1050 }
1051
DisableProfile(int32_t portIndex,const std::u16string & iccId)1052 int32_t SimFileManager::DisableProfile(int32_t portIndex, const std::u16string &iccId)
1053 {
1054 if (eSimFile_ == nullptr) {
1055 TELEPHONY_LOGE("esimFile is nullptr");
1056 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1057 }
1058 int32_t enumResult = eSimFile_->DisableProfile(portIndex, iccId);
1059 return enumResult;
1060 }
1061
GetSmdsAddress(int32_t portIndex)1062 std::u16string SimFileManager::GetSmdsAddress(int32_t portIndex)
1063 {
1064 if (eSimFile_ == nullptr) {
1065 TELEPHONY_LOGE("esimFile is nullptr");
1066 return Str8ToStr16("");
1067 }
1068 std::string result = eSimFile_->ObtainSmdsAddress(portIndex);
1069 return Str8ToStr16(result);
1070 }
1071
GetRulesAuthTable(int32_t portIndex)1072 EuiccRulesAuthTable SimFileManager::GetRulesAuthTable(int32_t portIndex)
1073 {
1074 if (eSimFile_ == nullptr) {
1075 TELEPHONY_LOGE("esimFile is nullptr");
1076 return EuiccRulesAuthTable();
1077 }
1078 EuiccRulesAuthTable result = eSimFile_->ObtainRulesAuthTable(portIndex);
1079 return result;
1080 }
1081
GetEuiccChallenge(int32_t portIndex)1082 ResponseEsimInnerResult SimFileManager::GetEuiccChallenge(int32_t portIndex)
1083 {
1084 if (eSimFile_ == nullptr) {
1085 TELEPHONY_LOGE("esimFile is nullptr");
1086 return ResponseEsimInnerResult();
1087 }
1088 ResponseEsimInnerResult result = eSimFile_->ObtainEuiccChallenge(portIndex);
1089 return result;
1090 }
1091
GetDefaultSmdpAddress()1092 std::u16string SimFileManager::GetDefaultSmdpAddress()
1093 {
1094 if (eSimFile_ == nullptr) {
1095 TELEPHONY_LOGE("esimFile is nullptr");
1096 return Str8ToStr16("");
1097 }
1098 std::string result = eSimFile_->ObtainDefaultSmdpAddress();
1099 return Str8ToStr16(result);
1100 }
1101
CancelSession(const std::u16string & transactionId,CancelReason cancelReason)1102 ResponseEsimInnerResult SimFileManager::CancelSession(const std::u16string &transactionId, CancelReason cancelReason)
1103 {
1104 if (eSimFile_ == nullptr) {
1105 TELEPHONY_LOGE("esimFile is nullptr");
1106 return ResponseEsimInnerResult();
1107 }
1108 ResponseEsimInnerResult result = eSimFile_->CancelSession(transactionId, cancelReason);
1109 return result;
1110 }
1111
GetProfile(int32_t portIndex,const std::u16string & iccId)1112 EuiccProfile SimFileManager::GetProfile(int32_t portIndex, const std::u16string &iccId)
1113 {
1114 if (eSimFile_ == nullptr) {
1115 TELEPHONY_LOGE("esimFile is nullptr");
1116 return EuiccProfile();
1117 }
1118 EuiccProfile result = eSimFile_->ObtainProfile(portIndex, iccId);
1119 return result;
1120 }
1121
ResetMemory(ResetOption resetOption)1122 int32_t SimFileManager::ResetMemory(ResetOption resetOption)
1123 {
1124 if (eSimFile_ == nullptr) {
1125 TELEPHONY_LOGE("esimFile nullptr");
1126 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1127 }
1128 int32_t result = eSimFile_->ResetMemory(resetOption);
1129 return result;
1130 }
1131
SetDefaultSmdpAddress(const std::u16string & defaultSmdpAddress)1132 int32_t SimFileManager::SetDefaultSmdpAddress(const std::u16string &defaultSmdpAddress)
1133 {
1134 if (eSimFile_ == nullptr) {
1135 TELEPHONY_LOGE("esimFile is nullptr");
1136 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1137 }
1138 int32_t result = eSimFile_->SetDefaultSmdpAddress(defaultSmdpAddress);
1139 return result;
1140 }
1141
IsSupported()1142 bool SimFileManager::IsSupported()
1143 {
1144 if (eSimFile_ == nullptr) {
1145 TELEPHONY_LOGE("esimFile is nullptr");
1146 return false;
1147 }
1148 bool result = eSimFile_->IsSupported();
1149 return result;
1150 }
1151
SendApduData(const std::u16string & aid,const EsimApduData & apduData)1152 ResponseEsimInnerResult SimFileManager::SendApduData(const std::u16string &aid, const EsimApduData &apduData)
1153 {
1154 if (eSimFile_ == nullptr) {
1155 TELEPHONY_LOGE("esimFile is nullptr");
1156 return ResponseEsimInnerResult();
1157 }
1158 ResponseEsimInnerResult result = eSimFile_->SendApduData(aid, apduData);
1159 return result;
1160 }
1161
PrepareDownload(const DownLoadConfigInfo & downLoadConfigInfo)1162 ResponseEsimInnerResult SimFileManager::PrepareDownload(const DownLoadConfigInfo &downLoadConfigInfo)
1163 {
1164 if (eSimFile_ == nullptr) {
1165 TELEPHONY_LOGE("eSimFile is nullptr");
1166 return ResponseEsimInnerResult();
1167 }
1168 ResponseEsimInnerResult result = eSimFile_->ObtainPrepareDownload(downLoadConfigInfo);
1169 return result;
1170 }
1171
LoadBoundProfilePackage(int32_t portIndex,const std::u16string & boundProfilePackage)1172 ResponseEsimBppResult SimFileManager::LoadBoundProfilePackage(
1173 int32_t portIndex, const std::u16string &boundProfilePackage)
1174 {
1175 if (eSimFile_ == nullptr) {
1176 TELEPHONY_LOGE("eSimFile is nullptr");
1177 return ResponseEsimBppResult();
1178 }
1179 ResponseEsimBppResult result = eSimFile_->ObtainLoadBoundProfilePackage(portIndex, boundProfilePackage);
1180 return result;
1181 }
1182
ListNotifications(int32_t portIndex,Event events)1183 EuiccNotificationList SimFileManager::ListNotifications(int32_t portIndex, Event events)
1184 {
1185 if (eSimFile_ == nullptr) {
1186 TELEPHONY_LOGE("eSimFile is nullptr");
1187 return EuiccNotificationList();
1188 }
1189 EuiccNotificationList result = eSimFile_->ListNotifications(portIndex, events);
1190 return result;
1191 }
1192
RetrieveNotificationList(int32_t portIndex,Event events)1193 EuiccNotificationList SimFileManager::RetrieveNotificationList(int32_t portIndex, Event events)
1194 {
1195 if (eSimFile_ == nullptr) {
1196 TELEPHONY_LOGE("RetrieveNotificationList eSimFile_ is nullptr");
1197 return EuiccNotificationList();
1198 }
1199 return eSimFile_->RetrieveNotificationList(portIndex, events);
1200 }
1201
RetrieveNotification(int32_t portIndex,int32_t seqNumber)1202 EuiccNotification SimFileManager::RetrieveNotification(int32_t portIndex, int32_t seqNumber)
1203 {
1204 if (eSimFile_ == nullptr) {
1205 TELEPHONY_LOGE("RetrieveNotification eSimFile_ is nullptr");
1206 return EuiccNotification();
1207 }
1208 return eSimFile_->ObtainRetrieveNotification(portIndex, seqNumber);
1209 }
1210
RemoveNotificationFromList(int32_t portIndex,int32_t seqNumber)1211 int32_t SimFileManager::RemoveNotificationFromList(int32_t portIndex, int32_t seqNumber)
1212 {
1213 if (eSimFile_ == nullptr) {
1214 TELEPHONY_LOGE("RemoveNotificationFromList eSimFile_ is nullptr");
1215 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1216 }
1217 return eSimFile_->RemoveNotificationFromList(portIndex, seqNumber);
1218 }
1219
DeleteProfile(const std::u16string & iccId)1220 int32_t SimFileManager::DeleteProfile(const std::u16string &iccId)
1221 {
1222 if (eSimFile_ == nullptr) {
1223 TELEPHONY_LOGE("esimFile is nullptr");
1224 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1225 }
1226 int32_t result = eSimFile_->DeleteProfile(iccId);
1227 return result;
1228 }
1229
SwitchToProfile(int32_t portIndex,const std::u16string & iccId,bool forceDisableProfile)1230 int32_t SimFileManager::SwitchToProfile(int32_t portIndex, const std::u16string &iccId, bool forceDisableProfile)
1231 {
1232 if (eSimFile_ == nullptr) {
1233 TELEPHONY_LOGE("esimFile is nullptr");
1234 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1235 }
1236 int32_t result = eSimFile_->SwitchToProfile(portIndex, iccId, forceDisableProfile);
1237 return result;
1238 }
1239
SetProfileNickname(const std::u16string & iccId,const std::u16string & nickname)1240 int32_t SimFileManager::SetProfileNickname(const std::u16string &iccId, const std::u16string &nickname)
1241 {
1242 if (eSimFile_ == nullptr) {
1243 TELEPHONY_LOGE("esimFile is nullptr");
1244 return static_cast<int32_t>(ResultCode::RESULT_SGP_22_OTHER);
1245 }
1246 int32_t result = eSimFile_->SetProfileNickname(iccId, nickname);
1247 return result;
1248 }
1249
GetEuiccInfo2(int32_t portIndex)1250 EuiccInfo2 SimFileManager::GetEuiccInfo2(int32_t portIndex)
1251 {
1252 if (eSimFile_ == nullptr) {
1253 TELEPHONY_LOGE("esimFile is nullptr");
1254 return EuiccInfo2();
1255 }
1256 EuiccInfo2 result = eSimFile_->ObtainEuiccInfo2(portIndex);
1257 return result;
1258 }
1259
AuthenticateServer(const AuthenticateConfigInfo & authenticateConfigInfo)1260 ResponseEsimInnerResult SimFileManager::AuthenticateServer(const AuthenticateConfigInfo &authenticateConfigInfo)
1261 {
1262 if (eSimFile_ == nullptr) {
1263 TELEPHONY_LOGE("esimFile is nullptr");
1264 return ResponseEsimInnerResult();
1265 }
1266 ResponseEsimInnerResult result = eSimFile_->AuthenticateServer(authenticateConfigInfo);
1267 return result;
1268 }
1269 #endif
1270 } // namespace Telephony
1271 } // namespace OHOS
1272