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