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_service_manager_client.h"
17
18 #include "if_system_ability_manager.h"
19 #include "iservice_registry.h"
20 #include "sms_service_interface_death_recipient.h"
21 #include "system_ability_definition.h"
22 #include "telephony_errors.h"
23 #include "telephony_log_wrapper.h"
24
25 namespace OHOS {
26 namespace Telephony {
SmsServiceManagerClient()27 SmsServiceManagerClient::SmsServiceManagerClient() {}
28
~SmsServiceManagerClient()29 SmsServiceManagerClient::~SmsServiceManagerClient() {}
30
InitSmsServiceProxy()31 bool SmsServiceManagerClient::InitSmsServiceProxy()
32 {
33 std::lock_guard<std::mutex> lock(mutex_);
34 if (smsServiceInterface_ == nullptr) {
35 sptr<ISystemAbilityManager> systemAbilityManager =
36 SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
37 if (!systemAbilityManager) {
38 TELEPHONY_LOGE(" Get system ability mgr failed.");
39 return false;
40 }
41 sptr<IRemoteObject> remoteObject = systemAbilityManager->GetSystemAbility(TELEPHONY_SMS_MMS_SYS_ABILITY_ID);
42 if (!remoteObject) {
43 TELEPHONY_LOGE("Get SMS Service Failed.");
44 return false;
45 }
46 smsServiceInterface_ = iface_cast<ISmsServiceInterface>(remoteObject);
47 if ((!smsServiceInterface_) || (!smsServiceInterface_->AsObject())) {
48 TELEPHONY_LOGE("Get SMS Service Proxy Failed.");
49 return false;
50 }
51 recipient_ = new SmsServiceInterfaceDeathRecipient(*this);
52 if (!recipient_) {
53 TELEPHONY_LOGE("Failed to create death Recipient ptr SmsServiceInterfaceDeathRecipient!");
54 return false;
55 }
56 smsServiceInterface_->AsObject()->AddDeathRecipient(recipient_);
57 }
58 return true;
59 }
60
ResetSmsServiceProxy()61 void SmsServiceManagerClient::ResetSmsServiceProxy()
62 {
63 std::lock_guard<std::mutex> lock(mutex_);
64 if ((smsServiceInterface_ != nullptr) && (smsServiceInterface_->AsObject() != nullptr)) {
65 smsServiceInterface_->AsObject()->RemoveDeathRecipient(recipient_);
66 }
67 smsServiceInterface_ = nullptr;
68 }
69
SetDefaultSmsSlotId(int32_t slotId)70 int32_t SmsServiceManagerClient::SetDefaultSmsSlotId(int32_t slotId)
71 {
72 if (InitSmsServiceProxy()) {
73 std::lock_guard<std::mutex> lock(mutex_);
74 return smsServiceInterface_->SetDefaultSmsSlotId(slotId);
75 }
76 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
77 }
78
GetDefaultSmsSimId(int32_t & simId)79 int32_t SmsServiceManagerClient::GetDefaultSmsSimId(int32_t &simId)
80 {
81 if (InitSmsServiceProxy()) {
82 std::lock_guard<std::mutex> lock(mutex_);
83 return smsServiceInterface_->GetDefaultSmsSimId(simId);
84 }
85 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
86 }
87
GetDefaultSmsSlotId()88 int32_t SmsServiceManagerClient::GetDefaultSmsSlotId()
89 {
90 if (InitSmsServiceProxy()) {
91 std::lock_guard<std::mutex> lock(mutex_);
92 return smsServiceInterface_->GetDefaultSmsSlotId();
93 }
94 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
95 }
96
SendMessage(int32_t slotId,const std::u16string desAddr,const std::u16string scAddr,const std::u16string text,const sptr<ISendShortMessageCallback> & callback,const sptr<IDeliveryShortMessageCallback> & deliveryCallback)97 int32_t SmsServiceManagerClient::SendMessage(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
98 const std::u16string text, const sptr<ISendShortMessageCallback> &callback,
99 const sptr<IDeliveryShortMessageCallback> &deliveryCallback)
100 {
101 if (InitSmsServiceProxy()) {
102 std::lock_guard<std::mutex> lock(mutex_);
103 return smsServiceInterface_->SendMessage(slotId, desAddr, scAddr, text, callback, deliveryCallback);
104 }
105 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
106 }
107
SendMessage(int32_t slotId,const std::u16string desAddr,const std::u16string scAddr,uint16_t port,const uint8_t * data,uint16_t dataLen,const sptr<ISendShortMessageCallback> & callback,const sptr<IDeliveryShortMessageCallback> & deliveryCallback)108 int32_t SmsServiceManagerClient::SendMessage(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
109 uint16_t port, const uint8_t *data, uint16_t dataLen, const sptr<ISendShortMessageCallback> &callback,
110 const sptr<IDeliveryShortMessageCallback> &deliveryCallback)
111 {
112 if (InitSmsServiceProxy()) {
113 std::lock_guard<std::mutex> lock(mutex_);
114 return smsServiceInterface_->SendMessage(
115 slotId, desAddr, scAddr, port, data, dataLen, callback, deliveryCallback);
116 }
117 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
118 }
119
SetScAddress(int32_t slotId,const std::u16string & scAddr)120 int32_t SmsServiceManagerClient::SetScAddress(int32_t slotId, const std::u16string &scAddr)
121 {
122 if (InitSmsServiceProxy()) {
123 std::lock_guard<std::mutex> lock(mutex_);
124 return smsServiceInterface_->SetSmscAddr(slotId, scAddr);
125 }
126 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
127 }
128
GetScAddress(int32_t slotId,std::u16string & smscAddress)129 int32_t SmsServiceManagerClient::GetScAddress(int32_t slotId, std::u16string &smscAddress)
130 {
131 if (InitSmsServiceProxy()) {
132 std::lock_guard<std::mutex> lock(mutex_);
133 return smsServiceInterface_->GetSmscAddr(slotId, smscAddress);
134 }
135 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
136 }
137
AddSimMessage(int32_t slotId,const std::u16string & smsc,const std::u16string & pdu,ISmsServiceInterface::SimMessageStatus status)138 int32_t SmsServiceManagerClient::AddSimMessage(int32_t slotId, const std::u16string &smsc, const std::u16string &pdu,
139 ISmsServiceInterface::SimMessageStatus status)
140 {
141 if (InitSmsServiceProxy()) {
142 std::lock_guard<std::mutex> lock(mutex_);
143 return smsServiceInterface_->AddSimMessage(slotId, smsc, pdu, status);
144 }
145 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
146 }
147
DelSimMessage(int32_t slotId,uint32_t msgIndex)148 int32_t SmsServiceManagerClient::DelSimMessage(int32_t slotId, uint32_t msgIndex)
149 {
150 if (InitSmsServiceProxy()) {
151 std::lock_guard<std::mutex> lock(mutex_);
152 return smsServiceInterface_->DelSimMessage(slotId, msgIndex);
153 }
154 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
155 }
156
UpdateSimMessage(int32_t slotId,uint32_t msgIndex,ISmsServiceInterface::SimMessageStatus newStatus,const std::u16string & pdu,const std::u16string & smsc)157 int32_t SmsServiceManagerClient::UpdateSimMessage(int32_t slotId, uint32_t msgIndex,
158 ISmsServiceInterface::SimMessageStatus newStatus, const std::u16string &pdu, const std::u16string &smsc)
159 {
160 if (InitSmsServiceProxy()) {
161 std::lock_guard<std::mutex> lock(mutex_);
162 return smsServiceInterface_->UpdateSimMessage(slotId, msgIndex, newStatus, pdu, smsc);
163 }
164 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
165 }
166
GetAllSimMessages(int32_t slotId,std::vector<ShortMessage> & message)167 int32_t SmsServiceManagerClient::GetAllSimMessages(int32_t slotId, std::vector<ShortMessage> &message)
168 {
169 if (InitSmsServiceProxy()) {
170 std::lock_guard<std::mutex> lock(mutex_);
171 return smsServiceInterface_->GetAllSimMessages(slotId, message);
172 }
173 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
174 }
175
SetCBConfig(int32_t slotId,bool enable,uint32_t startMessageId,uint32_t endMessageId,uint8_t ranType)176 int32_t SmsServiceManagerClient::SetCBConfig(
177 int32_t slotId, bool enable, uint32_t startMessageId, uint32_t endMessageId, uint8_t ranType)
178 {
179 if (InitSmsServiceProxy()) {
180 std::lock_guard<std::mutex> lock(mutex_);
181 return smsServiceInterface_->SetCBConfig(slotId, enable, startMessageId, endMessageId, ranType);
182 }
183 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
184 }
185
SetImsSmsConfig(int32_t slotId,int32_t enable)186 bool SmsServiceManagerClient::SetImsSmsConfig(int32_t slotId, int32_t enable)
187 {
188 if (InitSmsServiceProxy()) {
189 std::lock_guard<std::mutex> lock(mutex_);
190 return smsServiceInterface_->SetImsSmsConfig(slotId, enable);
191 }
192 return false;
193 }
194
SendMms(int32_t slotId,const std::u16string & mmsc,const std::u16string & data,const std::u16string & ua,const std::u16string & uaprof)195 int32_t SmsServiceManagerClient::SendMms(int32_t slotId, const std::u16string &mmsc, const std::u16string &data,
196 const std::u16string &ua, const std::u16string &uaprof)
197 {
198 if (InitSmsServiceProxy()) {
199 std::lock_guard<std::mutex> lock(mutex_);
200 return smsServiceInterface_->SendMms(slotId, mmsc, data, ua, uaprof);
201 }
202 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
203 }
204
DownloadMms(int32_t slotId,const std::u16string & mmsc,std::u16string & data,const std::u16string & ua,const std::u16string & uaprof)205 int32_t SmsServiceManagerClient::DownloadMms(int32_t slotId, const std::u16string &mmsc, std::u16string &data,
206 const std::u16string &ua, const std::u16string &uaprof)
207 {
208 if (InitSmsServiceProxy()) {
209 std::lock_guard<std::mutex> lock(mutex_);
210 return smsServiceInterface_->DownloadMms(slotId, mmsc, data, ua, uaprof);
211 }
212 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
213 }
214
SplitMessage(const std::u16string & message,std::vector<std::u16string> & splitMessage)215 int32_t SmsServiceManagerClient::SplitMessage(const std::u16string &message, std::vector<std::u16string> &splitMessage)
216 {
217 if (InitSmsServiceProxy()) {
218 std::lock_guard<std::mutex> lock(mutex_);
219 return smsServiceInterface_->SplitMessage(message, splitMessage);
220 }
221 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
222 }
223
GetSmsSegmentsInfo(int32_t slotId,const std::u16string & message,bool force7BitCode,ISmsServiceInterface::SmsSegmentsInfo & segInfo)224 int32_t SmsServiceManagerClient::GetSmsSegmentsInfo(
225 int32_t slotId, const std::u16string &message, bool force7BitCode, ISmsServiceInterface::SmsSegmentsInfo &segInfo)
226 {
227 if (InitSmsServiceProxy()) {
228 std::lock_guard<std::mutex> lock(mutex_);
229 return smsServiceInterface_->GetSmsSegmentsInfo(slotId, message, force7BitCode, segInfo);
230 }
231 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
232 }
233
IsImsSmsSupported(int32_t slotId,bool & isSupported)234 int32_t SmsServiceManagerClient::IsImsSmsSupported(int32_t slotId, bool &isSupported)
235 {
236 if (InitSmsServiceProxy()) {
237 std::lock_guard<std::mutex> lock(mutex_);
238 return smsServiceInterface_->IsImsSmsSupported(slotId, isSupported);
239 }
240 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
241 }
242
GetImsShortMessageFormat(std::u16string & format)243 int32_t SmsServiceManagerClient::GetImsShortMessageFormat(std::u16string &format)
244 {
245 if (InitSmsServiceProxy()) {
246 std::lock_guard<std::mutex> lock(mutex_);
247 return smsServiceInterface_->GetImsShortMessageFormat(format);
248 }
249 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
250 }
251
HasSmsCapability()252 bool SmsServiceManagerClient::HasSmsCapability()
253 {
254 if (InitSmsServiceProxy()) {
255 std::lock_guard<std::mutex> lock(mutex_);
256 return smsServiceInterface_->HasSmsCapability();
257 }
258 return false;
259 }
260
CreateMessage(std::string pdu,std::string specification,ShortMessage & message)261 int32_t SmsServiceManagerClient::CreateMessage(std::string pdu, std::string specification, ShortMessage &message)
262 {
263 if (InitSmsServiceProxy()) {
264 std::lock_guard<std::mutex> lock(mutex_);
265 return smsServiceInterface_->CreateMessage(pdu, specification, message);
266 }
267 return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
268 }
269
GetBase64Encode(std::string src,std::string & dest)270 bool SmsServiceManagerClient::GetBase64Encode(std::string src, std::string &dest)
271 {
272 if (InitSmsServiceProxy()) {
273 std::lock_guard<std::mutex> lock(mutex_);
274 return smsServiceInterface_->GetBase64Encode(src, dest);
275 }
276 return false;
277 }
278
GetBase64Decode(std::string src,std::string & dest)279 bool SmsServiceManagerClient::GetBase64Decode(std::string src, std::string &dest)
280 {
281 if (InitSmsServiceProxy()) {
282 std::lock_guard<std::mutex> lock(mutex_);
283 return smsServiceInterface_->GetBase64Decode(src, dest);
284 }
285 return false;
286 }
287
GetEncodeStringFunc(std::string & encodeString,uint32_t charset,uint32_t valLength,std::string strEncodeString)288 bool SmsServiceManagerClient::GetEncodeStringFunc(
289 std::string &encodeString, uint32_t charset, uint32_t valLength, std::string strEncodeString)
290 {
291 if (InitSmsServiceProxy()) {
292 std::lock_guard<std::mutex> lock(mutex_);
293 return smsServiceInterface_->GetEncodeStringFunc(encodeString, charset, valLength, strEncodeString);
294 }
295 return false;
296 }
297 } // namespace Telephony
298 } // namespace OHOS