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