• 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 "pbap_pce_parameter.h"
17 #include <algorithm>
18 #include <codecvt>
19 #include <fstream>
20 #include <locale>
21 #include <sstream>
22 #include "bt_def.h"
23 #include "ios"
24 #include "istream"
25 #include "iterator"
26 #include "new"
27 #include "ostream"
28 #include <cstdio>
29 #include "streambuf"
30 #include "string"
31 #include "vector"
32 
33 namespace OHOS {
34 namespace bluetooth {
IPbapPullPhoneBookParam()35 IPbapPullPhoneBookParam::IPbapPullPhoneBookParam()
36     : name_(u""),
37       propertySelector_(0),
38       format_(0),
39       maxListCount_(0),
40       listStartOffset_(0),
41       resetNewMissedCalls_(0),
42       vCardSelector_(0),
43       vCardSelectorOp_(0),
44       specifiedBitset_(0ULL)
45 {}
46 
~IPbapPullPhoneBookParam()47 IPbapPullPhoneBookParam::~IPbapPullPhoneBookParam()
48 {}
49 
IPbapPullPhoneBookParam(const IPbapPullPhoneBookParam & other)50 IPbapPullPhoneBookParam::IPbapPullPhoneBookParam(const IPbapPullPhoneBookParam &other)
51     : name_(other.name_),
52       propertySelector_(other.propertySelector_),
53       format_(other.format_),
54       maxListCount_(other.maxListCount_),
55       listStartOffset_(other.listStartOffset_),
56       resetNewMissedCalls_(other.resetNewMissedCalls_),
57       vCardSelector_(other.vCardSelector_),
58       vCardSelectorOp_(other.vCardSelectorOp_),
59       specifiedBitset_(other.specifiedBitset_)
60 {}
61 
ToDebugString() const62 std::string IPbapPullPhoneBookParam::ToDebugString() const
63 {
64     std::stringstream ss;
65     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
66     ss << "IPbapPullPhoneBookParam:" << std::endl;
67     ss << "name:" << converter.to_bytes(GetName())
68        << std::endl;
69     if (IsSpecified(IPbapPullPhoneBookParam::PROPERTY_SELECTOR)) {
70         ss << "propertySelector:" << GetPropertySelector() << std::endl;
71     }
72     if (IsSpecified(IPbapPullPhoneBookParam::FORMAT)) {
73         ss << "format:" << static_cast<int>(GetFormat()) << std::endl;
74     }
75     if (IsSpecified(IPbapPullPhoneBookParam::MAX_LIST_COUNT)) {
76         ss << "maxListCount:" << GetMaxListCount() << std::endl;
77     }
78     if (IsSpecified(IPbapPullPhoneBookParam::LIST_START_OFFSET)) {
79         ss << "listStartOffset:" << GetListStartOffset() << std::endl;
80     }
81     if (IsSpecified(IPbapPullPhoneBookParam::RESET_NEW_MISSED_CALLS)) {
82         ss << "resetNewMissedCalls:" << static_cast<int>(GetResetNewMissedCalls()) << std::endl;
83     }
84     if (IsSpecified(IPbapPullPhoneBookParam::VCARD_SELECTOR)) {
85         ss << "vCardSelector:" << GetvCardSelector() << std::endl;
86     }
87     if (IsSpecified(IPbapPullPhoneBookParam::VCARD_SELECTOROP)) {
88         ss << "vCardSelectorOp:" << static_cast<int>(GetvCardSelectorOp()) << std::endl;
89     }
90     return ss.str();
91 }
92 
Validate() const93 bool IPbapPullPhoneBookParam::Validate() const
94 {
95     if ((format_ != PBAP_FORMAT_VCARD2_1) && (format_ != PBAP_FORMAT_VCARD3_0)) {
96         return false;
97     }
98 
99     if ((vCardSelectorOp_ != PBAP_SELECTOR_OPERATOR_OR) && (vCardSelectorOp_ != PBAP_SELECTOR_OPERATOR_AND)) {
100         return false;
101     }
102 
103     return true;
104 }
105 
GetName() const106 std::u16string IPbapPullPhoneBookParam::GetName() const
107 {
108     return name_;
109 }
110 
SetName(const std::u16string & name)111 void IPbapPullPhoneBookParam::SetName(const std::u16string &name)
112 {
113     name_ = name;
114     specifiedBitset_ |= NAME;
115 }
116 
GetPropertySelector() const117 uint64_t IPbapPullPhoneBookParam::GetPropertySelector() const
118 {
119     return propertySelector_;
120 }
121 
SetPropertySelector(uint64_t propertySelector)122 void IPbapPullPhoneBookParam::SetPropertySelector(uint64_t propertySelector)
123 {
124     propertySelector_ = propertySelector;
125     specifiedBitset_ |= PROPERTY_SELECTOR;
126 }
127 
GetFormat() const128 uint8_t IPbapPullPhoneBookParam::GetFormat() const
129 {
130     return format_;
131 }
132 
SetFormat(uint8_t format)133 void IPbapPullPhoneBookParam::SetFormat(uint8_t format)
134 {
135     format_ = format;
136     specifiedBitset_ |= FORMAT;
137 }
138 
GetMaxListCount() const139 uint16_t IPbapPullPhoneBookParam::GetMaxListCount() const
140 {
141     return maxListCount_;
142 }
143 
SetMaxListCount(uint16_t maxListCount)144 void IPbapPullPhoneBookParam::SetMaxListCount(uint16_t maxListCount)
145 {
146     maxListCount_ = maxListCount;
147     specifiedBitset_ |= MAX_LIST_COUNT;
148 }
149 
GetListStartOffset() const150 uint16_t IPbapPullPhoneBookParam::GetListStartOffset() const
151 {
152     return listStartOffset_;
153 }
154 
SetListStartOffset(uint16_t listStartOffset)155 void IPbapPullPhoneBookParam::SetListStartOffset(uint16_t listStartOffset)
156 {
157     listStartOffset_ = listStartOffset;
158     specifiedBitset_ |= LIST_START_OFFSET;
159 }
160 
GetResetNewMissedCalls() const161 uint8_t IPbapPullPhoneBookParam::GetResetNewMissedCalls() const
162 {
163     return resetNewMissedCalls_;
164 }
165 
SetResetNewMissedCalls(uint8_t resetNewMissedCalls)166 void IPbapPullPhoneBookParam::SetResetNewMissedCalls(uint8_t resetNewMissedCalls)
167 {
168     resetNewMissedCalls_ = resetNewMissedCalls;
169     specifiedBitset_ |= RESET_NEW_MISSED_CALLS;
170 }
171 
GetvCardSelector() const172 uint64_t IPbapPullPhoneBookParam::GetvCardSelector() const
173 {
174     return vCardSelector_;
175 }
176 
SetvCardSelector(uint64_t vCardSelector)177 void IPbapPullPhoneBookParam::SetvCardSelector(uint64_t vCardSelector)
178 {
179     vCardSelector_ = vCardSelector;
180     specifiedBitset_ |= VCARD_SELECTOR;
181 }
182 
GetvCardSelectorOp() const183 uint8_t IPbapPullPhoneBookParam::GetvCardSelectorOp() const
184 {
185     return vCardSelectorOp_;
186 }
187 
SetvCardSelectorOp(uint8_t vCardSelectorOp)188 void IPbapPullPhoneBookParam::SetvCardSelectorOp(uint8_t vCardSelectorOp)
189 {
190     vCardSelectorOp_ = vCardSelectorOp;
191     specifiedBitset_ |= VCARD_SELECTOROP;
192 }
193 
GetSpecifiedBitset() const194 uint64_t IPbapPullPhoneBookParam::GetSpecifiedBitset() const
195 {
196     return specifiedBitset_;
197 }
198 
SetSpecifiedBitset(uint64_t specifiedBitset)199 void IPbapPullPhoneBookParam::SetSpecifiedBitset(uint64_t specifiedBitset)
200 {
201     specifiedBitset_ = specifiedBitset;
202 }
203 
IsSpecified(int bitSpecified) const204 bool IPbapPullPhoneBookParam::IsSpecified(int bitSpecified) const
205 {
206     if (bitSpecified & specifiedBitset_) {
207         return true;
208     } else {
209         return false;
210     }
211 }
212 
213 // IPbapPullvCardListingParam
IPbapPullvCardListingParam()214 IPbapPullvCardListingParam::IPbapPullvCardListingParam()
215     : name_(u""),
216       order_(0),
217       searchValue_(""),
218       searchProperty_(0),
219       maxListCount_(0),
220       listStartOffset_(0),
221       resetNewMissedCalls_(0),
222       vCardSelector_(0),
223       vCardSelectorOp_(0),
224       specifiedBitset_(0ULL)
225 {}
226 
~IPbapPullvCardListingParam()227 IPbapPullvCardListingParam::~IPbapPullvCardListingParam()
228 {}
229 
IPbapPullvCardListingParam(const IPbapPullvCardListingParam & other)230 IPbapPullvCardListingParam::IPbapPullvCardListingParam(const IPbapPullvCardListingParam &other)
231     : name_(other.name_),
232       order_(other.order_),
233       searchValue_(other.searchValue_),
234       searchProperty_(other.searchProperty_),
235       maxListCount_(other.maxListCount_),
236       listStartOffset_(other.listStartOffset_),
237       resetNewMissedCalls_(other.resetNewMissedCalls_),
238       vCardSelector_(other.vCardSelector_),
239       vCardSelectorOp_(other.vCardSelectorOp_),
240       specifiedBitset_(other.specifiedBitset_)
241 {}
242 
ToDebugString() const243 std::string IPbapPullvCardListingParam::ToDebugString() const
244 {
245     std::stringstream ss;
246     ss << "IPbapPullvCardListingParam:" << std::endl;
247     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
248     ss << "name:" << converter.to_bytes(GetName())
249        << std::endl;
250     if (IsSpecified(IPbapPullvCardListingParam::ORDER)) {
251         ss << "order:" << static_cast<int>(GetOrder()) << std::endl;
252     }
253     if (IsSpecified(IPbapPullvCardListingParam::SEARCH_VALUE)) {
254         ss << "searchValue:" << GetSearchValue() << std::endl;
255     }
256     if (IsSpecified(IPbapPullvCardListingParam::SEARCH_PROPERTY)) {
257         ss << "searchProperty:" << static_cast<int>(GetSearchProperty()) << std::endl;
258     }
259     if (IsSpecified(IPbapPullvCardListingParam::MAX_LIST_COUNT)) {
260         ss << "maxListCount:" << GetMaxListCount() << std::endl;
261     }
262     if (IsSpecified(IPbapPullvCardListingParam::LIST_START_OFFSET)) {
263         ss << "listStartOffset:" << GetListStartOffset() << std::endl;
264     }
265     if (IsSpecified(IPbapPullvCardListingParam::RESET_NEW_MISSED_CALLS)) {
266         ss << "resetNewMissedCalls:" << static_cast<int>(GetResetNewMissedCalls()) << std::endl;
267     }
268     if (IsSpecified(IPbapPullvCardListingParam::VCARD_SELECTOR)) {
269         ss << "vCardSelector:" << GetvCardSelector() << std::endl;
270     }
271     if (IsSpecified(IPbapPullvCardListingParam::VCARD_SELECTOROP)) {
272         ss << "vCardSelectorOp:" << static_cast<int>(GetvCardSelectorOp()) << std::endl;
273     }
274     return ss.str();
275 }
276 
Validate() const277 bool IPbapPullvCardListingParam::Validate() const
278 {
279     std::vector<int> orders = {
280         PBAP_ORDER_INDEXED,
281         PBAP_ORDER_ALPHANUMERIC,
282         PBAP_ORDER_PHONETIC
283     };
284     if (std::find(orders.begin(), orders.end(), order_) == orders.end()) {
285         return false;
286     }
287 
288     std::vector<int> searchProperties = {
289         PBAP_SEARCH_PROPERTY_NAME,
290         PBAP_SEARCH_PROPERTY_NUMBER,
291         PBAP_SEARCH_PROPERTY_SOUND
292     };
293     if (std::find(searchProperties.begin(), searchProperties.end(), searchProperty_) == searchProperties.end()) {
294         return false;
295     }
296 
297     if ((vCardSelectorOp_ != PBAP_SELECTOR_OPERATOR_OR) && (vCardSelectorOp_ != PBAP_SELECTOR_OPERATOR_AND)) {
298         return false;
299     }
300     return true;
301 }
302 
GetName() const303 std::u16string IPbapPullvCardListingParam::GetName() const
304 {
305     return name_;
306 }
307 
SetName(const std::u16string & name)308 void IPbapPullvCardListingParam::SetName(const std::u16string &name)
309 {
310     name_ = name;
311     specifiedBitset_ |= NAME;
312 }
313 
GetOrder() const314 uint8_t IPbapPullvCardListingParam::GetOrder() const
315 {
316     return order_;
317 }
318 
SetOrder(uint8_t order)319 void IPbapPullvCardListingParam::SetOrder(uint8_t order)
320 {
321     order_ = order;
322     specifiedBitset_ |= ORDER;
323 }
324 
GetSearchValue() const325 std::string IPbapPullvCardListingParam::GetSearchValue() const
326 {
327     return searchValue_;
328 }
329 
SetSearchValue(const std::string & searchValue)330 void IPbapPullvCardListingParam::SetSearchValue(const std::string &searchValue)
331 {
332     searchValue_ = searchValue;
333     specifiedBitset_ |= SEARCH_VALUE;
334 }
335 
GetSearchProperty() const336 uint8_t IPbapPullvCardListingParam::GetSearchProperty() const
337 {
338     return searchProperty_;
339 }
340 
SetSearchProperty(uint8_t searchProperty)341 void IPbapPullvCardListingParam::SetSearchProperty(uint8_t searchProperty)
342 {
343     searchProperty_ = searchProperty;
344     specifiedBitset_ |= SEARCH_PROPERTY;
345 }
346 
GetMaxListCount() const347 uint16_t IPbapPullvCardListingParam::GetMaxListCount() const
348 {
349     return maxListCount_;
350 }
351 
SetMaxListCount(uint16_t maxListCount)352 void IPbapPullvCardListingParam::SetMaxListCount(uint16_t maxListCount)
353 {
354     maxListCount_ = maxListCount;
355     specifiedBitset_ |= MAX_LIST_COUNT;
356 }
357 
GetListStartOffset() const358 uint16_t IPbapPullvCardListingParam::GetListStartOffset() const
359 {
360     return listStartOffset_;
361 }
362 
SetListStartOffset(uint16_t listStartOffset)363 void IPbapPullvCardListingParam::SetListStartOffset(uint16_t listStartOffset)
364 {
365     listStartOffset_ = listStartOffset;
366     specifiedBitset_ |= LIST_START_OFFSET;
367 }
368 
GetResetNewMissedCalls() const369 uint8_t IPbapPullvCardListingParam::GetResetNewMissedCalls() const
370 {
371     return resetNewMissedCalls_;
372 }
373 
SetResetNewMissedCalls(uint8_t resetNewMissedCalls)374 void IPbapPullvCardListingParam::SetResetNewMissedCalls(uint8_t resetNewMissedCalls)
375 {
376     resetNewMissedCalls_ = resetNewMissedCalls;
377     specifiedBitset_ |= RESET_NEW_MISSED_CALLS;
378 }
379 
GetvCardSelector() const380 uint64_t IPbapPullvCardListingParam::GetvCardSelector() const
381 {
382     return vCardSelector_;
383 }
384 
SetvCardSelector(uint64_t vCardSelector)385 void IPbapPullvCardListingParam::SetvCardSelector(uint64_t vCardSelector)
386 {
387     vCardSelector_ = vCardSelector;
388     specifiedBitset_ |= VCARD_SELECTOR;
389 }
390 
GetvCardSelectorOp() const391 uint8_t IPbapPullvCardListingParam::GetvCardSelectorOp() const
392 {
393     return vCardSelectorOp_;
394 }
395 
SetvCardSelectorOp(uint8_t vCardSelectorOp)396 void IPbapPullvCardListingParam::SetvCardSelectorOp(uint8_t vCardSelectorOp)
397 {
398     vCardSelectorOp_ = vCardSelectorOp;
399     specifiedBitset_ |= VCARD_SELECTOROP;
400 }
401 
GetSpecifiedBitset() const402 uint64_t IPbapPullvCardListingParam::GetSpecifiedBitset() const
403 {
404     return specifiedBitset_;
405 }
406 
SetSpecifiedBitset(uint64_t specifiedBitset)407 void IPbapPullvCardListingParam::SetSpecifiedBitset(uint64_t specifiedBitset)
408 {
409     specifiedBitset_ = specifiedBitset;
410 }
411 
IsSpecified(int bitSpecified) const412 bool IPbapPullvCardListingParam::IsSpecified(int bitSpecified) const
413 {
414     if (bitSpecified & specifiedBitset_) {
415         return true;
416     } else {
417         return false;
418     }
419 }
420 
421 // IPbapPullvCardEntryParam
IPbapPullvCardEntryParam()422 IPbapPullvCardEntryParam::IPbapPullvCardEntryParam()
423     : name_(u""), propertySelector_(0), format_(0), specifiedBitset_(0ULL)
424 {}
425 
~IPbapPullvCardEntryParam()426 IPbapPullvCardEntryParam::~IPbapPullvCardEntryParam()
427 {}
428 
IPbapPullvCardEntryParam(const IPbapPullvCardEntryParam & other)429 IPbapPullvCardEntryParam::IPbapPullvCardEntryParam(const IPbapPullvCardEntryParam &other)
430     : name_(other.name_),
431       propertySelector_(other.propertySelector_),
432       format_(other.format_),
433       specifiedBitset_(other.specifiedBitset_)
434 {}
435 
ToDebugString() const436 std::string IPbapPullvCardEntryParam::ToDebugString() const
437 {
438     std::stringstream ss;
439     ss << "IPbapPullvCardEntryParam:" << std::endl;
440     std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
441     ss << "name:" << converter.to_bytes(GetName())
442        << std::endl;
443     if (IsSpecified(IPbapPullvCardEntryParam::PROPERTY_SELECTOR)) {
444         ss << "propertySelector:" << GetPropertySelector() << std::endl;
445     }
446     if (IsSpecified(IPbapPullvCardEntryParam::FORMAT)) {
447         ss << "format:" << static_cast<int>(GetFormat()) << std::endl;
448     }
449     return ss.str();
450 }
451 
Validate() const452 bool IPbapPullvCardEntryParam::Validate() const
453 {
454     if ((format_ != PBAP_FORMAT_VCARD2_1) && (format_ != PBAP_FORMAT_VCARD3_0)) {
455         return false;
456     }
457 
458     return true;
459 }
460 
GetName() const461 std::u16string IPbapPullvCardEntryParam::GetName() const
462 {
463     return name_;
464 }
465 
SetName(const std::u16string & name)466 void IPbapPullvCardEntryParam::SetName(const std::u16string &name)
467 {
468     name_ = name;
469     specifiedBitset_ |= NAME;
470 }
471 
GetPropertySelector() const472 uint64_t IPbapPullvCardEntryParam::GetPropertySelector() const
473 {
474     return propertySelector_;
475 }
476 
SetPropertySelector(uint64_t propertySelector)477 void IPbapPullvCardEntryParam::SetPropertySelector(uint64_t propertySelector)
478 {
479     propertySelector_ = propertySelector;
480     specifiedBitset_ |= PROPERTY_SELECTOR;
481 }
482 
GetFormat() const483 uint8_t IPbapPullvCardEntryParam::GetFormat() const
484 {
485     return format_;
486 }
487 
SetFormat(uint8_t format)488 void IPbapPullvCardEntryParam::SetFormat(uint8_t format)
489 {
490     format_ = format;
491     specifiedBitset_ |= FORMAT;
492 }
493 
GetSpecifiedBitset() const494 uint64_t IPbapPullvCardEntryParam::GetSpecifiedBitset() const
495 {
496     return specifiedBitset_;
497 }
498 
SetSpecifiedBitset(uint64_t specifiedBitset)499 void IPbapPullvCardEntryParam::SetSpecifiedBitset(uint64_t specifiedBitset)
500 {
501     specifiedBitset_ = specifiedBitset;
502 }
503 
IsSpecified(int bitSpecified) const504 bool IPbapPullvCardEntryParam::IsSpecified(int bitSpecified) const
505 {
506     if (bitSpecified & specifiedBitset_) {
507         return true;
508     } else {
509         return false;
510     }
511 }
512 
513 // IPbapPhoneBookData
IPbapPhoneBookData()514 IPbapPhoneBookData::IPbapPhoneBookData()
515     : phoneBookSize_(0),
516       primaryFolderVersion_(),
517       secondaryFolderVersion_(),
518       databaseIdentifier_(),
519       deviceAddr_(""),
520       vcardPath_(""),
521       vcardFileName_(""),
522       resultLoaded_(1),
523       result_()
524 {}
525 
~IPbapPhoneBookData()526 IPbapPhoneBookData::~IPbapPhoneBookData()
527 {}
528 
IPbapPhoneBookData(const IPbapPhoneBookData & other)529 IPbapPhoneBookData::IPbapPhoneBookData(const IPbapPhoneBookData &other)
530     : phoneBookSize_(other.phoneBookSize_),
531       primaryFolderVersion_(other.primaryFolderVersion_),
532       secondaryFolderVersion_(other.secondaryFolderVersion_),
533       databaseIdentifier_(other.databaseIdentifier_),
534       deviceAddr_(other.deviceAddr_),
535       vcardPath_(other.vcardPath_),
536       vcardFileName_(other.vcardFileName_),
537       resultLoaded_(other.resultLoaded_),
538       result_(other.result_)
539 {}
540 
Load(std::vector<uint8_t> & retResult)541 void IPbapPhoneBookData::Load(std::vector<uint8_t> &retResult)
542 {
543     std::string fileName = deviceAddr_ + vcardPath_ + vcardFileName_;
544     std::ifstream ifs(fileName, std::ios::in | std::ios::binary);
545     if (!ifs.is_open() || resultLoaded_ == 1) {
546         return;
547     } else {
548         retResult.clear();
549         retResult.assign((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
550         resultLoaded_ = 1;
551         ifs.close();
552         remove(fileName.c_str());
553     }
554     return;
555 }
556 }  // namespace bluetooth
557 }  // namespace OHOS