1 /*
2 * Copyright (C) 2021-2023 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 "sms_misc_manager.h"
17
18 #include "core_manager_inner.h"
19 #include "short_message.h"
20 #include "sms_mms_errors.h"
21 #include "string_utils.h"
22 #include "telephony_common_utils.h"
23 #include "telephony_log_wrapper.h"
24
25 namespace OHOS {
26 namespace Telephony {
27 static constexpr int32_t WAIT_TIME_SECOND = 1;
28 static constexpr int32_t TIME_OUT_SECOND = 3;
29 static constexpr uint8_t GSM_TYPE = 1;
30 static constexpr uint8_t MIN_SMSC_LEN = 2;
31 static constexpr uint32_t RANG_MAX = 65535;
32 static constexpr int32_t CB_RANGE_PAIR_SIZE = 2;
33 bool SmsMiscManager::hasGotCbRange_ = false;
34
SmsMiscManager(int32_t slotId)35 SmsMiscManager::SmsMiscManager(int32_t slotId) : TelEventHandler("SmsMiscManager"), slotId_(slotId) {}
36
SetCBConfig(bool enable,uint32_t fromMsgId,uint32_t toMsgId,uint8_t netType)37 int32_t SmsMiscManager::SetCBConfig(bool enable, uint32_t fromMsgId, uint32_t toMsgId, uint8_t netType)
38 {
39 bool ret = false;
40 if ((toMsgId > RANG_MAX) || (fromMsgId > toMsgId) || (netType != GSM_TYPE)) {
41 TELEPHONY_LOGI("cb channel invalid");
42 return TELEPHONY_ERR_ARGUMENT_INVALID;
43 }
44 std::unique_lock<std::mutex> lock(cbMutex_);
45 if (!hasGotCbRange_) {
46 GetModemCBRange();
47 if (mdRangeList_.size() != 0) {
48 if (!SendDataToRil(false, mdRangeList_)) {
49 return TELEPHONY_ERR_RIL_CMD_FAIL;
50 }
51 mdRangeList_.clear();
52 }
53 }
54 std::list<gsmCBRangeInfo> oldRangeList = rangeList_;
55 if (enable) {
56 ret = OpenCBRange(fromMsgId, toMsgId);
57 } else {
58 ret = CloseCBRange(fromMsgId, toMsgId);
59 }
60 if (ret) {
61 if (!SendDataToRil(false, oldRangeList)) {
62 rangeList_ = oldRangeList;
63 return TELEPHONY_ERR_RIL_CMD_FAIL;
64 }
65 if (!SendDataToRil(true, rangeList_)) {
66 rangeList_ = oldRangeList;
67 return TELEPHONY_ERR_RIL_CMD_FAIL;
68 }
69 } else {
70 rangeList_ = oldRangeList;
71 }
72 return TELEPHONY_ERR_SUCCESS;
73 }
74
GetRangeInfo() const75 std::list<SmsMiscManager::gsmCBRangeInfo> SmsMiscManager::GetRangeInfo() const
76 {
77 return rangeList_;
78 }
79
80 // from 3GPP TS 27.005 3.3.4 Select Cell Broadcast Message Types
OpenCBRange(uint32_t fromMsgId,uint32_t toMsgId)81 bool SmsMiscManager::OpenCBRange(uint32_t fromMsgId, uint32_t toMsgId)
82 {
83 infoData data(fromMsgId, toMsgId);
84 rangeList_.emplace_back(fromMsgId, toMsgId);
85 CombineCBRange();
86 return true;
87 }
88
SplitMsgId(uint32_t fromMsgId,uint32_t toMsgId,const std::list<gsmCBRangeInfo>::iterator & oldIter)89 void SmsMiscManager::SplitMsgId(
90 uint32_t fromMsgId, uint32_t toMsgId, const std::list<gsmCBRangeInfo>::iterator &oldIter)
91 {
92 auto &info = *oldIter;
93 if (fromMsgId == UINT32_MAX || fromMsgId < 1) {
94 return;
95 }
96 rangeList_.emplace_back(info.fromMsgId, fromMsgId - 1);
97 rangeList_.emplace_back(toMsgId + 1, info.toMsgId);
98 rangeList_.erase(oldIter);
99 }
100
101 // from 3GPP TS 27.005 3.3.4 Select Cell Broadcast Message Types
CloseCBRange(uint32_t fromMsgId,uint32_t toMsgId)102 bool SmsMiscManager::CloseCBRange(uint32_t fromMsgId, uint32_t toMsgId)
103 {
104 if (fromMsgId == UINT32_MAX || fromMsgId < 1) {
105 return false;
106 }
107
108 auto iter = rangeList_.begin();
109 while (iter != rangeList_.end()) {
110 auto oldIter = iter++;
111 auto &info = *oldIter;
112 if (fromMsgId == info.fromMsgId && toMsgId == info.toMsgId) {
113 rangeList_.erase(oldIter);
114 continue;
115 } else if (fromMsgId == info.fromMsgId && toMsgId > info.toMsgId) {
116 rangeList_.erase(oldIter);
117 continue;
118 } else if (fromMsgId == info.fromMsgId && toMsgId < info.toMsgId) {
119 rangeList_.emplace_back(toMsgId + 1, info.toMsgId);
120 rangeList_.erase(oldIter);
121 continue;
122 } else if (fromMsgId < info.fromMsgId && toMsgId == info.toMsgId) {
123 rangeList_.erase(oldIter);
124 continue;
125 } else if (fromMsgId > info.fromMsgId && toMsgId == info.toMsgId) {
126 rangeList_.emplace_back(info.fromMsgId, fromMsgId - 1);
127 rangeList_.erase(oldIter);
128 continue;
129 } else if (fromMsgId > info.fromMsgId && toMsgId < info.toMsgId) {
130 SplitMsgId(fromMsgId, toMsgId, oldIter);
131 continue;
132 } else if (fromMsgId > info.fromMsgId && fromMsgId <= info.toMsgId) {
133 rangeList_.emplace_back(info.fromMsgId, fromMsgId - 1);
134 rangeList_.erase(oldIter);
135 continue;
136 } else if (fromMsgId < info.fromMsgId && toMsgId > info.toMsgId) {
137 rangeList_.erase(oldIter);
138 continue;
139 } else if (toMsgId < info.toMsgId && toMsgId >= info.fromMsgId) {
140 rangeList_.emplace_back(toMsgId + 1, info.toMsgId);
141 rangeList_.erase(oldIter);
142 continue;
143 }
144 }
145 CombineCBRange();
146 return true;
147 }
148
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)149 void SmsMiscManager::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
150 {
151 if (event == nullptr) {
152 TELEPHONY_LOGE("SmsMiscManager ProcessEvent event == nullptr");
153 return;
154 }
155
156 uint32_t eventId = 0;
157 eventId = event->GetInnerEventId();
158 switch (eventId) {
159 case SET_CB_CONFIG_FINISH: {
160 TELEPHONY_LOGD("SmsMiscManager::ProcessEvent Set cb config finish");
161 isSuccess_ = true;
162 std::shared_ptr<RadioResponseInfo> res = event->GetSharedObject<RadioResponseInfo>();
163 if (res != nullptr) {
164 isSuccess_ = (res->error == ErrType::NONE);
165 }
166 NotifyHasResponse();
167 break;
168 }
169 case GET_CB_CONFIG_FINISH: {
170 TELEPHONY_LOGI("SmsMiscManager::ProcessEvent Get cb config finish");
171 GetCBConfigFinish(event);
172 break;
173 }
174 case SET_SMSC_ADDR_FINISH: {
175 TELEPHONY_LOGI("SmsMiscManager::ProcessEvent Set smsc addr finish");
176 isSuccess_ = true;
177 std::shared_ptr<RadioResponseInfo> res = event->GetSharedObject<RadioResponseInfo>();
178 if (res != nullptr) {
179 isSuccess_ = (res->error == ErrType::NONE);
180 }
181 NotifyHasResponse();
182 break;
183 }
184 case GET_SMSC_ADDR_FINISH: {
185 TELEPHONY_LOGI("SmsMiscManager::ProcessEvent Get smsc addr finish");
186 isSuccess_ = true;
187 std::shared_ptr<ServiceCenterAddress> addr = event->GetSharedObject<ServiceCenterAddress>();
188 if (addr != nullptr) {
189 smscAddr_ = addr->address;
190 }
191 NotifyHasResponse();
192 break;
193 }
194 default:
195 TELEPHONY_LOGI("SmsMiscManager::ProcessEvent default!");
196 break;
197 }
198 }
199
GetCBConfigFinish(const AppExecFwk::InnerEvent::Pointer & event)200 void SmsMiscManager::GetCBConfigFinish(const AppExecFwk::InnerEvent::Pointer &event)
201 {
202 isSuccess_ = true;
203 std::shared_ptr<CBConfigInfo> res = event->GetSharedObject<CBConfigInfo>();
204 if (res == nullptr) {
205 isSuccess_ = false;
206 } else {
207 UpdateCbRangList(res);
208 }
209 NotifyHasResponse();
210 }
211
IsEmpty() const212 bool SmsMiscManager::IsEmpty() const
213 {
214 return rangeList_.empty();
215 }
216
NotifyHasResponse()217 void SmsMiscManager::NotifyHasResponse()
218 {
219 std::unique_lock<std::mutex> lock(mutex_);
220 if (fairList_.size() > 0) {
221 fairVar_ = fairList_.front();
222 fairList_.pop_front();
223 } else {
224 return;
225 }
226 condVar_.notify_all();
227 }
228
UpdateCbRangList(std::shared_ptr<CBConfigInfo> res)229 void SmsMiscManager::UpdateCbRangList(std::shared_ptr<CBConfigInfo> res)
230 {
231 mdRangeList_.clear();
232 if (res->mids.empty()) {
233 return;
234 }
235 std::vector<std::string> dest;
236 SplitMids(res->mids, dest, ",");
237 for (auto v : dest) {
238 std::string start;
239 std::string end;
240 if (!SplitMidValue(v, start, end, "-")) {
241 continue;
242 }
243 if (!IsValidDecValue(start) || !IsValidDecValue(end)) {
244 TELEPHONY_LOGE("start or end not decimal");
245 return;
246 }
247 if (std::stoi(start) <= std::stoi(end)) {
248 infoData data(std::stoi(start), std::stoi(end));
249 mdRangeList_.emplace_back(data.startPos, data.endPos);
250 }
251 }
252 rangeList_ = mdRangeList_;
253 CombineCBRange();
254 }
255
CombineCBRange(std::list<gsmCBRangeInfo> & ranges)256 void SmsMiscManager::CombineCBRange(std::list<gsmCBRangeInfo>& ranges)
257 {
258 ranges.sort();
259 ranges.unique();
260 auto iter = ranges.begin();
261 while (iter != ranges.end()) {
262 auto OtherIter = iter;
263 OtherIter++;
264 bool eraseFlag = false;
265 while (OtherIter != ranges.end()) {
266 if (OtherIter->fromMsgId == iter->fromMsgId) {
267 eraseFlag = true;
268 break;
269 } else if (OtherIter->toMsgId <= iter->toMsgId) {
270 OtherIter = ranges.erase(OtherIter);
271 continue;
272 } else if (OtherIter->fromMsgId <= static_cast<uint32_t>(iter->toMsgId + 1)) {
273 iter->toMsgId = OtherIter->toMsgId;
274 OtherIter = ranges.erase(OtherIter);
275 continue;
276 }
277 OtherIter++;
278 }
279 if (eraseFlag) {
280 iter = ranges.erase(iter);
281 } else {
282 iter++;
283 }
284 }
285 }
286
CombineCBRange()287 void SmsMiscManager::CombineCBRange()
288 {
289 CombineCBRange(rangeList_);
290 }
291
SplitMids(std::string src,std::vector<std::string> & dest,const std::string delimiter)292 void SmsMiscManager::SplitMids(std::string src, std::vector<std::string> &dest, const std::string delimiter)
293 {
294 size_t pos = src.find(delimiter);
295 while (pos != std::string::npos) {
296 dest.push_back(src.substr(0, pos));
297 src.erase(0, pos + delimiter.length());
298 pos = src.find(delimiter);
299 }
300 dest.push_back(src);
301 }
302
SplitMidValue(std::string value,std::string & start,std::string & end,const std::string delimiter)303 bool SmsMiscManager::SplitMidValue(std::string value, std::string &start, std::string &end, const std::string delimiter)
304 {
305 if (value.empty()) {
306 return false;
307 }
308 size_t pos = value.find(delimiter);
309 if (value.size() == 0) {
310 return false;
311 }
312 if (pos == 0 || pos == value.size() - 1) {
313 return false;
314 } else if (pos == std::string::npos) {
315 start = value;
316 end = value;
317 return true;
318 }
319 start = value.substr(0, pos);
320 end = value.substr(pos + 1);
321 return true;
322 }
323
RangeListToString(const std::list<gsmCBRangeInfo> rangeList)324 std::string SmsMiscManager::RangeListToString(const std::list<gsmCBRangeInfo> rangeList)
325 {
326 std::string ret;
327 bool isFirst = true;
328 for (const auto &item : rangeList) {
329 if (isFirst) {
330 isFirst = false;
331 } else {
332 ret += ",";
333 }
334 if (item.fromMsgId == item.toMsgId) {
335 ret += std::to_string(item.fromMsgId);
336 } else {
337 ret += std::to_string(item.fromMsgId) + "-" + std::to_string(item.toMsgId);
338 }
339 }
340 return ret;
341 }
342
SendDataToRil(bool enable,std::list<gsmCBRangeInfo> list)343 bool SmsMiscManager::SendDataToRil(bool enable, std::list<gsmCBRangeInfo> list)
344 {
345 TELEPHONY_LOGI("enable CB channel:%{public}d", enable);
346 for (auto item : list) {
347 TELEPHONY_LOGD("[%{public}d-%{public}d]", item.fromMsgId, item.toMsgId);
348 }
349 std::unique_lock<std::mutex> lock(mutex_);
350 if (!list.empty()) {
351 isSuccess_ = false;
352 int32_t condition = conditonVar_++;
353 fairList_.push_back(condition);
354 CBConfigParam cbData;
355 cbData.mode = enable ? 1 : 0;
356 cbData.idList = RangeListToString(list);
357 cbData.dcsList = codeScheme_;
358 CoreManagerInner::GetInstance().SetCBConfig(
359 slotId_, SmsMiscManager::SET_CB_CONFIG_FINISH, cbData, shared_from_this());
360 while (!isSuccess_) {
361 TELEPHONY_LOGD("SendDataToRil::wait(), isSuccess_ = false");
362 if (condVar_.wait_for(lock, std::chrono::seconds(WAIT_TIME_SECOND)) == std::cv_status::timeout) {
363 break;
364 }
365 }
366 return isSuccess_;
367 } else {
368 return true;
369 }
370 }
371
GetModemCBRange()372 void SmsMiscManager::GetModemCBRange()
373 {
374 std::unique_lock<std::mutex> lock(mutex_);
375 if (!hasGotCbRange_) {
376 isSuccess_ = false;
377 int32_t condition = conditonVar_++;
378 fairList_.push_back(condition);
379 CoreManagerInner::GetInstance().GetCBConfig(slotId_, SmsMiscManager::GET_CB_CONFIG_FINISH, shared_from_this());
380 while (!isSuccess_) {
381 TELEPHONY_LOGI("GetCBConfig::wait(), isSuccess_ = false");
382 if (condVar_.wait_for(lock, std::chrono::seconds(WAIT_TIME_SECOND)) == std::cv_status::timeout) {
383 break;
384 }
385 }
386 hasGotCbRange_ = true;
387 }
388 }
389
ConvertToRangeList(const std::vector<int32_t> & messageIds)390 std::list<SmsMiscManager::gsmCBRangeInfo> SmsMiscManager::ConvertToRangeList(const std::vector<int32_t>& messageIds)
391 {
392 std::list<gsmCBRangeInfo> result;
393 if (messageIds.size() % CB_RANGE_PAIR_SIZE != 0) {
394 TELEPHONY_LOGE("Invalid messageIds size (must be even)");
395 return result;
396 }
397 for (size_t i = 0; i < messageIds.size(); i += CB_RANGE_PAIR_SIZE) {
398 result.emplace_back(messageIds[i], messageIds[i + 1]);
399 }
400 return result;
401 }
402
SetCBConfigList(const std::vector<int32_t> & messageIds,int32_t ranType)403 int32_t SmsMiscManager::SetCBConfigList(const std::vector<int32_t>& messageIds, int32_t ranType)
404 {
405 if (ranType != GSM_TYPE) {
406 TELEPHONY_LOGE("cb channel invalid, netType is not gsm");
407 return TELEPHONY_ERR_ARGUMENT_INVALID;
408 }
409 // 转换为范围列表
410 std::list<gsmCBRangeInfo> newRanges = ConvertToRangeList(messageIds);
411 // 如果没有新范围,直接返回成功(保持原有配置)
412 if (newRanges.empty()) {
413 return TELEPHONY_ERR_SUCCESS;
414 }
415 // 合并新范围到当前缓存(先备份)
416 std::unique_lock<std::mutex> lock(cbMutex_);
417 std::list<gsmCBRangeInfo> oldRangeList = rangeList_;
418 std::list<gsmCBRangeInfo> mergedRanges = oldRangeList;
419 // 将新范围合并到mergedRanges
420 for (const auto& range : newRanges) {
421 mergedRanges.emplace_back(range.fromMsgId, range.toMsgId);
422 }
423 // 合并重叠范围
424 CombineCBRange(mergedRanges);
425 // 发送合并后的范围到RIL
426 if (!SendDataToRil(true, mergedRanges)) {
427 return TELEPHONY_ERR_RIL_CMD_FAIL;
428 }
429 // 发送成功,更新缓存
430 rangeList_ = std::move(mergedRanges);
431 return TELEPHONY_ERR_SUCCESS;
432 }
433
AddSimMessage(const std::string & smsc,const std::string & pdu,ISmsServiceInterface::SimMessageStatus status)434 int32_t SmsMiscManager::AddSimMessage(
435 const std::string &smsc, const std::string &pdu, ISmsServiceInterface::SimMessageStatus status)
436 {
437 std::vector<ShortMessage> message;
438 int32_t result = GetAllSimMessages(message);
439 if (result != TELEPHONY_ERR_SUCCESS) {
440 TELEPHONY_LOGE("SmsMiscManager::AddSimMessage get result fail");
441 return result;
442 }
443 int32_t smsCountCurrent = static_cast<int32_t>(message.size());
444 TELEPHONY_LOGI("smsCountCurrent = %{public}d smsCapacityOfSim_ = %{public}d", smsCountCurrent, smsCapacityOfSim_);
445 if (smsCountCurrent >= smsCapacityOfSim_) {
446 TELEPHONY_LOGE("AddSimMessage sim card is full");
447 return TELEPHONY_ERR_FAIL;
448 }
449
450 TELEPHONY_LOGI("smscLen = %{public}zu pudLen = %{public}zu status = %{public}d", smsc.size(), pdu.size(), status);
451 std::string smscAddr(smsc);
452 if (smsc.length() <= MIN_SMSC_LEN) {
453 smscAddr.clear();
454 smscAddr.insert(0, "00");
455 }
456 TELEPHONY_LOGD("smscAddr = %{private}s", smscAddr.c_str());
457 return CoreManagerInner::GetInstance().AddSmsToIcc(
458 slotId_, static_cast<int>(status), const_cast<std::string &>(pdu), smscAddr);
459 }
460
DelSimMessage(uint32_t msgIndex)461 int32_t SmsMiscManager::DelSimMessage(uint32_t msgIndex)
462 {
463 TELEPHONY_LOGI("messageIndex = %{public}d", msgIndex);
464 bool hasSimCard = false;
465 CoreManagerInner::GetInstance().HasSimCard(slotId_, hasSimCard);
466 if (!hasSimCard) {
467 TELEPHONY_LOGE("no sim card");
468 return TELEPHONY_ERR_SLOTID_INVALID;
469 }
470 return CoreManagerInner::GetInstance().DelSmsIcc(slotId_, msgIndex);
471 }
472
UpdateSimMessage(uint32_t msgIndex,ISmsServiceInterface::SimMessageStatus newStatus,const std::string & pdu,const std::string & smsc)473 int32_t SmsMiscManager::UpdateSimMessage(uint32_t msgIndex, ISmsServiceInterface::SimMessageStatus newStatus,
474 const std::string &pdu, const std::string &smsc)
475 {
476 std::string smscAddr(smsc);
477 if (smsc.length() <= MIN_SMSC_LEN) {
478 smscAddr.clear();
479 smscAddr.insert(0, "00");
480 }
481 return CoreManagerInner::GetInstance().UpdateSmsIcc(
482 slotId_, msgIndex, static_cast<int>(newStatus), const_cast<std::string &>(pdu), smscAddr);
483 }
484
GetAllSimMessages(std::vector<ShortMessage> & message)485 int32_t SmsMiscManager::GetAllSimMessages(std::vector<ShortMessage> &message)
486 {
487 bool hasSimCard = false;
488 CoreManagerInner::GetInstance().HasSimCard(slotId_, hasSimCard);
489 if (!hasSimCard) {
490 TELEPHONY_LOGE("no sim card");
491 return TELEPHONY_ERR_SLOTID_INVALID;
492 }
493 std::vector<std::string> pdus = CoreManagerInner::GetInstance().ObtainAllSmsOfIcc(slotId_);
494 smsCapacityOfSim_ = static_cast<int32_t>(pdus.size());
495 TELEPHONY_LOGI("smsCapacityOfSim_[%{public}d]", smsCapacityOfSim_);
496 int index = 1;
497 PhoneType type = CoreManagerInner::GetInstance().GetPhoneType(slotId_);
498 std::string specification;
499 if (PhoneType::PHONE_TYPE_IS_GSM == type) {
500 specification = "3gpp";
501 } else if (PhoneType::PHONE_TYPE_IS_CDMA == type) {
502 specification = "3gpp2";
503 } else {
504 return TELEPHONY_ERR_UNKNOWN_NETWORK_TYPE;
505 }
506 for (auto &v : pdus) {
507 v = v.substr(0, v.find("FFFFF"));
508 if (v.compare("00") == 0) {
509 index++;
510 continue;
511 }
512 std::vector<unsigned char> pdu = StringUtils::HexToByteVector(v);
513 ShortMessage item = ShortMessage::CreateIccMessage(pdu, specification, index);
514 if (item.GetIccMessageStatus() != ShortMessage::SMS_SIM_MESSAGE_STATUS_FREE) {
515 message.emplace_back(item);
516 }
517 index++;
518 }
519 return TELEPHONY_ERR_SUCCESS;
520 }
521
SetSmscAddr(const std::string & scAddr)522 int32_t SmsMiscManager::SetSmscAddr(const std::string &scAddr)
523 {
524 TELEPHONY_LOGI("SmsMiscManager::SetSmscAddr [%{private}s]", scAddr.c_str());
525 std::unique_lock<std::mutex> lock(mutex_);
526 isSuccess_ = false;
527 int32_t condition = conditonVar_++;
528 fairList_.push_back(condition);
529 CoreManagerInner::GetInstance().SetSmscAddr(
530 slotId_, SmsMiscManager::SET_SMSC_ADDR_FINISH, 0, scAddr, shared_from_this());
531 while (!isSuccess_) {
532 TELEPHONY_LOGI("SetSmscAddr::wait(), isSuccess_ = false");
533 if (condVar_.wait_for(lock, std::chrono::seconds(TIME_OUT_SECOND)) == std::cv_status::timeout) {
534 break;
535 }
536 }
537
538 if (isSuccess_ == false) {
539 return TELEPHONY_ERR_RIL_CMD_FAIL;
540 }
541 return TELEPHONY_ERR_SUCCESS;
542 }
543
GetSmscAddr(std::u16string & smscAddress)544 int32_t SmsMiscManager::GetSmscAddr(std::u16string &smscAddress)
545 {
546 TELEPHONY_LOGI("SmsMiscManager::GetSmscAddr");
547 std::unique_lock<std::mutex> lock(mutex_);
548 smscAddr_.clear();
549 isSuccess_ = false;
550 int32_t condition = conditonVar_++;
551 fairList_.push_back(condition);
552 CoreManagerInner::GetInstance().GetSmscAddr(slotId_, SmsMiscManager::GET_SMSC_ADDR_FINISH, shared_from_this());
553 while (!isSuccess_) {
554 TELEPHONY_LOGI("GetSmscAddr::wait(), isSuccess_ = false");
555 if (condVar_.wait_for(lock, std::chrono::seconds(TIME_OUT_SECOND)) == std::cv_status::timeout) {
556 break;
557 }
558 }
559 smscAddress = StringUtils::ToUtf16(smscAddr_);
560 return TELEPHONY_ERR_SUCCESS;
561 }
562
SetDefaultSmsSlotId(int32_t slotId)563 int32_t SmsMiscManager::SetDefaultSmsSlotId(int32_t slotId)
564 {
565 TELEPHONY_LOGI("SetDefaultSmsSlotId slotId = %{public}d", slotId);
566 return CoreManagerInner::GetInstance().SetDefaultSmsSlotId(slotId);
567 }
568
GetDefaultSmsSlotId()569 int32_t SmsMiscManager::GetDefaultSmsSlotId()
570 {
571 TELEPHONY_LOGI("GetDefaultSmsSlotId");
572 return CoreManagerInner::GetInstance().GetDefaultSmsSlotId();
573 }
574
GetDefaultSmsSimId(int32_t & simId)575 int32_t SmsMiscManager::GetDefaultSmsSimId(int32_t &simId)
576 {
577 TELEPHONY_LOGI("GetDefaultSmsSimId");
578 return CoreManagerInner::GetInstance().GetDefaultSmsSimId(simId);
579 }
580 } // namespace Telephony
581 } // namespace OHOS
582