1 /*
2  * Copyright (C) 2022 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 "bluetooth_ble_scan_filter.h"
17 #include "bluetooth_bt_uuid.h"
18 
19 namespace OHOS {
20 namespace Bluetooth {
Marshalling(Parcel & parcel) const21 bool BluetoothBleScanFilter::Marshalling(Parcel &parcel) const
22 {
23     if (!parcel.WriteString(deviceId_)) {
24         return false;
25     }
26     if (!parcel.WriteString(name_)) {
27         return false;
28     }
29     if (!parcel.WriteBool(hasServiceUuid_)) {
30         return false;
31     }
32     if (!parcel.WriteBool(hasServiceUuidMask_)) {
33         return false;
34     }
35     if (!parcel.WriteBool(hasSolicitationUuid_)) {
36         return false;
37     }
38     if (!parcel.WriteBool(hasSolicitationUuidMask_)) {
39         return false;
40     }
41     BluetoothUuid serviceUuid = BluetoothUuid(serviceUuid_);
42     if (!parcel.WriteParcelable(&serviceUuid)) {
43         return false;
44     }
45     BluetoothUuid serviceUuidMask = BluetoothUuid(serviceUuidMask_);
46     if (!parcel.WriteParcelable(&serviceUuidMask)) {
47         return false;
48     }
49     BluetoothUuid serviceSolicitationUuid = BluetoothUuid(serviceSolicitationUuid_);
50     if (!parcel.WriteParcelable(&serviceSolicitationUuid)) {
51         return false;
52     }
53     BluetoothUuid serviceSolicitationUuidMask = BluetoothUuid(serviceSolicitationUuidMask_);
54     if (!parcel.WriteParcelable(&serviceSolicitationUuidMask)) {
55         return false;
56     }
57     if (!parcel.WriteUInt8Vector(serviceData_)) {
58         return false;
59     }
60     if (!parcel.WriteUInt8Vector(serviceDataMask_)) {
61         return false;
62     }
63     if (!parcel.WriteUint16(manufacturerId_)) {
64         return false;
65     }
66     if (!parcel.WriteUInt8Vector(manufactureData_)) {
67         return false;
68     }
69     if (!parcel.WriteUInt8Vector(manufactureDataMask_)) {
70         return false;
71     }
72     if (!parcel.WriteBool(advIndReport_)) {
73         return false;
74     }
75     return true;
76 }
77 
Unmarshalling(Parcel & parcel)78 BluetoothBleScanFilter *BluetoothBleScanFilter::Unmarshalling(Parcel &parcel)
79 {
80     BluetoothBleScanFilter *filter = new BluetoothBleScanFilter();
81     if (filter != nullptr && !filter->ReadFromParcel(parcel)) {
82         delete filter;
83         filter = nullptr;
84     }
85     return filter;
86 }
87 
WriteToParcel(Parcel & parcel)88 bool BluetoothBleScanFilter::WriteToParcel(Parcel &parcel)
89 {
90     return Marshalling(parcel);
91 }
92 
ReadFromParcel(Parcel & parcel)93 bool BluetoothBleScanFilter::ReadFromParcel(Parcel &parcel)
94 {
95     if (!parcel.ReadString(deviceId_)) {
96         return false;
97     }
98     if (!parcel.ReadString(name_)) {
99         return false;
100     }
101     if (!parcel.ReadBool(hasServiceUuid_)) {
102         return false;
103     }
104     if (!parcel.ReadBool(hasServiceUuidMask_)) {
105         return false;
106     }
107     if (!parcel.ReadBool(hasSolicitationUuid_)) {
108         return false;
109     }
110     if (!parcel.ReadBool(hasSolicitationUuidMask_)) {
111         return false;
112     }
113     if (!ReadUuidFromParcel(parcel)) {
114         return false;
115     }
116     if (!parcel.ReadUInt8Vector(&serviceDataMask_)) {
117         return false;
118     }
119     if (!parcel.ReadUint16(manufacturerId_)) {
120         return false;
121     }
122     if (!parcel.ReadUInt8Vector(&manufactureData_)) {
123         return false;
124     }
125     if (!parcel.ReadUInt8Vector(&manufactureDataMask_)) {
126         return false;
127     }
128     if (!parcel.ReadBool(advIndReport_)) {
129         return false;
130     }
131     return true;
132 }
133 
ReadUuidFromParcel(Parcel & parcel)134 bool BluetoothBleScanFilter::ReadUuidFromParcel(Parcel &parcel)
135 {
136     std::shared_ptr<BluetoothUuid> serviceUuid(parcel.ReadParcelable<BluetoothUuid>());
137     if (!serviceUuid) {
138         return false;
139     }
140     serviceUuid_ = BluetoothUuid(*serviceUuid);
141     std::shared_ptr<BluetoothUuid> serviceUuidMask(parcel.ReadParcelable<BluetoothUuid>());
142     if (!serviceUuidMask) {
143         return false;
144     }
145     serviceUuidMask_ = BluetoothUuid(*serviceUuidMask);
146     std::shared_ptr<BluetoothUuid> serviceSolicitationUuid(parcel.ReadParcelable<BluetoothUuid>());
147     if (!serviceSolicitationUuid) {
148         return false;
149     }
150     serviceSolicitationUuid_ = BluetoothUuid(*serviceSolicitationUuid);
151     std::shared_ptr<BluetoothUuid> serviceSolicitationUuidMask(parcel.ReadParcelable<BluetoothUuid>());
152     if (!serviceSolicitationUuidMask) {
153         return false;
154     }
155     serviceSolicitationUuidMask_ = BluetoothUuid(*serviceSolicitationUuidMask);
156     if (!parcel.ReadUInt8Vector(&serviceData_)) {
157         return false;
158     }
159     return true;
160 }
161 }  // namespace Bluetooth
162 }  // namespace OHOS
163