1 /*
2 * Copyright (c) 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 "mediakeysystem_service_stub.h"
17 #include "drm_error_code.h"
18 #include "drm_log.h"
19 #include "ipc_skeleton.h"
20 #include "xcollie/xcollie.h"
21 #include "xcollie/xcollie_define.h"
22
23 namespace OHOS {
24 namespace DrmStandard {
25 using ProcessRemoteRequestFunc = int32_t (*)(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
26 MessageOption &option);
27
28 struct ProcessRemoteRequestFuncArray {
29 OHOS::DrmStandard::MediaKeySystemServiceRequestCode requestCode;
30 ProcessRemoteRequestFunc processFunc;
31 };
32
33 static int32_t ProcessCreatekeySession(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
34 MessageOption &option);
35
36 static int32_t ProcessKeySystemRequest(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
37 MessageOption &option);
38
39 static int32_t ProcessKeySystemResponse(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
40 MessageOption &option);
41
42 static int32_t ProcessSetConfigurationString(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
43 MessageOption &option);
44
45 static int32_t ProcessGetConfigurationString(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
46 MessageOption &option);
47
48 static int32_t ProcessSetConfigurationByteArray(MediaKeySystemServiceStub *stub, MessageParcel &data,
49 MessageParcel &reply, MessageOption &option);
50
51 static int32_t ProcessGetConfigurationByteArray(MediaKeySystemServiceStub *stub, MessageParcel &data,
52 MessageParcel &reply, MessageOption &option);
53
54 static int32_t ProcessGetMetircs(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
55 MessageOption &option);
56
57 static int32_t ProcessReleaseKeySystem(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
58 MessageOption &option);
59
60 static int32_t ProcessGetMaxContentProtectionLevel(MediaKeySystemServiceStub *stub, MessageParcel &data,
61 MessageParcel &reply, MessageOption &option);
62
63 static int32_t ProcessGetCertificateStatus(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
64 MessageOption &option);
65
66 static int32_t ProcessGetOfflineMediaKeyIds(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
67 MessageOption &option);
68
69 static int32_t ProcessGetOfflineMediaKeyStatus(MediaKeySystemServiceStub *stub, MessageParcel &data,
70 MessageParcel &reply, MessageOption &option);
71
72 static int32_t ProcessRemoveOfflineMediaKey(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
73 MessageOption &option);
74
75 static int32_t ProcessSetCallabck(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
76 MessageOption &option);
77
78 static struct ProcessRemoteRequestFuncArray g_mediaKeySystemServiceStubRequestProcessFunc[] = {
79 {MEDIA_KEY_SYSTEM_CREATE_KEY_SESSION, ProcessCreatekeySession},
80 {MEDIA_KEY_SYSTEM_GENERATE_KEYSYSTEM_REQUEST, ProcessKeySystemRequest},
81 {MEDIA_KEY_SYSTEM_PROCESS_KEYSYSTEM_RESPONSE, ProcessKeySystemResponse},
82 {MEDIA_KEY_SYSTEM_SETCONFIGURATION_STRING, ProcessSetConfigurationString},
83 {MEDIA_KEY_SYSTEM_GETCONFIGURATION_STRING, ProcessGetConfigurationString},
84 {MEDIA_KEY_SYSTEM_SETCONFIGURATION_BYTEARRAY, ProcessSetConfigurationByteArray},
85 {MEDIA_KEY_SYSTEM_GETCONFIGURATION_BYTEARRAY, ProcessGetConfigurationByteArray},
86 {MEDIA_KEY_SYSTEM_GETMETRIC, ProcessGetMetircs},
87 {MEDIA_KEY_SYSTEM_RELEASE, ProcessReleaseKeySystem},
88 {MEDIA_KEY_SYSTEM_GETMAXSECURITYLEVEL, ProcessGetMaxContentProtectionLevel},
89 {MEDIA_KEY_SYSTEM_GETCERTIFICATESTATUS, ProcessGetCertificateStatus},
90 {MEDIA_KEY_SYSTEM_GET_OFFLINELICENSEIDS, ProcessGetOfflineMediaKeyIds},
91 {MEDIA_KEY_SYSTEM_GET_OFFLINEKEY_STATUS, ProcessGetOfflineMediaKeyStatus},
92 {MEDIA_KEY_SYSTEM_REMOVE_OFFLINELICENSE, ProcessRemoveOfflineMediaKey},
93 {MEDIA_KEY_SYSTEM_SETCALLBACK, ProcessSetCallabck},
94 };
95
MediaKeySystemServiceStub()96 MediaKeySystemServiceStub::MediaKeySystemServiceStub()
97 {
98 DRM_INFO_LOG("MediaKeySystemServiceStub enter.");
99 }
100
~MediaKeySystemServiceStub()101 MediaKeySystemServiceStub::~MediaKeySystemServiceStub()
102 {
103 DRM_INFO_LOG("~MediaKeySystemServiceStub enter.");
104 deathRecipient_ = nullptr;
105 clientListener_ = nullptr;
106 }
107
ProcessCreatekeySession(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)108 static int32_t ProcessCreatekeySession(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
109 MessageOption &option)
110 {
111 DRM_INFO_LOG("ProcessCreatekeySession enter.");
112 sptr<IMediaKeySessionService> keySessionServiceProxy = nullptr;
113 const int32_t securityLevel = data.ReadInt32();
114 int32_t ret = stub->CreateMediaKeySession((IMediaKeySessionService::ContentProtectionLevel)securityLevel,
115 keySessionServiceProxy);
116 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "CreateMediaKeySession faild, errCode:%{public}d",
117 ret);
118
119 if (!reply.WriteRemoteObject(keySessionServiceProxy->AsObject())) {
120 DRM_ERR_LOG("CreateMediaKeySession Write MediaKeySession obj failed.");
121 return IPC_STUB_WRITE_PARCEL_ERR;
122 }
123 return ret;
124 }
125
ProcessKeySystemRequest(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)126 static int32_t ProcessKeySystemRequest(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
127 MessageOption &option)
128 {
129 DRM_INFO_LOG("ProcessKeySystemRequest enter.");
130 std::vector<uint8_t> request;
131 std::string defaultUrl;
132 int32_t ret = stub->GenerateKeySystemRequest(request, defaultUrl);
133 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessKeySystemRequest faild, errCode:%{public}d", ret);
134 if (!reply.WriteString(defaultUrl)) {
135 DRM_ERR_LOG("Write GenerateKeySystemRequest failed.");
136 return IPC_STUB_WRITE_PARCEL_ERR;
137 }
138 if (!reply.WriteInt32(request.size())) {
139 DRM_ERR_LOG("Write request size failed.");
140 return IPC_STUB_WRITE_PARCEL_ERR;
141 }
142 DRM_CHECK_AND_RETURN_RET_LOG(request.size() < REQUEST_MAX_LEN, DRM_INNER_ERR_MEMORY_ERROR,
143 "The size of request is too large.");
144 if (request.size() != 0) {
145 if (!reply.WriteBuffer(request.data(), request.size())) {
146 DRM_ERR_LOG("RestoreOfflineMediaKeys write request failed.");
147 return IPC_STUB_WRITE_PARCEL_ERR;
148 }
149 }
150 return ret;
151 }
152
ProcessKeySystemResponse(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)153 static int32_t ProcessKeySystemResponse(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
154 MessageOption &option)
155 {
156 DRM_INFO_LOG("ProcessKeySystemResponse enter.");
157 std::vector<uint8_t> response;
158 int32_t responseSize = data.ReadInt32();
159 DRM_CHECK_AND_RETURN_RET_LOG(responseSize < RESPONSE_MAX_LEN, DRM_INNER_ERR_MEMORY_ERROR,
160 "The size of response is too large.");
161 if (responseSize != 0) {
162 const uint8_t *responseBuf = static_cast<const uint8_t *>(data.ReadUnpadBuffer(responseSize));
163 if (responseBuf == nullptr) {
164 DRM_ERR_LOG("ProcessOfflineReleaseResponse read response failed.");
165 return IPC_STUB_WRITE_PARCEL_ERR;
166 }
167 response.assign(responseBuf, responseBuf + responseSize);
168 }
169 int32_t ret = stub->ProcessKeySystemResponse(response);
170 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessKeySystemResponse faild, errCode:%{public}d", ret);
171 return ret;
172 }
173
ProcessSetConfigurationString(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)174 static int32_t ProcessSetConfigurationString(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
175 MessageOption &option)
176 {
177 DRM_INFO_LOG("ProcessSetConfigurationString enter.");
178 std::string configName = data.ReadString();
179 std::string value = data.ReadString();
180 int32_t ret = stub->SetConfigurationString(configName, value);
181 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessSetConfigurationString faild, errCode:%{public}d", ret);
182 return ret;
183 }
184
ProcessGetConfigurationString(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)185 static int32_t ProcessGetConfigurationString(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
186 MessageOption &option)
187 {
188 DRM_INFO_LOG("ProcessGetConfigurationString enter.");
189 std::string configName = data.ReadString();
190 std::string value;
191 int32_t ret = stub->GetConfigurationString(configName, value);
192 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetConfigurationString faild, errCode:%{public}d", ret);
193 if (!reply.WriteString(value)) {
194 DRM_ERR_LOG("ProcessGetConfigurationString write value failed.");
195 return IPC_STUB_WRITE_PARCEL_ERR;
196 }
197 return ret;
198 }
199
ProcessSetConfigurationByteArray(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)200 static int32_t ProcessSetConfigurationByteArray(MediaKeySystemServiceStub *stub, MessageParcel &data,
201 MessageParcel &reply, MessageOption &option)
202 {
203 DRM_INFO_LOG("ProcessSetConfigurationByteArray enter.");
204 std::string configName = data.ReadString();
205 std::vector<uint8_t> value;
206 int32_t valueSize = data.ReadInt32();
207 DRM_CHECK_AND_RETURN_RET_LOG(valueSize < RESPONSE_MAX_LEN, DRM_INNER_ERR_MEMORY_ERROR,
208 "The size of configurate value is too large.");
209 if (valueSize != 0) {
210 const uint8_t *valueBuf = static_cast<const uint8_t *>(data.ReadUnpadBuffer(valueSize));
211 if (valueBuf == nullptr) {
212 DRM_ERR_LOG("ProcessSetConfigurationByteArray read value failed.");
213 return IPC_STUB_WRITE_PARCEL_ERR;
214 }
215 value.assign(valueBuf, valueBuf + valueSize);
216 }
217 int32_t ret = stub->SetConfigurationByteArray(configName, value);
218 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessSetConfigurationByteArray faild, errCode:%{public}d", ret);
219 return ret;
220 }
221
ProcessGetConfigurationByteArray(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)222 static int32_t ProcessGetConfigurationByteArray(MediaKeySystemServiceStub *stub, MessageParcel &data,
223 MessageParcel &reply, MessageOption &option)
224 {
225 DRM_INFO_LOG("ProcessGetConfigurationByteArray enter.");
226 std::string configName = data.ReadString();
227 std::vector<uint8_t> value;
228 int32_t ret = stub->GetConfigurationByteArray(configName, value);
229 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetConfigurationByteArray faild, errCode:%{public}d", ret);
230 if (!reply.WriteInt32(value.size())) {
231 DRM_ERR_LOG("Write value size failed.");
232 return IPC_STUB_WRITE_PARCEL_ERR;
233 }
234 DRM_CHECK_AND_RETURN_RET_LOG(value.size() < RESPONSE_MAX_LEN, DRM_INNER_ERR_MEMORY_ERROR,
235 "The size of configurate value is too large.");
236 if (value.size() != 0) {
237 if (!reply.WriteBuffer(value.data(), value.size())) {
238 DRM_ERR_LOG("ProcessGetConfigurationByteArray write value failed.");
239 return IPC_STUB_WRITE_PARCEL_ERR;
240 }
241 }
242 return ret;
243 }
244
ProcessGetMetircs(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)245 static int32_t ProcessGetMetircs(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
246 MessageOption &option)
247 {
248 DRM_INFO_LOG("ProcessGetMetircs enter.");
249 std::vector<IMediaKeySystemService::MetircKeyValue> metrics;
250 int32_t ret = stub->GetStatistics(metrics);
251 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetMetircs faild, errCode:%{public}d", ret);
252 reply.WriteInt32(metrics.size());
253 for (auto info : metrics) {
254 reply.WriteString(info.name);
255 reply.WriteString(info.value);
256 }
257 return ret;
258 }
259
ProcessReleaseKeySystem(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)260 static int32_t ProcessReleaseKeySystem(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
261 MessageOption &option)
262 {
263 DRM_INFO_LOG("ProcessReleaseKeySystem enter.");
264 int32_t ret = stub->Release();
265 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessReleaseKeySystem faild, errCode:%{public}d", ret);
266 return ret;
267 }
268
ProcessGetMaxContentProtectionLevel(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)269 static int32_t ProcessGetMaxContentProtectionLevel(MediaKeySystemServiceStub *stub, MessageParcel &data,
270 MessageParcel &reply, MessageOption &option)
271 {
272 DRM_INFO_LOG("ProcessGetMaxContentProtectionLevel enter.");
273 IMediaKeySessionService::ContentProtectionLevel securityLevel =
274 IMediaKeySessionService::CONTENT_PROTECTION_LEVEL_UNKNOWN;
275 int32_t ret = stub->GetMaxContentProtectionLevel(&securityLevel);
276 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetMaxContentProtectionLevel faild, errCode:%{public}d",
277 ret);
278 if (!reply.WriteInt32(securityLevel)) {
279 DRM_ERR_LOG("Write ProcessGetMaxContentProtectionLevel failed.");
280 return IPC_STUB_WRITE_PARCEL_ERR;
281 }
282 return ret;
283 }
284
ProcessGetCertificateStatus(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)285 static int32_t ProcessGetCertificateStatus(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
286 MessageOption &option)
287 {
288 DRM_INFO_LOG("ProcessGetCertificateStatus enter.");
289 IMediaKeySystemService::CertificateStatus certStatus = IMediaKeySystemService::CERT_STATUS_PROVISIONED;
290 int32_t ret = stub->GetCertificateStatus(&certStatus);
291 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetCertificateStatus faild, errCode:%{public}d", ret);
292 if (!reply.WriteInt32(certStatus)) {
293 DRM_ERR_LOG("ProcessGetCertificateStatus write certStatus failed.");
294 return IPC_STUB_WRITE_PARCEL_ERR;
295 }
296 return ret;
297 }
298
ProcessGetOfflineMediaKeyIds(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)299 static int32_t ProcessGetOfflineMediaKeyIds(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
300 MessageOption &option)
301 {
302 DRM_INFO_LOG("ProcessGetOfflineMediaKeyIds enter.");
303 std::vector<std::vector<uint8_t>> licenseIds;
304 int32_t ret = stub->GetOfflineMediaKeyIds(licenseIds);
305 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetOfflineMediaKeyIds faild, errCode:%{public}d", ret);
306
307 reply.WriteUint32(licenseIds.size());
308 if (licenseIds.size() == 0 || licenseIds.size() > LICENSEID_MAX_LEN) {
309 DRM_DEBUG_LOG("licenseIds size is error.");
310 return ret;
311 }
312 for (uint32_t i = 0; i < licenseIds.size(); i++) {
313 uint32_t licenseIdSize = licenseIds[i].size();
314 reply.WriteUint32(licenseIdSize);
315 if (licenseIdSize == 0 || licenseIdSize > LICENSEID_MAX_LEN) {
316 continue;
317 }
318 if (!reply.WriteBuffer(licenseIds[i].data(), licenseIdSize)) {
319 DRM_ERR_LOG("ProcessGetOfflineMediaKeyIds write licenseId failed.");
320 return IPC_STUB_WRITE_PARCEL_ERR;
321 }
322 }
323 return ret;
324 }
325
ProcessGetOfflineMediaKeyStatus(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)326 static int32_t ProcessGetOfflineMediaKeyStatus(MediaKeySystemServiceStub *stub, MessageParcel &data,
327 MessageParcel &reply, MessageOption &option)
328 {
329 DRM_INFO_LOG("ProcessGetOfflineMediaKeyStatus enter.");
330 std::vector<uint8_t> licenseId;
331 int32_t licenseIdSize = data.ReadInt32();
332 DRM_CHECK_AND_RETURN_RET_LOG(licenseIdSize < LICENSEID_MAX_LEN, DRM_INNER_ERR_MEMORY_ERROR,
333 "The size of licenseId is too large.");
334 if (licenseIdSize != 0) {
335 const uint8_t *licenseIdBuf = static_cast<const uint8_t *>(data.ReadUnpadBuffer(licenseIdSize));
336 if (licenseIdBuf == nullptr) {
337 DRM_ERR_LOG(":ProcessGetOfflineMediaKeyStatus read licenseId failed.");
338 return IPC_STUB_WRITE_PARCEL_ERR;
339 }
340 licenseId.assign(licenseIdBuf, licenseIdBuf + licenseIdSize);
341 }
342 IMediaKeySessionService::OfflineMediaKeyStatus status;
343 int32_t ret = stub->GetOfflineMediaKeyStatus(licenseId, status);
344 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessGetOfflineMediaKeyStatus faild, errCode:%{public}d", ret);
345 if (!reply.WriteInt32((int32_t)status)) {
346 DRM_ERR_LOG("Write state failed.");
347 return IPC_STUB_WRITE_PARCEL_ERR;
348 }
349 return ret;
350 }
351
ProcessRemoveOfflineMediaKey(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)352 static int32_t ProcessRemoveOfflineMediaKey(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
353 MessageOption &option)
354 {
355 DRM_INFO_LOG("ProcessRemoveOfflineMediaKey enter.");
356 std::vector<uint8_t> licenseId;
357 int32_t licenseIdSize = data.ReadInt32();
358 DRM_CHECK_AND_RETURN_RET_LOG(licenseIdSize < LICENSEID_MAX_LEN, DRM_INNER_ERR_MEMORY_ERROR,
359 "The size of licenseId is too large.");
360 if (licenseIdSize != 0) {
361 const uint8_t *licenseIdBuf = static_cast<const uint8_t *>(data.ReadUnpadBuffer(licenseIdSize));
362 if (licenseIdBuf == nullptr) {
363 DRM_ERR_LOG("ProcessRemoveOfflineMediaKey read licenseId failed.");
364 return IPC_STUB_WRITE_PARCEL_ERR;
365 }
366 licenseId.assign(licenseIdBuf, licenseIdBuf + licenseIdSize);
367 }
368 int32_t ret = stub->ClearOfflineMediaKeys(licenseId);
369 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessRemoveOfflineMediaKey faild, errCode:%{public}d", ret);
370 return ret;
371 }
372
MediaKeySystemClientDied(pid_t pid)373 void MediaKeySystemServiceStub::MediaKeySystemClientDied(pid_t pid)
374 {
375 DRM_ERR_LOG("MediaKeySystemService client has died, pid:%{public}d", pid);
376 }
377
ProcessSetCallabck(MediaKeySystemServiceStub * stub,MessageParcel & data,MessageParcel & reply,MessageOption & option)378 static int32_t ProcessSetCallabck(MediaKeySystemServiceStub *stub, MessageParcel &data, MessageParcel &reply,
379 MessageOption &option)
380 {
381 DRM_INFO_LOG("ProcessSetCallabck enter.");
382 auto remoteObject = data.ReadRemoteObject();
383 if (remoteObject == nullptr) {
384 DRM_ERR_LOG("ProcessSetCallabck remote is null");
385 return IPC_STUB_INVALID_DATA_ERR;
386 }
387 auto callback = iface_cast<IMediaKeySystemServiceCallback>(remoteObject);
388 if (callback == nullptr) {
389 DRM_ERR_LOG("ProcessSetCallabck iface_cast nullptr");
390 return IPC_STUB_INVALID_DATA_ERR;
391 }
392 int32_t ret = stub->SetCallback(callback);
393 DRM_CHECK_AND_RETURN_RET_LOG(ret == 0, ret, "ProcessSetCallabck faild, errCode:%{public}d", ret);
394 return ret;
395 }
396
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)397 int32_t MediaKeySystemServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply,
398 MessageOption &option)
399 {
400 DRM_CHECK_AND_RETURN_RET_LOG(data.ReadInterfaceToken() == GetDescriptor(), -1,
401 "ReadInterfaceToken failed.");
402 DRM_INFO_LOG("OnRemoteRequest, cmd = %{public}u", code);
403
404 DRM_CHECK_AND_RETURN_RET_LOG((code >= MEDIA_KEY_SYSTEM_CREATE_KEY_SESSION) &&
405 (code <= MEDIA_KEY_SYSTEM_SETCALLBACK),
406 IPCObjectStub::OnRemoteRequest(code, data, reply, option),
407 "code not match, need check MediaKeySystemServiceStub");
408
409 return g_mediaKeySystemServiceStubRequestProcessFunc[code].processFunc(this, data, reply, option);
410 }
411 } // namespace DrmStandard
412 } // namespace OHOS