• 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_persist_helper.h"
17 
18 #include "ability_manager_interface.h"
19 #include "if_system_ability_manager.h"
20 #include "iservice_registry.h"
21 #include "parameter.h"
22 #include "phonenumbers/phonenumber.pb.h"
23 #include "resource_manager.h"
24 #include "string_utils.h"
25 #include "system_ability.h"
26 #include "system_ability_definition.h"
27 #include "telephony_errors.h"
28 #include "telephony_log_wrapper.h"
29 
30 namespace OHOS {
31 namespace Telephony {
32 constexpr static uint8_t SMS_TYPE_CDMA = 2;
33 const std::string SMS_URI = "datashare:///com.ohos.smsmmsability";
34 const std::string SMS_SUBSECTION = "datashare:///com.ohos.smsmmsability/sms_mms/sms_subsection";
35 const std::string SMS_MMS_INFO = "datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info";
36 const std::string SMS_SESSION = "datashare:///com.ohos.smsmmsability/sms_mms/session";
37 const std::string CONTACT_URI = "datashare:///com.ohos.contactsdataability";
38 const std::string CONTACT_BLOCK = "datashare:///com.ohos.contactsdataability/contacts/contact_blocklist";
39 const std::string CONTACT_DATA = "datashare:///com.ohos.contactsdataability/contacts/contact_data";
40 const std::string RAW_CONTACT = "datashare:///com.ohos.contactsdataability/contacts/raw_contact";
41 const std::string ISO_COUNTRY_CODE = "CN";
42 const std::string PHONE_NUMBER = "phone_number";
43 const std::string DETAIL_INFO = "detail_info";
44 const std::string TYPE_ID = "type_id";
45 std::string ID = "id";
46 const std::string RAW_CONTACT_ID = "raw_contact_id";
47 const std::string CONTACTED_COUNT = "contacted_count";
48 const std::string LASTEST_CONTACTED_TIME = "lastest_contacted_time";
49 constexpr static uint8_t TYPE_ID_VALUE = 5;
50 const std::string PREFIX = "+86";
51 const std::string NUMBER_START_STR = "192";
52 
SmsPersistHelper()53 SmsPersistHelper::SmsPersistHelper() {}
54 
~SmsPersistHelper()55 SmsPersistHelper::~SmsPersistHelper() {}
56 
CreateDataShareHelper(const std::string & uri)57 std::shared_ptr<DataShare::DataShareHelper> SmsPersistHelper::CreateDataShareHelper(const std::string &uri)
58 {
59     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
60     if (saManager == nullptr) {
61         TELEPHONY_LOGE(" Get system ability mgr failed.");
62         return nullptr;
63     }
64     auto remoteObj = saManager->GetSystemAbility(TELEPHONY_SMS_MMS_SYS_ABILITY_ID);
65     if (remoteObj == nullptr) {
66         TELEPHONY_LOGE("GetSystemAbility Service Failed.");
67         return nullptr;
68     }
69     return DataShare::DataShareHelper::Creator(remoteObj, uri);
70 }
71 
Insert(DataShare::DataShareValuesBucket & values,uint16_t & dataBaseId)72 bool SmsPersistHelper::Insert(DataShare::DataShareValuesBucket &values, uint16_t &dataBaseId)
73 {
74     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
75     if (helper == nullptr) {
76         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
77         return false;
78     }
79     Uri uri(SMS_SUBSECTION);
80     int ret = helper->Insert(uri, values);
81     helper->Release();
82     dataBaseId = ret;
83     return ret >= 0 ? true : false;
84 }
85 
Insert(std::string tableUri,DataShare::DataShareValuesBucket & values)86 bool SmsPersistHelper::Insert(std::string tableUri, DataShare::DataShareValuesBucket &values)
87 {
88     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
89     if (helper == nullptr) {
90         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
91         return false;
92     }
93     Uri uri(tableUri);
94     int ret = helper->Insert(uri, values);
95     helper->Release();
96     return ret >= 0 ? true : false;
97 }
98 
QuerySession(DataShare::DataSharePredicates & predicates,uint16_t & sessionId,uint16_t & messageCount)99 bool SmsPersistHelper::QuerySession(
100     DataShare::DataSharePredicates &predicates, uint16_t &sessionId, uint16_t &messageCount)
101 {
102     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
103     if (helper == nullptr) {
104         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
105         return false;
106     }
107     Uri uri(SMS_SESSION);
108     std::vector<std::string> columns;
109     auto resultSet = helper->Query(uri, predicates, columns);
110     if (resultSet == nullptr) {
111         TELEPHONY_LOGE("Query Result Set nullptr Failed.");
112         helper->Release();
113         return false;
114     }
115     resultSet->GoToFirstRow();
116     int32_t columnInt;
117     int columnIndex;
118     resultSet->GetColumnIndex("id", columnIndex);
119     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
120         sessionId = columnInt;
121     }
122     resultSet->GetColumnIndex("message_count", columnIndex);
123     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
124         messageCount = columnInt;
125         resultSet->Close();
126         helper->Release();
127         return true;
128     }
129     resultSet->Close();
130     helper->Release();
131     return false;
132 }
133 
Update(DataShare::DataSharePredicates & predicates,DataShare::DataShareValuesBucket & values)134 bool SmsPersistHelper::Update(DataShare::DataSharePredicates &predicates, DataShare::DataShareValuesBucket &values)
135 {
136     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
137     if (helper == nullptr) {
138         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
139         return false;
140     }
141     Uri uri(SMS_SESSION);
142     int ret = helper->Update(uri, predicates, values);
143     helper->Release();
144     return ret >= 0 ? true : false;
145 }
146 
Query(DataShare::DataSharePredicates & predicates,std::vector<SmsReceiveIndexer> & indexers)147 bool SmsPersistHelper::Query(DataShare::DataSharePredicates &predicates, std::vector<SmsReceiveIndexer> &indexers)
148 {
149     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
150     if (helper == nullptr) {
151         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
152         return false;
153     }
154     Uri uri(SMS_SUBSECTION);
155     std::vector<std::string> columns;
156     auto resultSet = helper->Query(uri, predicates, columns);
157     if (resultSet == nullptr) {
158         TELEPHONY_LOGE("Query Result Set nullptr Failed.");
159         helper->Release();
160         return false;
161     }
162 
163     int resultSetNum = resultSet->GoToFirstRow();
164     while (resultSetNum == 0) {
165         SmsReceiveIndexer indexer;
166         ResultSetConvertToIndexer(indexer, resultSet);
167         indexers.push_back(indexer);
168         resultSetNum = resultSet->GoToNextRow();
169     }
170     resultSet->Close();
171     helper->Release();
172     return true;
173 }
174 
QueryMaxGroupId(DataShare::DataSharePredicates & predicates,uint16_t & maxGroupId)175 bool SmsPersistHelper::QueryMaxGroupId(DataShare::DataSharePredicates &predicates, uint16_t &maxGroupId)
176 {
177     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
178     if (helper == nullptr) {
179         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
180         return false;
181     }
182     Uri uri(SMS_MMS_INFO);
183     std::vector<std::string> columns;
184     auto resultSet = helper->Query(uri, predicates, columns);
185     if (resultSet == nullptr) {
186         TELEPHONY_LOGE("Query Result Set nullptr Failed.");
187         helper->Release();
188         return false;
189     }
190 
191     int32_t columnInt;
192     int columnIndex;
193     resultSet->GoToLastRow();
194     resultSet->GetColumnIndex(SmsMmsInfo::GROUP_ID, columnIndex);
195     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
196         maxGroupId = columnInt;
197     }
198     resultSet->Close();
199     helper->Release();
200     return true;
201 }
202 
Delete(DataShare::DataSharePredicates & predicates)203 bool SmsPersistHelper::Delete(DataShare::DataSharePredicates &predicates)
204 {
205     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(SMS_URI);
206     if (helper == nullptr) {
207         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
208         return false;
209     }
210     Uri uri(SMS_SUBSECTION);
211     int ret = helper->Delete(uri, predicates);
212     helper->Release();
213     return ret >= 0 ? true : false;
214 }
215 
QueryBlockPhoneNumber(const std::string & phoneNum)216 bool SmsPersistHelper::QueryBlockPhoneNumber(const std::string &phoneNum)
217 {
218     bool result = false;
219     if (phoneNum.empty()) {
220         return result;
221     }
222     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(CONTACT_URI);
223     if (helper == nullptr) {
224         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
225         return false;
226     }
227     Uri uri(CONTACT_BLOCK);
228     std::vector<std::string> columns;
229     DataShare::DataSharePredicates predicates;
230     std::string nationalNum;
231     std::string internationalNum;
232     int32_t ret = FormatSmsNumber(
233         phoneNum, ISO_COUNTRY_CODE, i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::NATIONAL, nationalNum);
234     if (ret != TELEPHONY_SUCCESS) {
235         TELEPHONY_LOGE("Phone Number format Failed.");
236         nationalNum = phoneNum;
237     }
238     ret = FormatSmsNumber(phoneNum, ISO_COUNTRY_CODE,
239         i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::INTERNATIONAL, internationalNum);
240     if (ret != TELEPHONY_SUCCESS) {
241         TELEPHONY_LOGE("Phone Number format Failed.");
242         internationalNum = phoneNum;
243     }
244     predicates.EqualTo(PHONE_NUMBER, nationalNum)->Or()->EqualTo(PHONE_NUMBER, internationalNum);
245     auto resultSet = helper->Query(uri, predicates, columns);
246     if (resultSet == nullptr) {
247         TELEPHONY_LOGE("Query Result Set nullptr Failed.");
248         helper->Release();
249         return result;
250     }
251     int count = 0;
252     if (resultSet->GetRowCount(count) == 0 && count != 0) {
253         result = true;
254     }
255     resultSet->Close();
256     helper->Release();
257     return result;
258 }
259 
FormatSmsNumber(const std::string & num,std::string countryCode,const i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat formatInfo,std::string & formatNum)260 int32_t SmsPersistHelper::FormatSmsNumber(const std::string &num, std::string countryCode,
261     const i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat formatInfo, std::string &formatNum)
262 {
263     if (num.empty()) {
264         TELEPHONY_LOGE("num is nullptr!");
265         return TELEPHONY_ERR_ARGUMENT_INVALID;
266     }
267     i18n::phonenumbers::PhoneNumberUtil *phoneUtils = i18n::phonenumbers::PhoneNumberUtil::GetInstance();
268     if (phoneUtils == nullptr) {
269         TELEPHONY_LOGE("phoneUtils is nullptr");
270         return TELEPHONY_ERR_LOCAL_PTR_NULL;
271     }
272     transform(countryCode.begin(), countryCode.end(), countryCode.begin(), ::toupper);
273     i18n::phonenumbers::PhoneNumber parseResult;
274     phoneUtils->Parse(num, countryCode, &parseResult);
275     if (phoneUtils->IsValidNumber(parseResult)) {
276         phoneUtils->Format(parseResult, formatInfo, &formatNum);
277     } else {
278         std::string numTemp = "";
279         numTemp.assign(num);
280         CbnFormat(numTemp, formatInfo, formatNum);
281     }
282     if (formatNum.empty() || formatNum == "0") {
283         TELEPHONY_LOGE("FormatSmsNumber failed!");
284         return TELEPHONY_ERROR;
285     }
286     TrimSpace(formatNum);
287     return TELEPHONY_SUCCESS;
288 }
289 
CbnFormat(std::string & numTemp,const i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat formatInfo,std::string & formatNum)290 void SmsPersistHelper::CbnFormat(std::string &numTemp,
291     const i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat formatInfo, std::string &formatNum)
292 {
293     TELEPHONY_LOGD("into CbnFormat");
294     if (numTemp.substr(0, NUMBER_START_STR.size()) == NUMBER_START_STR ||
295         numTemp.substr(PREFIX.size(), NUMBER_START_STR.size()) == NUMBER_START_STR) {
296         if (formatInfo == i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::NATIONAL) {
297             if (numTemp.substr(0, PREFIX.size()) == PREFIX) {
298                 numTemp.erase(0, PREFIX.size());
299                 formatNum.assign(numTemp);
300                 return;
301             }
302             formatNum.assign(numTemp);
303             return;
304         }
305         if (formatInfo == i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::INTERNATIONAL) {
306             if (numTemp.substr(0, PREFIX.size()) == PREFIX) {
307                 formatNum.assign(numTemp);
308                 return;
309             }
310             formatNum.assign(PREFIX + numTemp);
311         }
312     }
313 }
314 
TrimSpace(std::string & num)315 void SmsPersistHelper::TrimSpace(std::string &num)
316 {
317     std::string word;
318     std::stringstream streamNum(num);
319     std::string store;
320     while (streamNum >> word) {
321         store += word;
322     }
323     num = store;
324 }
325 
UpdateContact(const std::string & address)326 bool SmsPersistHelper::UpdateContact(const std::string &address)
327 {
328     bool result = false;
329     if (address.empty()) {
330         TELEPHONY_LOGE("address empty");
331         return result;
332     }
333     int32_t rawCountId = 0;
334     int32_t contactedCount = 0;
335     bool ret = QueryContactedCount(address, rawCountId, contactedCount);
336     if (!ret) {
337         TELEPHONY_LOGE("get contacted count fail");
338         return result;
339     }
340     TELEPHONY_LOGI("rawCountId:%{public}d, contactedCount:%{public}d", rawCountId, contactedCount);
341     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(CONTACT_URI);
342     if (helper == nullptr) {
343         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
344         return false;
345     }
346     std::time_t timep;
347     int64_t currentTime = time(&timep);
348     Uri uri(RAW_CONTACT);
349     DataShare::DataSharePredicates predicates;
350     predicates.EqualTo(ID, rawCountId);
351     DataShare::DataShareValuesBucket bucket;
352     bucket.Put(CONTACTED_COUNT, contactedCount + 1);
353     bucket.Put(LASTEST_CONTACTED_TIME, std::to_string(currentTime));
354     auto updateValue = helper->Update(uri, predicates, bucket);
355     TELEPHONY_LOGI("updateValue:%{public}d", updateValue);
356     helper->Release();
357     return updateValue >= 0 ? true : false;
358 }
359 
QueryContactedCount(const std::string & address,int32_t & rawCountId,int32_t & contactedCount)360 bool SmsPersistHelper::QueryContactedCount(const std::string &address, int32_t &rawCountId, int32_t &contactedCount)
361 {
362     bool ret = QueryRawContactId(address, rawCountId);
363     if (!ret) {
364         TELEPHONY_LOGE("no sms address in contact");
365         return ret;
366     }
367     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(CONTACT_URI);
368     if (helper == nullptr) {
369         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
370         return false;
371     }
372     Uri uri(RAW_CONTACT);
373     std::vector<std::string> columns;
374     DataShare::DataSharePredicates predicates;
375     predicates.EqualTo(ID, rawCountId);
376     auto resultSet = helper->Query(uri, predicates, columns);
377     bool result = false;
378     if (resultSet == nullptr) {
379         TELEPHONY_LOGE("result set nullptr.");
380         helper->Release();
381         return result;
382     }
383     int32_t count = 0;
384     if (resultSet->GetRowCount(count) == 0 && count != 0) {
385         resultSet->GoToFirstRow();
386         int columnIndex;
387         resultSet->GetColumnIndex(CONTACTED_COUNT, columnIndex);
388         if (resultSet->GetInt(columnIndex, contactedCount) == 0) {
389             result = true;
390         }
391     }
392     resultSet->Close();
393     helper->Release();
394     return result;
395 }
396 
QueryRawContactId(const std::string & address,int32_t & rawCountId)397 bool SmsPersistHelper::QueryRawContactId(const std::string &address, int32_t &rawCountId)
398 {
399     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(CONTACT_URI);
400     if (helper == nullptr) {
401         TELEPHONY_LOGE("Create Data Ability Helper nullptr Failed.");
402         return false;
403     }
404     Uri uri(CONTACT_DATA);
405     std::vector<std::string> columns;
406     DataShare::DataSharePredicates predicates;
407     std::string nationalNum;
408     std::string internationalNum;
409     int32_t ret = FormatSmsNumber(
410         address, ISO_COUNTRY_CODE, i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::NATIONAL, nationalNum);
411     if (ret != TELEPHONY_SUCCESS) {
412         TELEPHONY_LOGE("Phone Number format Failed.");
413         nationalNum = address;
414     }
415     ret = FormatSmsNumber(address, ISO_COUNTRY_CODE,
416         i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat::INTERNATIONAL, internationalNum);
417     if (ret != TELEPHONY_SUCCESS) {
418         TELEPHONY_LOGE("Phone Number format Failed.");
419         internationalNum = address;
420     }
421     predicates.EqualTo(DETAIL_INFO, nationalNum)->Or()->EqualTo(DETAIL_INFO, internationalNum);
422     predicates.EqualTo(TYPE_ID, TYPE_ID_VALUE);
423     auto resultSet = helper->Query(uri, predicates, columns);
424     bool result = false;
425     if (resultSet == nullptr) {
426         TELEPHONY_LOGE("result set nullptr.");
427         helper->Release();
428         return result;
429     }
430     int32_t count = 0;
431     if (resultSet->GetRowCount(count) == 0 && count != 0) {
432         resultSet->GoToFirstRow();
433         int columnIndex;
434         resultSet->GetColumnIndex(RAW_CONTACT_ID, columnIndex);
435         if (resultSet->GetInt(columnIndex, rawCountId) == 0) {
436             result = true;
437         }
438     }
439     resultSet->Close();
440     helper->Release();
441     return result;
442 }
443 
QueryParamBoolean(const std::string key,bool defValue)444 bool SmsPersistHelper::QueryParamBoolean(const std::string key, bool defValue)
445 {
446     const int PARAM_SIZE = 64;
447     char paramOutBuff[PARAM_SIZE] = { 0 };
448     std::string defStrValue = defValue ? "1" : "0";
449     std::string paramValue(defStrValue);
450 
451     int retLen = GetParameter(key.c_str(), defStrValue.c_str(), paramOutBuff, PARAM_SIZE);
452     if (retLen > 0) {
453         paramOutBuff[retLen] = '\0';
454         paramValue.assign(paramOutBuff, retLen);
455     }
456 
457     TELEPHONY_LOGI("QueryParamBoolean: %{public}zu : %{public}s", paramValue.size(), paramValue.c_str());
458     if ((paramValue == std::string("1")) || (paramValue == std::string("y")) || (paramValue == std::string("yes")) ||
459         (paramValue == std::string("on")) || (paramValue == std::string("true"))) {
460         return true;
461     } else if ((paramValue == std::string("0")) || (paramValue == std::string("n")) ||
462                (paramValue == std::string("no")) || (paramValue == std::string("off")) ||
463                (paramValue == std::string("false"))) {
464         return false;
465     }
466     return defValue;
467 }
468 
ConvertIntToIndexer(SmsReceiveIndexer & info,const std::shared_ptr<DataShare::DataShareResultSet> & resultSet)469 void SmsPersistHelper::ConvertIntToIndexer(
470     SmsReceiveIndexer &info, const std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
471 {
472     int32_t columnInt;
473     int columnIndex;
474     resultSet->GetColumnIndex(SmsSubsection::FORMAT, columnIndex);
475     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
476         info.SetIsCdma(columnInt == SMS_TYPE_CDMA);
477     }
478 
479     resultSet->GetColumnIndex(SmsSubsection::SMS_SUBSECTION_ID, columnIndex);
480     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
481         info.SetMsgRefId(columnInt);
482     }
483 
484     resultSet->GetColumnIndex(SmsSubsection::SIZE, columnIndex);
485     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
486         info.SetMsgCount(columnInt);
487     }
488 
489     resultSet->GetColumnIndex(SmsSubsection::SUBSECTION_INDEX, columnIndex);
490     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
491         info.SetMsgSeqId(columnInt);
492     }
493 
494     resultSet->GetColumnIndex(SmsSubsection::DEST_PORT, columnIndex);
495     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
496         info.SetDestPort(columnInt);
497     }
498 
499     resultSet->GetColumnIndex(SmsSubsection::ID, columnIndex);
500     if (resultSet->GetInt(columnIndex, columnInt) == 0) {
501         info.SetDataBaseId(columnInt);
502     }
503 }
504 
ConvertStringToIndexer(SmsReceiveIndexer & info,const std::shared_ptr<DataShare::DataShareResultSet> & resultSet)505 void SmsPersistHelper::ConvertStringToIndexer(
506     SmsReceiveIndexer &info, const std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
507 {
508     int columnIndex;
509     std::string columnValue;
510     resultSet->GetColumnIndex(SmsSubsection::RECEIVER_NUMBER, columnIndex);
511     if (resultSet->GetString(columnIndex, columnValue) == 0) {
512         info.SetVisibleAddress(columnValue);
513     }
514     resultSet->GetColumnIndex(SmsSubsection::SENDER_NUMBER, columnIndex);
515     if (resultSet->GetString(columnIndex, columnValue) == 0) {
516         info.SetOriginatingAddress(columnValue);
517     }
518 
519     resultSet->GetColumnIndex(SmsSubsection::START_TIME, columnIndex);
520     if (resultSet->GetString(columnIndex, columnValue) == 0) {
521         info.SetTimestamp(std::stol(columnValue));
522     }
523     resultSet->GetColumnIndex(SmsSubsection::END_TIME, columnIndex);
524     if (resultSet->GetString(columnIndex, columnValue) == 0) {
525         info.SetTimestamp(std::stol(columnValue));
526     }
527 
528     resultSet->GetColumnIndex(SmsSubsection::REW_PUD, columnIndex);
529     if (resultSet->GetString(columnIndex, columnValue) == 0) {
530         info.SetPdu(StringUtils::HexToByteVector(columnValue));
531     }
532 }
533 
ResultSetConvertToIndexer(SmsReceiveIndexer & info,const std::shared_ptr<DataShare::DataShareResultSet> & resultSet)534 void SmsPersistHelper::ResultSetConvertToIndexer(
535     SmsReceiveIndexer &info, const std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
536 {
537     ConvertIntToIndexer(info, resultSet);
538     ConvertStringToIndexer(info, resultSet);
539 }
540 } // namespace Telephony
541 } // namespace OHOS
542