• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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