• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "sms_interface_manager.h"
17 
18 #include "sms_hisysevent.h"
19 #include "sms_misc_manager.h"
20 #include "string_utils.h"
21 #include "telephony_errors.h"
22 #include "telephony_log_wrapper.h"
23 
24 namespace OHOS {
25 namespace Telephony {
26 using namespace std;
SmsInterfaceManager(int32_t slotId)27 SmsInterfaceManager::SmsInterfaceManager(int32_t slotId) : slotId_(slotId) {}
28 
~SmsInterfaceManager()29 SmsInterfaceManager::~SmsInterfaceManager() {}
30 
InitInterfaceManager()31 void SmsInterfaceManager::InitInterfaceManager()
32 {
33     smsSendManager_ = make_unique<SmsSendManager>(slotId_);
34     if (smsSendManager_ == nullptr) {
35         TELEPHONY_LOGE("failed to create SmsSendManager");
36         return;
37     }
38     smsSendManager_->Init();
39 
40     smsReceiveManager_ = make_unique<SmsReceiveManager>(slotId_);
41     if (smsReceiveManager_ == nullptr) {
42         TELEPHONY_LOGE("failed to create SmsReceiveManager");
43         return;
44     }
45     smsReceiveManager_->Init();
46     auto smsMiscRunner = AppExecFwk::EventRunner::Create("SmsMiscRunner" + to_string(slotId_));
47     if (smsMiscRunner == nullptr) {
48         TELEPHONY_LOGE("failed to create SmsCbRunner");
49         return;
50     }
51     smsReceiveManager_->SetCdmaSender(smsSendManager_->GetCdmaSmsSender());
52     smsMiscManager_ = make_shared<SmsMiscManager>(smsMiscRunner, slotId_);
53     smsMiscRunner->Run();
54     TELEPHONY_LOGI("SmsInterfaceManager::InitInterfaceManager success, %{public}d", slotId_);
55 }
56 
TextBasedSmsDelivery(const string & desAddr,const string & scAddr,const string & text,const sptr<ISendShortMessageCallback> & sendCallback,const sptr<IDeliveryShortMessageCallback> & deliveryCallback)57 int32_t SmsInterfaceManager::TextBasedSmsDelivery(const string &desAddr, const string &scAddr, const string &text,
58     const sptr<ISendShortMessageCallback> &sendCallback, const sptr<IDeliveryShortMessageCallback> &deliveryCallback)
59 {
60     if (desAddr.empty() || text.empty()) {
61         SmsSender::SendResultCallBack(sendCallback, ISendShortMessageCallback::SEND_SMS_FAILURE_UNKNOWN);
62         SmsHiSysEvent::WriteSmsSendFaultEvent(slotId_, SmsMmsMessageType::SMS_SHORT_MESSAGE,
63             SmsMmsErrorCode::SMS_ERROR_EMPTY_INPUT_PARAMETER, "text sms arges is empty");
64         TELEPHONY_LOGE("TextBasedSmsDelivery failed to send.");
65         return TELEPHONY_ERR_ARGUMENT_INVALID;
66     }
67     if (smsSendManager_ == nullptr) {
68         TELEPHONY_LOGE("TextBasedSmsDelivery failed to send.");
69         SmsSender::SendResultCallBack(sendCallback, ISendShortMessageCallback::SEND_SMS_FAILURE_UNKNOWN);
70         SmsHiSysEvent::WriteSmsSendFaultEvent(slotId_, SmsMmsMessageType::SMS_SHORT_MESSAGE,
71             SmsMmsErrorCode::SMS_ERROR_NULL_POINTER, "text sms smsSendManager_ is nullptr");
72         return TELEPHONY_ERR_LOCAL_PTR_NULL;
73     }
74     smsSendManager_->TextBasedSmsDelivery(desAddr, scAddr, text, sendCallback, deliveryCallback);
75     return TELEPHONY_ERR_SUCCESS;
76 }
77 
DataBasedSmsDelivery(const string & desAddr,const string & scAddr,const uint16_t port,const uint8_t * data,uint16_t dataLen,const sptr<ISendShortMessageCallback> & sendCallback,const sptr<IDeliveryShortMessageCallback> & deliveryCallback)78 int32_t SmsInterfaceManager::DataBasedSmsDelivery(const string &desAddr, const string &scAddr, const uint16_t port,
79     const uint8_t *data, uint16_t dataLen, const sptr<ISendShortMessageCallback> &sendCallback,
80     const sptr<IDeliveryShortMessageCallback> &deliveryCallback)
81 {
82     if (desAddr.empty() || (data == nullptr)) {
83         SmsSender::SendResultCallBack(sendCallback, ISendShortMessageCallback::SEND_SMS_FAILURE_UNKNOWN);
84         SmsHiSysEvent::WriteSmsSendFaultEvent(slotId_, SmsMmsMessageType::SMS_SHORT_MESSAGE,
85             SmsMmsErrorCode::SMS_ERROR_EMPTY_INPUT_PARAMETER, "data sms arges is empty");
86         TELEPHONY_LOGE("DataBasedSmsDelivery failed to send.");
87         return TELEPHONY_ERR_ARGUMENT_INVALID;
88     }
89     if (smsSendManager_ == nullptr) {
90         TELEPHONY_LOGE("TextBasedSmsDelivery failed to send.");
91         SmsSender::SendResultCallBack(sendCallback, ISendShortMessageCallback::SEND_SMS_FAILURE_UNKNOWN);
92         SmsHiSysEvent::WriteSmsSendFaultEvent(slotId_, SmsMmsMessageType::SMS_SHORT_MESSAGE,
93             SmsMmsErrorCode::SMS_ERROR_NULL_POINTER, "text sms smsSendManager_ is nullptr");
94         return TELEPHONY_ERR_LOCAL_PTR_NULL;
95     }
96     smsSendManager_->DataBasedSmsDelivery(desAddr, scAddr, port, data, dataLen, sendCallback, deliveryCallback);
97     return TELEPHONY_ERR_SUCCESS;
98 }
99 
AddSimMessage(const std::string & smsc,const std::string & pdu,ISmsServiceInterface::SimMessageStatus status)100 int32_t SmsInterfaceManager::AddSimMessage(
101     const std::string &smsc, const std::string &pdu, ISmsServiceInterface::SimMessageStatus status)
102 {
103     if (smsMiscManager_ == nullptr) {
104         TELEPHONY_LOGE("smsMiscManager nullptr error.");
105         return TELEPHONY_ERR_LOCAL_PTR_NULL;
106     }
107     return smsMiscManager_->AddSimMessage(smsc, pdu, status);
108 }
109 
DelSimMessage(uint32_t msgIndex)110 int32_t SmsInterfaceManager::DelSimMessage(uint32_t msgIndex)
111 {
112     if (smsMiscManager_ == nullptr) {
113         TELEPHONY_LOGE("smsMiscManager nullptr error.");
114         return TELEPHONY_ERR_LOCAL_PTR_NULL;
115     }
116     return smsMiscManager_->DelSimMessage(msgIndex);
117 }
118 
UpdateSimMessage(uint32_t msgIndex,ISmsServiceInterface::SimMessageStatus newStatus,const std::string & pdu,const std::string & smsc)119 int32_t SmsInterfaceManager::UpdateSimMessage(uint32_t msgIndex, ISmsServiceInterface::SimMessageStatus newStatus,
120     const std::string &pdu, const std::string &smsc)
121 {
122     if (smsMiscManager_ == nullptr) {
123         TELEPHONY_LOGE("smsMiscManager nullptr error.");
124         return TELEPHONY_ERR_LOCAL_PTR_NULL;
125     }
126     return smsMiscManager_->UpdateSimMessage(msgIndex, newStatus, pdu, smsc);
127 }
128 
GetAllSimMessages(std::vector<ShortMessage> & message)129 int32_t SmsInterfaceManager::GetAllSimMessages(std::vector<ShortMessage> &message)
130 {
131     if (smsMiscManager_ == nullptr) {
132         TELEPHONY_LOGE("smsMiscManager nullptr error.");
133         return TELEPHONY_ERR_LOCAL_PTR_NULL;
134     }
135     return smsMiscManager_->GetAllSimMessages(message);
136 }
137 
SetSmscAddr(const std::string & scAddr)138 int32_t SmsInterfaceManager::SetSmscAddr(const std::string &scAddr)
139 {
140     if (smsMiscManager_ == nullptr) {
141         TELEPHONY_LOGE("smsMiscManager nullptr error.");
142         return TELEPHONY_ERR_LOCAL_PTR_NULL;
143     }
144     return smsMiscManager_->SetSmscAddr(scAddr);
145 }
146 
GetSmscAddr(std::u16string & smscAddress)147 int32_t SmsInterfaceManager::GetSmscAddr(std::u16string &smscAddress)
148 {
149     if (smsMiscManager_ == nullptr) {
150         TELEPHONY_LOGE("smsMiscManager nullptr error.");
151         return TELEPHONY_ERR_LOCAL_PTR_NULL;
152     }
153     return smsMiscManager_->GetSmscAddr(smscAddress);
154 }
155 
SetCBConfig(bool enable,uint32_t fromMsgId,uint32_t toMsgId,uint8_t netType)156 int32_t SmsInterfaceManager::SetCBConfig(bool enable, uint32_t fromMsgId, uint32_t toMsgId, uint8_t netType)
157 {
158     if (smsMiscManager_ == nullptr) {
159         TELEPHONY_LOGE("smsMiscManager nullptr error.");
160         return TELEPHONY_ERR_LOCAL_PTR_NULL;
161     }
162     return smsMiscManager_->SetCBConfig(enable, fromMsgId, toMsgId, netType);
163 }
164 
SetImsSmsConfig(int32_t slotId,int32_t enable)165 bool SmsInterfaceManager::SetImsSmsConfig(int32_t slotId, int32_t enable)
166 {
167     if (smsMiscManager_ == nullptr) {
168         TELEPHONY_LOGE("smsMiscManager nullptr error.");
169         return false;
170     }
171     return smsSendManager_->SetImsSmsConfig(slotId, enable);
172 }
173 
SetDefaultSmsSlotId(int32_t slotId)174 int32_t SmsInterfaceManager::SetDefaultSmsSlotId(int32_t slotId)
175 {
176     if (smsMiscManager_ == nullptr) {
177         TELEPHONY_LOGE("smsMiscManager nullptr error.");
178         return TELEPHONY_ERR_LOCAL_PTR_NULL;
179     }
180     return smsMiscManager_->SetDefaultSmsSlotId(slotId);
181 }
182 
GetDefaultSmsSlotId()183 int32_t SmsInterfaceManager::GetDefaultSmsSlotId()
184 {
185     if (smsMiscManager_ == nullptr) {
186         TELEPHONY_LOGE("smsMiscManager nullptr error.");
187         return TELEPHONY_ERROR;
188     }
189     return smsMiscManager_->GetDefaultSmsSlotId();
190 }
191 
SplitMessage(const std::string & message,std::vector<std::u16string> & splitMessage)192 int32_t SmsInterfaceManager::SplitMessage(const std::string &message, std::vector<std::u16string> &splitMessage)
193 {
194     if (smsSendManager_ == nullptr) {
195         TELEPHONY_LOGE("smsSendManager nullptr error.");
196         return TELEPHONY_ERR_LOCAL_PTR_NULL;
197     }
198     return smsSendManager_->SplitMessage(message, splitMessage);
199 }
200 
GetSmsSegmentsInfo(const std::string & message,bool force7BitCode,LengthInfo & outInfo)201 int32_t SmsInterfaceManager::GetSmsSegmentsInfo(const std::string &message, bool force7BitCode, LengthInfo &outInfo)
202 {
203     if (smsSendManager_ == nullptr) {
204         TELEPHONY_LOGE("smsSendManager nullptr error.");
205         return TELEPHONY_ERR_LOCAL_PTR_NULL;
206     }
207     return smsSendManager_->GetSmsSegmentsInfo(message, force7BitCode, outInfo);
208 }
209 
IsImsSmsSupported(int32_t slotId,bool & isSupported)210 int32_t SmsInterfaceManager::IsImsSmsSupported(int32_t slotId, bool &isSupported)
211 {
212     if (smsSendManager_ == nullptr) {
213         TELEPHONY_LOGE("smsSendManager is nullptr error.");
214         return TELEPHONY_ERR_LOCAL_PTR_NULL;
215     }
216     return smsSendManager_->IsImsSmsSupported(slotId, isSupported);
217 }
218 
GetImsShortMessageFormat(std::u16string & format)219 int32_t SmsInterfaceManager::GetImsShortMessageFormat(std::u16string &format)
220 {
221     if (smsSendManager_ == nullptr) {
222         TELEPHONY_LOGE("smsSendManager is nullptr error.");
223         return TELEPHONY_ERR_LOCAL_PTR_NULL;
224     }
225     return smsSendManager_->GetImsShortMessageFormat(format);
226 }
227 
HasSmsCapability()228 bool SmsInterfaceManager::HasSmsCapability()
229 {
230     auto helperPtr = DelayedSingleton<SmsPersistHelper>::GetInstance();
231     if (helperPtr == nullptr) {
232         TELEPHONY_LOGE("Get SmsPersistHelper Singleton nullptr error.");
233         return true;
234     }
235     return helperPtr->QueryParamBoolean(SmsPersistHelper::SMS_CAPABLE_PARAM_KEY, true);
236 }
237 } // namespace Telephony
238 } // namespace OHOS