1 /*
2  * Copyright (c) 2022-2023 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 "avsession_descriptor.h"
17 #include "avsession_log.h"
18 
19 namespace OHOS::AVSession {
WriteToParcel(Parcel & out) const20 bool AVHistoryDescriptor::WriteToParcel(Parcel& out) const
21 {
22     CHECK_AND_RETURN_RET_LOG(out.WriteString(sessionId_), false, "write sessionId failed");
23     CHECK_AND_RETURN_RET_LOG(out.WriteString(bundleName_), false, "write bundleName failed");
24     CHECK_AND_RETURN_RET_LOG(out.WriteString(abilityName_), false, "write abilityName failed");
25     return true;
26 }
27 
ReadFromParcel(Parcel & in)28 bool AVHistoryDescriptor::ReadFromParcel(Parcel& in)
29 {
30     CHECK_AND_RETURN_RET_LOG(in.ReadString(sessionId_), false, "Read sessionId failed");
31     CHECK_AND_RETURN_RET_LOG(in.ReadString(bundleName_), false, "Read bundleName failed");
32     CHECK_AND_RETURN_RET_LOG(in.ReadString(abilityName_), false, "Read abilityName failed");
33     return true;
34 }
35 
WriteToParcel(Parcel & out) const36 bool AVSessionDescriptor::WriteToParcel(Parcel& out) const
37 {
38     CHECK_AND_RETURN_RET_LOG(out.WriteString(sessionId_), false, "write sessionId failed");
39     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(sessionType_), false, "write sessionType failed");
40     CHECK_AND_RETURN_RET_LOG(out.WriteString(sessionTag_), false, "write sessionTag failed");
41     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(pid_), false, "write pid failed");
42     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(uid_), false, "write uid failed");
43     CHECK_AND_RETURN_RET_LOG(out.WriteBool(isActive_), false, "write isActive failed");
44     CHECK_AND_RETURN_RET_LOG(out.WriteBool(isTopSession_), false, "write isTopSession failed");
45 
46     int32_t deviceInfoSize = static_cast<int32_t>(outputDeviceInfo_.deviceInfos_.size());
47     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfoSize), false, "write deviceInfoSize failed");
48     for (DeviceInfo deviceInfo : outputDeviceInfo_.deviceInfos_) {
49         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.castCategory_), false, "write castCategory failed");
50         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.deviceId_), false, "write deviceId failed");
51         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.deviceName_), false, "write deviceName failed");
52         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.deviceType_), false, "write deviceType failed");
53         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.ipAddress_), false, "write ipAddress failed");
54         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.manufacturer_), false, "write manufacturer failed");
55         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.modelName_), false, "write modelName failed");
56         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.providerId_), false, "write providerId failed");
57         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.supportedProtocols_), false,
58             "write supportedProtocols failed");
59         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.authenticationStatus_), false,
60             "write authenticationStatus failed");
61         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.supportedDrmCapabilities_.size()), false,
62             "write supportedDrmCapabilities size failed");
63         for (auto supportedDrmCapability : deviceInfo.supportedDrmCapabilities_) {
64             CHECK_AND_RETURN_RET_LOG(out.WriteString(supportedDrmCapability), false,
65                 "write supportedDrmCapability failed");
66         }
67         CHECK_AND_RETURN_RET_LOG(out.WriteBool(deviceInfo.isLegacy_), false, "write isLegacy failed");
68         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.mediumTypes_), false, "write mediumTypes failed");
69     }
70     CHECK_AND_RETURN_RET_LOG(out.WriteParcelable(&elementName_), false, "write elementName failed");
71     return true;
72 }
73 
CheckBeforReadFromParcel(Parcel & in)74 bool AVSessionDescriptor::CheckBeforReadFromParcel(Parcel& in)
75 {
76     CHECK_AND_RETURN_RET_LOG(in.ReadString(sessionId_), false, "Read sessionId failed");
77     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(sessionType_), false, "Read sessionType failed");
78     CHECK_AND_RETURN_RET_LOG(in.ReadString(sessionTag_), false, "Read sessionTag failed");
79     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(pid_), false, "Read pid failed");
80     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(uid_), false, "Read uid failed");
81     CHECK_AND_RETURN_RET_LOG(in.ReadBool(isActive_), false, "Read isActive failed");
82     CHECK_AND_RETURN_RET_LOG(in.ReadBool(isTopSession_), false, "Read isTopSession failed");
83     return true;
84 }
85 
CheckBeforReadFromParcel(Parcel & in,DeviceInfo & deviceInfo)86 bool AVSessionDescriptor::CheckBeforReadFromParcel(Parcel& in, DeviceInfo& deviceInfo)
87 {
88     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.castCategory_), false, "Read castCategory failed");
89     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.deviceId_), false, "Read deviceId failed");
90     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.deviceName_), false, "Read deviceName failed");
91     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.deviceType_), false, "Read deviceType failed");
92     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.ipAddress_), false, "Read ipAddress failed");
93     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.manufacturer_), false, "Read manufacturer failed");
94     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.modelName_), false, "Read modelName failed");
95     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.providerId_), false, "Read providerId failed");
96     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.supportedProtocols_), false,
97         "Read supportedProtocols failed");
98     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.authenticationStatus_), false,
99         "Read authenticationStatus failed");
100     int32_t supportedDrmCapabilityLen = 0;
101     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(supportedDrmCapabilityLen), false,
102         "read supportedDrmCapabilityLen failed");
103     int32_t maxSupportedDrmCapabilityLen = 10;
104     CHECK_AND_RETURN_RET_LOG((supportedDrmCapabilityLen >= 0) &&
105         (supportedDrmCapabilityLen <= maxSupportedDrmCapabilityLen), false, "supportedDrmCapabilityLen is illegal");
106     std::vector<std::string> supportedDrmCapabilities;
107     for (int i = 0; i < supportedDrmCapabilityLen; i++) {
108         std::string supportedDrmCapability;
109         CHECK_AND_RETURN_RET_LOG(in.ReadString(supportedDrmCapability), false,
110             "read supportedDrmCapability failed");
111         supportedDrmCapabilities.emplace_back(supportedDrmCapability);
112     }
113     deviceInfo.supportedDrmCapabilities_ = supportedDrmCapabilities;
114     CHECK_AND_RETURN_RET_LOG(in.ReadBool(deviceInfo.isLegacy_), false, "Read isLegacy failed");
115     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.mediumTypes_), false, "Read mediumTypes failed");
116     outputDeviceInfo_.deviceInfos_.emplace_back(deviceInfo);
117     return true;
118 }
119 
ReadFromParcel(Parcel & in)120 bool AVSessionDescriptor::ReadFromParcel(Parcel& in)
121 {
122     if (!CheckBeforReadFromParcel(in)) {
123         return false;
124     }
125     int32_t deviceInfoSize;
126     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfoSize), false, "write deviceInfoSize failed");
127     int32_t maxDeviceInfoSize = 1000;
128     CHECK_AND_RETURN_RET_LOG((deviceInfoSize >= 0) && (deviceInfoSize < maxDeviceInfoSize),
129         false, "deviceInfoSize is illegal");
130     for (int j = 0; j < deviceInfoSize; j++) {
131         DeviceInfo deviceInfo;
132         if (!CheckBeforReadFromParcel(in, deviceInfo)) {
133             return false;
134         }
135     }
136 
137     sptr elementName = in.ReadParcelable<AppExecFwk::ElementName>();
138     if (elementName == nullptr) {
139         SLOGE("read element name failed");
140         return false;
141     }
142     elementName_ = *elementName;
143     return true;
144 }
145 
WriteToParcel(Parcel & out) const146 bool DeviceInfo::WriteToParcel(Parcel& out) const
147 {
148     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(castCategory_), false, "write castCategory failed");
149     CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceId_), false, "write deviceId failed");
150     CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceName_), false, "write deviceName failed");
151     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceType_), false, "write deviceType failed");
152     CHECK_AND_RETURN_RET_LOG(out.WriteString(ipAddress_), false, "write ipAddress failed");
153     CHECK_AND_RETURN_RET_LOG(out.WriteString(manufacturer_), false, "write manufacturer failed");
154     CHECK_AND_RETURN_RET_LOG(out.WriteString(modelName_), false, "write modelName failed");
155     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(providerId_), false, "write providerId failed");
156     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(supportedProtocols_), false,
157         "write supportedProtocols failed");
158     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(authenticationStatus_), false,
159         "write authenticationStatus failed");
160     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(supportedDrmCapabilities_.size()), false,
161         "write supportedDrmCapabilities size failed");
162     for (auto supportedDrmCapability : supportedDrmCapabilities_) {
163         CHECK_AND_RETURN_RET_LOG(out.WriteString(supportedDrmCapability), false,
164             "write supportedDrmCapability failed");
165     }
166     CHECK_AND_RETURN_RET_LOG(out.WriteBool(isLegacy_), false, "write isLegacy failed");
167     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(mediumTypes_), false, "write mediumTypes failed");
168     return true;
169 }
170 
ReadFromParcel(Parcel & in)171 bool DeviceInfo::ReadFromParcel(Parcel& in)
172 {
173     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(castCategory_), false, "Read castCategory failed");
174     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceId_), false, "Read deviceId failed");
175     CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceName_), false, "Read deviceName failed");
176     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceType_), false, "Read deviceType failed");
177     CHECK_AND_RETURN_RET_LOG(in.ReadString(ipAddress_), false, "Read ipAddress failed");
178     CHECK_AND_RETURN_RET_LOG(in.ReadString(manufacturer_), false, "Read manufacturer failed");
179     CHECK_AND_RETURN_RET_LOG(in.ReadString(modelName_), false, "Read modelName failed");
180     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(providerId_), false, "Read providerId failed");
181     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(supportedProtocols_), false,
182         "Read supportedProtocols failed");
183     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(authenticationStatus_), false,
184         "Read authenticationStatus failed");
185     int32_t supportedDrmCapabilityLen = 0;
186     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(supportedDrmCapabilityLen), false,
187         "read supportedDrmCapabilityLen failed");
188     int32_t maxSupportedDrmCapabilityLen = 10;
189     CHECK_AND_RETURN_RET_LOG((supportedDrmCapabilityLen >= 0) &&
190         (supportedDrmCapabilityLen <= maxSupportedDrmCapabilityLen), false, "supportedDrmCapabilityLen is illegal");
191     std::vector<std::string> supportedDrmCapabilities;
192     for (int i = 0; i < supportedDrmCapabilityLen; i++) {
193         std::string supportedDrmCapability;
194         CHECK_AND_RETURN_RET_LOG(in.ReadString(supportedDrmCapability), false,
195             "read supportedDrmCapability failed");
196         supportedDrmCapabilities.emplace_back(supportedDrmCapability);
197     }
198     supportedDrmCapabilities_ = supportedDrmCapabilities;
199     CHECK_AND_RETURN_RET_LOG(in.ReadBool(isLegacy_), false, "Read isLegacy failed");
200     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(mediumTypes_), false, "Read mediumTypes failed");
201     return true;
202 }
203 
WriteToParcel(Parcel & out) const204 bool OutputDeviceInfo::WriteToParcel(Parcel& out) const
205 {
206     int32_t deviceInfoSize = static_cast<int32_t>(deviceInfos_.size());
207     CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfoSize), false, "write deviceInfoSize failed");
208     for (DeviceInfo deviceInfo : deviceInfos_) {
209         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.castCategory_), false, "write castCategory failed");
210         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.deviceId_), false, "write deviceId failed");
211         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.deviceName_), false, "write deviceName failed");
212         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.deviceType_), false, "write deviceType failed");
213         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.ipAddress_), false, "write ipAddress failed");
214         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.manufacturer_), false, "write manufacturer failed");
215         CHECK_AND_RETURN_RET_LOG(out.WriteString(deviceInfo.modelName_), false, "write modelName failed");
216         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.providerId_), false, "write providerId failed");
217         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.supportedProtocols_), false,
218             "Read supportedProtocols failed");
219         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.authenticationStatus_), false,
220             "Read authenticationStatus failed");
221         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.supportedDrmCapabilities_.size()), false,
222             "write supportedDrmCapabilities size failed");
223         for (auto supportedDrmCapability : deviceInfo.supportedDrmCapabilities_) {
224             CHECK_AND_RETURN_RET_LOG(out.WriteString(supportedDrmCapability), false,
225                 "write supportedDrmCapability failed");
226         }
227         CHECK_AND_RETURN_RET_LOG(out.WriteBool(deviceInfo.isLegacy_), false, "write isLegacy failed");
228         CHECK_AND_RETURN_RET_LOG(out.WriteInt32(deviceInfo.mediumTypes_), false, "write mediumTypes failed");
229     }
230     return true;
231 }
232 
ReadFromParcel(Parcel & in)233 bool OutputDeviceInfo::ReadFromParcel(Parcel& in)
234 {
235     int32_t deviceInfoSize;
236     CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfoSize), false, "write deviceInfoSize failed");
237     int32_t maxDeviceInfoSize = 1000;
238     CHECK_AND_RETURN_RET_LOG((deviceInfoSize >= 0) && (deviceInfoSize < maxDeviceInfoSize),
239         false, "deviceInfoSize is illegal");
240     for (int i = 0; i < deviceInfoSize; i++) {
241         DeviceInfo deviceInfo;
242         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.castCategory_), false, "Read castCategory failed");
243         CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.deviceId_), false, "Read deviceId failed");
244         CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.deviceName_), false, "Read deviceName failed");
245         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.deviceType_), false, "Read deviceType failed");
246         CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.ipAddress_), false, "Read ipAddress failed");
247         CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.manufacturer_), false, "Read manufacturer failed");
248         CHECK_AND_RETURN_RET_LOG(in.ReadString(deviceInfo.modelName_), false, "Read modelName failed");
249         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.providerId_), false, "Read providerId failed");
250         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.supportedProtocols_), false,
251             "Read supportedProtocols failed");
252         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.authenticationStatus_), false,
253             "Read authenticationStatus failed");
254         int32_t supportedDrmCapabilityLen = 0;
255         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(supportedDrmCapabilityLen), false,
256             "read supportedDrmCapabilityLen failed");
257         int32_t maxSupportedDrmCapabilityLen = 10;
258         CHECK_AND_RETURN_RET_LOG((supportedDrmCapabilityLen >= 0) &&
259             (supportedDrmCapabilityLen <= maxSupportedDrmCapabilityLen), false, "supportedDrmCapabilityLen is illegal");
260         std::vector<std::string> supportedDrmCapabilities;
261         for (int k = 0; k < supportedDrmCapabilityLen; k++) {
262             std::string supportedDrmCapability;
263             CHECK_AND_RETURN_RET_LOG(in.ReadString(supportedDrmCapability), false,
264                 "read supportedDrmCapability failed");
265             supportedDrmCapabilities.emplace_back(supportedDrmCapability);
266         }
267         deviceInfo.supportedDrmCapabilities_ = supportedDrmCapabilities;
268         CHECK_AND_RETURN_RET_LOG(in.ReadBool(deviceInfo.isLegacy_), false, "Read isLegacy failed");
269         CHECK_AND_RETURN_RET_LOG(in.ReadInt32(deviceInfo.mediumTypes_), false, "Read mediumTypes failed");
270         deviceInfos_.emplace_back(deviceInfo);
271     }
272     return true;
273 }
274 } // namespace OHOS::AVSession
275