1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker *
4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker *
8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker *
10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker */
16*ec779b8eSAndroid Build Coastguard Worker
17*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "DrmManagerClientImpl(Native)"
19*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
20*ec779b8eSAndroid Build Coastguard Worker
21*ec779b8eSAndroid Build Coastguard Worker #include <utils/String8.h>
22*ec779b8eSAndroid Build Coastguard Worker #include <utils/Vector.h>
23*ec779b8eSAndroid Build Coastguard Worker #include <binder/IServiceManager.h>
24*ec779b8eSAndroid Build Coastguard Worker #include <cutils/properties.h>
25*ec779b8eSAndroid Build Coastguard Worker
26*ec779b8eSAndroid Build Coastguard Worker #include "DrmManagerClientImpl.h"
27*ec779b8eSAndroid Build Coastguard Worker #include "NoOpDrmManagerClientImpl.h"
28*ec779b8eSAndroid Build Coastguard Worker
29*ec779b8eSAndroid Build Coastguard Worker using namespace android;
30*ec779b8eSAndroid Build Coastguard Worker
31*ec779b8eSAndroid Build Coastguard Worker #define INVALID_VALUE (-1)
32*ec779b8eSAndroid Build Coastguard Worker
33*ec779b8eSAndroid Build Coastguard Worker Mutex DrmManagerClientImpl::sMutex;
34*ec779b8eSAndroid Build Coastguard Worker sp<IDrmManagerService> DrmManagerClientImpl::sDrmManagerService;
35*ec779b8eSAndroid Build Coastguard Worker sp<DrmManagerClientImpl::DeathNotifier> DrmManagerClientImpl::sDeathNotifier;
36*ec779b8eSAndroid Build Coastguard Worker const String8 DrmManagerClientImpl::EMPTY_STRING("");
37*ec779b8eSAndroid Build Coastguard Worker
create(int * pUniqueId,bool isNative)38*ec779b8eSAndroid Build Coastguard Worker DrmManagerClientImpl* DrmManagerClientImpl::create(
39*ec779b8eSAndroid Build Coastguard Worker int* pUniqueId, bool isNative) {
40*ec779b8eSAndroid Build Coastguard Worker sp<IDrmManagerService> service = getDrmManagerService();
41*ec779b8eSAndroid Build Coastguard Worker if (service != NULL) {
42*ec779b8eSAndroid Build Coastguard Worker *pUniqueId = getDrmManagerService()->addUniqueId(isNative);
43*ec779b8eSAndroid Build Coastguard Worker return new DrmManagerClientImpl();
44*ec779b8eSAndroid Build Coastguard Worker }
45*ec779b8eSAndroid Build Coastguard Worker return new NoOpDrmManagerClientImpl();
46*ec779b8eSAndroid Build Coastguard Worker }
47*ec779b8eSAndroid Build Coastguard Worker
remove(int uniqueId)48*ec779b8eSAndroid Build Coastguard Worker void DrmManagerClientImpl::remove(int uniqueId) {
49*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->removeUniqueId(uniqueId);
50*ec779b8eSAndroid Build Coastguard Worker }
51*ec779b8eSAndroid Build Coastguard Worker
getDrmManagerService()52*ec779b8eSAndroid Build Coastguard Worker const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
53*ec779b8eSAndroid Build Coastguard Worker Mutex::Autolock lock(sMutex);
54*ec779b8eSAndroid Build Coastguard Worker if (NULL == sDrmManagerService.get()) {
55*ec779b8eSAndroid Build Coastguard Worker sp<IServiceManager> sm = defaultServiceManager();
56*ec779b8eSAndroid Build Coastguard Worker sp<IBinder> binder = sm->checkService(String16("drm.drmManager"));
57*ec779b8eSAndroid Build Coastguard Worker if (binder == NULL) {
58*ec779b8eSAndroid Build Coastguard Worker return sDrmManagerService;
59*ec779b8eSAndroid Build Coastguard Worker }
60*ec779b8eSAndroid Build Coastguard Worker if (NULL == sDeathNotifier.get()) {
61*ec779b8eSAndroid Build Coastguard Worker sDeathNotifier = new DeathNotifier();
62*ec779b8eSAndroid Build Coastguard Worker }
63*ec779b8eSAndroid Build Coastguard Worker binder->linkToDeath(sDeathNotifier);
64*ec779b8eSAndroid Build Coastguard Worker sDrmManagerService = interface_cast<IDrmManagerService>(binder);
65*ec779b8eSAndroid Build Coastguard Worker }
66*ec779b8eSAndroid Build Coastguard Worker return sDrmManagerService;
67*ec779b8eSAndroid Build Coastguard Worker }
68*ec779b8eSAndroid Build Coastguard Worker
addClient(int uniqueId)69*ec779b8eSAndroid Build Coastguard Worker void DrmManagerClientImpl::addClient(int uniqueId) {
70*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->addClient(uniqueId);
71*ec779b8eSAndroid Build Coastguard Worker }
72*ec779b8eSAndroid Build Coastguard Worker
removeClient(int uniqueId)73*ec779b8eSAndroid Build Coastguard Worker void DrmManagerClientImpl::removeClient(int uniqueId) {
74*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->removeClient(uniqueId);
75*ec779b8eSAndroid Build Coastguard Worker }
76*ec779b8eSAndroid Build Coastguard Worker
setOnInfoListener(int uniqueId,const sp<DrmManagerClient::OnInfoListener> & infoListener)77*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::setOnInfoListener(
78*ec779b8eSAndroid Build Coastguard Worker int uniqueId,
79*ec779b8eSAndroid Build Coastguard Worker const sp<DrmManagerClient::OnInfoListener>& infoListener) {
80*ec779b8eSAndroid Build Coastguard Worker Mutex::Autolock _l(mLock);
81*ec779b8eSAndroid Build Coastguard Worker mOnInfoListener = infoListener;
82*ec779b8eSAndroid Build Coastguard Worker return getDrmManagerService()->setDrmServiceListener(uniqueId,
83*ec779b8eSAndroid Build Coastguard Worker (NULL != infoListener.get()) ? this : NULL);
84*ec779b8eSAndroid Build Coastguard Worker }
85*ec779b8eSAndroid Build Coastguard Worker
getConstraints(int uniqueId,const String8 * path,const int action)86*ec779b8eSAndroid Build Coastguard Worker DrmConstraints* DrmManagerClientImpl::getConstraints(
87*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8* path, const int action) {
88*ec779b8eSAndroid Build Coastguard Worker DrmConstraints *drmConstraints = NULL;
89*ec779b8eSAndroid Build Coastguard Worker if ((NULL != path) && (EMPTY_STRING != *path)) {
90*ec779b8eSAndroid Build Coastguard Worker drmConstraints =
91*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->getConstraints(uniqueId, path, action);
92*ec779b8eSAndroid Build Coastguard Worker }
93*ec779b8eSAndroid Build Coastguard Worker return drmConstraints;
94*ec779b8eSAndroid Build Coastguard Worker }
95*ec779b8eSAndroid Build Coastguard Worker
getMetadata(int uniqueId,const String8 * path)96*ec779b8eSAndroid Build Coastguard Worker DrmMetadata* DrmManagerClientImpl::getMetadata(int uniqueId, const String8* path) {
97*ec779b8eSAndroid Build Coastguard Worker DrmMetadata *drmMetadata = NULL;
98*ec779b8eSAndroid Build Coastguard Worker if ((NULL != path) && (EMPTY_STRING != *path)) {
99*ec779b8eSAndroid Build Coastguard Worker drmMetadata = getDrmManagerService()->getMetadata(uniqueId, path);
100*ec779b8eSAndroid Build Coastguard Worker }
101*ec779b8eSAndroid Build Coastguard Worker return drmMetadata;
102*ec779b8eSAndroid Build Coastguard Worker }
103*ec779b8eSAndroid Build Coastguard Worker
canHandle(int uniqueId,const String8 & path,const String8 & mimeType)104*ec779b8eSAndroid Build Coastguard Worker bool DrmManagerClientImpl::canHandle(
105*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& path, const String8& mimeType) {
106*ec779b8eSAndroid Build Coastguard Worker bool retCode = false;
107*ec779b8eSAndroid Build Coastguard Worker if ((EMPTY_STRING != path) || (EMPTY_STRING != mimeType)) {
108*ec779b8eSAndroid Build Coastguard Worker retCode = getDrmManagerService()->canHandle(uniqueId, path, mimeType);
109*ec779b8eSAndroid Build Coastguard Worker }
110*ec779b8eSAndroid Build Coastguard Worker return retCode;
111*ec779b8eSAndroid Build Coastguard Worker }
112*ec779b8eSAndroid Build Coastguard Worker
processDrmInfo(int uniqueId,const DrmInfo * drmInfo)113*ec779b8eSAndroid Build Coastguard Worker DrmInfoStatus* DrmManagerClientImpl::processDrmInfo(
114*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const DrmInfo* drmInfo) {
115*ec779b8eSAndroid Build Coastguard Worker DrmInfoStatus *drmInfoStatus = NULL;
116*ec779b8eSAndroid Build Coastguard Worker if (NULL != drmInfo) {
117*ec779b8eSAndroid Build Coastguard Worker drmInfoStatus = getDrmManagerService()->processDrmInfo(uniqueId, drmInfo);
118*ec779b8eSAndroid Build Coastguard Worker }
119*ec779b8eSAndroid Build Coastguard Worker return drmInfoStatus;
120*ec779b8eSAndroid Build Coastguard Worker }
121*ec779b8eSAndroid Build Coastguard Worker
acquireDrmInfo(int uniqueId,const DrmInfoRequest * drmInfoRequest)122*ec779b8eSAndroid Build Coastguard Worker DrmInfo* DrmManagerClientImpl::acquireDrmInfo(
123*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const DrmInfoRequest* drmInfoRequest) {
124*ec779b8eSAndroid Build Coastguard Worker DrmInfo* drmInfo = NULL;
125*ec779b8eSAndroid Build Coastguard Worker if (NULL != drmInfoRequest) {
126*ec779b8eSAndroid Build Coastguard Worker drmInfo = getDrmManagerService()->acquireDrmInfo(uniqueId, drmInfoRequest);
127*ec779b8eSAndroid Build Coastguard Worker }
128*ec779b8eSAndroid Build Coastguard Worker return drmInfo;
129*ec779b8eSAndroid Build Coastguard Worker }
130*ec779b8eSAndroid Build Coastguard Worker
saveRights(int uniqueId,const DrmRights & drmRights,const String8 & rightsPath,const String8 & contentPath)131*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::saveRights(int uniqueId, const DrmRights& drmRights,
132*ec779b8eSAndroid Build Coastguard Worker const String8& rightsPath, const String8& contentPath) {
133*ec779b8eSAndroid Build Coastguard Worker return getDrmManagerService()->saveRights(
134*ec779b8eSAndroid Build Coastguard Worker uniqueId, drmRights, rightsPath, contentPath);
135*ec779b8eSAndroid Build Coastguard Worker }
136*ec779b8eSAndroid Build Coastguard Worker
getOriginalMimeType(int uniqueId,const String8 & path,int fd)137*ec779b8eSAndroid Build Coastguard Worker String8 DrmManagerClientImpl::getOriginalMimeType(
138*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& path, int fd) {
139*ec779b8eSAndroid Build Coastguard Worker String8 mimeType = EMPTY_STRING;
140*ec779b8eSAndroid Build Coastguard Worker if (EMPTY_STRING != path) {
141*ec779b8eSAndroid Build Coastguard Worker mimeType = getDrmManagerService()->getOriginalMimeType(uniqueId, path, fd);
142*ec779b8eSAndroid Build Coastguard Worker }
143*ec779b8eSAndroid Build Coastguard Worker return mimeType;
144*ec779b8eSAndroid Build Coastguard Worker }
145*ec779b8eSAndroid Build Coastguard Worker
getDrmObjectType(int uniqueId,const String8 & path,const String8 & mimeType)146*ec779b8eSAndroid Build Coastguard Worker int DrmManagerClientImpl::getDrmObjectType(
147*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& path, const String8& mimeType) {
148*ec779b8eSAndroid Build Coastguard Worker int drmOjectType = DrmObjectType::UNKNOWN;
149*ec779b8eSAndroid Build Coastguard Worker if ((EMPTY_STRING != path) || (EMPTY_STRING != mimeType)) {
150*ec779b8eSAndroid Build Coastguard Worker drmOjectType =
151*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->getDrmObjectType(uniqueId, path, mimeType);
152*ec779b8eSAndroid Build Coastguard Worker }
153*ec779b8eSAndroid Build Coastguard Worker return drmOjectType;
154*ec779b8eSAndroid Build Coastguard Worker }
155*ec779b8eSAndroid Build Coastguard Worker
checkRightsStatus(int uniqueId,const String8 & path,int action)156*ec779b8eSAndroid Build Coastguard Worker int DrmManagerClientImpl::checkRightsStatus(
157*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& path, int action) {
158*ec779b8eSAndroid Build Coastguard Worker int rightsStatus = RightsStatus::RIGHTS_INVALID;
159*ec779b8eSAndroid Build Coastguard Worker if (EMPTY_STRING != path) {
160*ec779b8eSAndroid Build Coastguard Worker rightsStatus =
161*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->checkRightsStatus(uniqueId, path, action);
162*ec779b8eSAndroid Build Coastguard Worker }
163*ec779b8eSAndroid Build Coastguard Worker return rightsStatus;
164*ec779b8eSAndroid Build Coastguard Worker }
165*ec779b8eSAndroid Build Coastguard Worker
consumeRights(int uniqueId,sp<DecryptHandle> & decryptHandle,int action,bool reserve)166*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::consumeRights(
167*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle> &decryptHandle,
168*ec779b8eSAndroid Build Coastguard Worker int action, bool reserve) {
169*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
170*ec779b8eSAndroid Build Coastguard Worker if (NULL != decryptHandle.get()) {
171*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->consumeRights(
172*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle, action, reserve);
173*ec779b8eSAndroid Build Coastguard Worker }
174*ec779b8eSAndroid Build Coastguard Worker return status;
175*ec779b8eSAndroid Build Coastguard Worker }
176*ec779b8eSAndroid Build Coastguard Worker
setPlaybackStatus(int uniqueId,sp<DecryptHandle> & decryptHandle,int playbackStatus,int64_t position)177*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::setPlaybackStatus(
178*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle> &decryptHandle,
179*ec779b8eSAndroid Build Coastguard Worker int playbackStatus, int64_t position) {
180*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
181*ec779b8eSAndroid Build Coastguard Worker if (NULL != decryptHandle.get()) {
182*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->setPlaybackStatus(
183*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle, playbackStatus, position);
184*ec779b8eSAndroid Build Coastguard Worker }
185*ec779b8eSAndroid Build Coastguard Worker return status;
186*ec779b8eSAndroid Build Coastguard Worker }
187*ec779b8eSAndroid Build Coastguard Worker
validateAction(int uniqueId,const String8 & path,int action,const ActionDescription & description)188*ec779b8eSAndroid Build Coastguard Worker bool DrmManagerClientImpl::validateAction(
189*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& path,
190*ec779b8eSAndroid Build Coastguard Worker int action, const ActionDescription& description) {
191*ec779b8eSAndroid Build Coastguard Worker bool retCode = false;
192*ec779b8eSAndroid Build Coastguard Worker if (EMPTY_STRING != path) {
193*ec779b8eSAndroid Build Coastguard Worker retCode = getDrmManagerService()->validateAction(
194*ec779b8eSAndroid Build Coastguard Worker uniqueId, path, action, description);
195*ec779b8eSAndroid Build Coastguard Worker }
196*ec779b8eSAndroid Build Coastguard Worker return retCode;
197*ec779b8eSAndroid Build Coastguard Worker }
198*ec779b8eSAndroid Build Coastguard Worker
removeRights(int uniqueId,const String8 & path)199*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::removeRights(int uniqueId, const String8& path) {
200*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
201*ec779b8eSAndroid Build Coastguard Worker if (EMPTY_STRING != path) {
202*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->removeRights(uniqueId, path);
203*ec779b8eSAndroid Build Coastguard Worker }
204*ec779b8eSAndroid Build Coastguard Worker return status;
205*ec779b8eSAndroid Build Coastguard Worker }
206*ec779b8eSAndroid Build Coastguard Worker
removeAllRights(int uniqueId)207*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::removeAllRights(int uniqueId) {
208*ec779b8eSAndroid Build Coastguard Worker return getDrmManagerService()->removeAllRights(uniqueId);
209*ec779b8eSAndroid Build Coastguard Worker }
210*ec779b8eSAndroid Build Coastguard Worker
openConvertSession(int uniqueId,const String8 & mimeType)211*ec779b8eSAndroid Build Coastguard Worker int DrmManagerClientImpl::openConvertSession(
212*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const String8& mimeType) {
213*ec779b8eSAndroid Build Coastguard Worker int retCode = INVALID_VALUE;
214*ec779b8eSAndroid Build Coastguard Worker if (EMPTY_STRING != mimeType) {
215*ec779b8eSAndroid Build Coastguard Worker retCode = getDrmManagerService()->openConvertSession(uniqueId, mimeType);
216*ec779b8eSAndroid Build Coastguard Worker }
217*ec779b8eSAndroid Build Coastguard Worker return retCode;
218*ec779b8eSAndroid Build Coastguard Worker }
219*ec779b8eSAndroid Build Coastguard Worker
convertData(int uniqueId,int convertId,const DrmBuffer * inputData)220*ec779b8eSAndroid Build Coastguard Worker DrmConvertedStatus* DrmManagerClientImpl::convertData(
221*ec779b8eSAndroid Build Coastguard Worker int uniqueId, int convertId, const DrmBuffer* inputData) {
222*ec779b8eSAndroid Build Coastguard Worker DrmConvertedStatus* drmConvertedStatus = NULL;
223*ec779b8eSAndroid Build Coastguard Worker if (NULL != inputData) {
224*ec779b8eSAndroid Build Coastguard Worker drmConvertedStatus =
225*ec779b8eSAndroid Build Coastguard Worker getDrmManagerService()->convertData(uniqueId, convertId, inputData);
226*ec779b8eSAndroid Build Coastguard Worker }
227*ec779b8eSAndroid Build Coastguard Worker return drmConvertedStatus;
228*ec779b8eSAndroid Build Coastguard Worker }
229*ec779b8eSAndroid Build Coastguard Worker
closeConvertSession(int uniqueId,int convertId)230*ec779b8eSAndroid Build Coastguard Worker DrmConvertedStatus* DrmManagerClientImpl::closeConvertSession(
231*ec779b8eSAndroid Build Coastguard Worker int uniqueId, int convertId) {
232*ec779b8eSAndroid Build Coastguard Worker return getDrmManagerService()->closeConvertSession(uniqueId, convertId);
233*ec779b8eSAndroid Build Coastguard Worker }
234*ec779b8eSAndroid Build Coastguard Worker
getAllSupportInfo(int uniqueId,int * length,DrmSupportInfo ** drmSupportInfoArray)235*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::getAllSupportInfo(
236*ec779b8eSAndroid Build Coastguard Worker int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) {
237*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
238*ec779b8eSAndroid Build Coastguard Worker if ((NULL != drmSupportInfoArray) && (NULL != length)) {
239*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->getAllSupportInfo(
240*ec779b8eSAndroid Build Coastguard Worker uniqueId, length, drmSupportInfoArray);
241*ec779b8eSAndroid Build Coastguard Worker }
242*ec779b8eSAndroid Build Coastguard Worker return status;
243*ec779b8eSAndroid Build Coastguard Worker }
244*ec779b8eSAndroid Build Coastguard Worker
openDecryptSession(int uniqueId,int fd,off64_t offset,off64_t length,const char * mime)245*ec779b8eSAndroid Build Coastguard Worker sp<DecryptHandle> DrmManagerClientImpl::openDecryptSession(
246*ec779b8eSAndroid Build Coastguard Worker int uniqueId, int fd, off64_t offset,
247*ec779b8eSAndroid Build Coastguard Worker off64_t length, const char* mime) {
248*ec779b8eSAndroid Build Coastguard Worker
249*ec779b8eSAndroid Build Coastguard Worker return getDrmManagerService()->openDecryptSession(
250*ec779b8eSAndroid Build Coastguard Worker uniqueId, fd, offset, length, mime);
251*ec779b8eSAndroid Build Coastguard Worker }
252*ec779b8eSAndroid Build Coastguard Worker
openDecryptSession(int uniqueId,const char * uri,const char * mime)253*ec779b8eSAndroid Build Coastguard Worker sp<DecryptHandle> DrmManagerClientImpl::openDecryptSession(
254*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const char* uri, const char* mime) {
255*ec779b8eSAndroid Build Coastguard Worker
256*ec779b8eSAndroid Build Coastguard Worker sp<DecryptHandle> handle;
257*ec779b8eSAndroid Build Coastguard Worker if (NULL != uri) {
258*ec779b8eSAndroid Build Coastguard Worker handle = getDrmManagerService()->openDecryptSession(uniqueId, uri, mime);
259*ec779b8eSAndroid Build Coastguard Worker }
260*ec779b8eSAndroid Build Coastguard Worker return handle;
261*ec779b8eSAndroid Build Coastguard Worker }
262*ec779b8eSAndroid Build Coastguard Worker
openDecryptSession(int uniqueId,const DrmBuffer & buf,const String8 & mimeType)263*ec779b8eSAndroid Build Coastguard Worker sp<DecryptHandle> DrmManagerClientImpl::openDecryptSession(
264*ec779b8eSAndroid Build Coastguard Worker int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
265*ec779b8eSAndroid Build Coastguard Worker return getDrmManagerService()->openDecryptSession(uniqueId, buf, mimeType);
266*ec779b8eSAndroid Build Coastguard Worker }
267*ec779b8eSAndroid Build Coastguard Worker
closeDecryptSession(int uniqueId,sp<DecryptHandle> & decryptHandle)268*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::closeDecryptSession(
269*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle> &decryptHandle) {
270*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
271*ec779b8eSAndroid Build Coastguard Worker if (NULL != decryptHandle.get()) {
272*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->closeDecryptSession(
273*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle);
274*ec779b8eSAndroid Build Coastguard Worker }
275*ec779b8eSAndroid Build Coastguard Worker return status;
276*ec779b8eSAndroid Build Coastguard Worker }
277*ec779b8eSAndroid Build Coastguard Worker
initializeDecryptUnit(int uniqueId,sp<DecryptHandle> & decryptHandle,int decryptUnitId,const DrmBuffer * headerInfo)278*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::initializeDecryptUnit(
279*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle> &decryptHandle,
280*ec779b8eSAndroid Build Coastguard Worker int decryptUnitId, const DrmBuffer* headerInfo) {
281*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
282*ec779b8eSAndroid Build Coastguard Worker if ((NULL != decryptHandle.get()) && (NULL != headerInfo)) {
283*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->initializeDecryptUnit(
284*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle, decryptUnitId, headerInfo);
285*ec779b8eSAndroid Build Coastguard Worker }
286*ec779b8eSAndroid Build Coastguard Worker return status;
287*ec779b8eSAndroid Build Coastguard Worker }
288*ec779b8eSAndroid Build Coastguard Worker
decrypt(int uniqueId,sp<DecryptHandle> & decryptHandle,int decryptUnitId,const DrmBuffer * encBuffer,DrmBuffer ** decBuffer,DrmBuffer * IV)289*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::decrypt(
290*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle> &decryptHandle,
291*ec779b8eSAndroid Build Coastguard Worker int decryptUnitId, const DrmBuffer* encBuffer,
292*ec779b8eSAndroid Build Coastguard Worker DrmBuffer** decBuffer, DrmBuffer* IV) {
293*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
294*ec779b8eSAndroid Build Coastguard Worker if ((NULL != decryptHandle.get()) && (NULL != encBuffer)
295*ec779b8eSAndroid Build Coastguard Worker && (NULL != decBuffer) && (NULL != *decBuffer)) {
296*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->decrypt(
297*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle, decryptUnitId,
298*ec779b8eSAndroid Build Coastguard Worker encBuffer, decBuffer, IV);
299*ec779b8eSAndroid Build Coastguard Worker }
300*ec779b8eSAndroid Build Coastguard Worker return status;
301*ec779b8eSAndroid Build Coastguard Worker }
302*ec779b8eSAndroid Build Coastguard Worker
finalizeDecryptUnit(int uniqueId,sp<DecryptHandle> & decryptHandle,int decryptUnitId)303*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::finalizeDecryptUnit(
304*ec779b8eSAndroid Build Coastguard Worker int uniqueId, sp<DecryptHandle> &decryptHandle, int decryptUnitId) {
305*ec779b8eSAndroid Build Coastguard Worker status_t status = DRM_ERROR_UNKNOWN;
306*ec779b8eSAndroid Build Coastguard Worker if (NULL != decryptHandle.get()) {
307*ec779b8eSAndroid Build Coastguard Worker status = getDrmManagerService()->finalizeDecryptUnit(
308*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle, decryptUnitId);
309*ec779b8eSAndroid Build Coastguard Worker }
310*ec779b8eSAndroid Build Coastguard Worker return status;
311*ec779b8eSAndroid Build Coastguard Worker }
312*ec779b8eSAndroid Build Coastguard Worker
pread(int uniqueId,sp<DecryptHandle> & decryptHandle,void * buffer,ssize_t numBytes,off64_t offset)313*ec779b8eSAndroid Build Coastguard Worker ssize_t DrmManagerClientImpl::pread(int uniqueId, sp<DecryptHandle> &decryptHandle,
314*ec779b8eSAndroid Build Coastguard Worker void* buffer, ssize_t numBytes, off64_t offset) {
315*ec779b8eSAndroid Build Coastguard Worker ssize_t retCode = INVALID_VALUE;
316*ec779b8eSAndroid Build Coastguard Worker if ((NULL != decryptHandle.get()) && (NULL != buffer) && (0 < numBytes)) {
317*ec779b8eSAndroid Build Coastguard Worker retCode = getDrmManagerService()->pread(
318*ec779b8eSAndroid Build Coastguard Worker uniqueId, decryptHandle, buffer, numBytes, offset);
319*ec779b8eSAndroid Build Coastguard Worker }
320*ec779b8eSAndroid Build Coastguard Worker return retCode;
321*ec779b8eSAndroid Build Coastguard Worker }
322*ec779b8eSAndroid Build Coastguard Worker
notify(const DrmInfoEvent & event)323*ec779b8eSAndroid Build Coastguard Worker status_t DrmManagerClientImpl::notify(const DrmInfoEvent& event) {
324*ec779b8eSAndroid Build Coastguard Worker if (NULL != mOnInfoListener.get()) {
325*ec779b8eSAndroid Build Coastguard Worker Mutex::Autolock _l(mLock);
326*ec779b8eSAndroid Build Coastguard Worker sp<DrmManagerClient::OnInfoListener> listener = mOnInfoListener;
327*ec779b8eSAndroid Build Coastguard Worker listener->onInfo(event);
328*ec779b8eSAndroid Build Coastguard Worker }
329*ec779b8eSAndroid Build Coastguard Worker return DRM_NO_ERROR;
330*ec779b8eSAndroid Build Coastguard Worker }
331*ec779b8eSAndroid Build Coastguard Worker
~DeathNotifier()332*ec779b8eSAndroid Build Coastguard Worker DrmManagerClientImpl::DeathNotifier::~DeathNotifier() {
333*ec779b8eSAndroid Build Coastguard Worker Mutex::Autolock lock(sMutex);
334*ec779b8eSAndroid Build Coastguard Worker if (NULL != sDrmManagerService.get()) {
335*ec779b8eSAndroid Build Coastguard Worker IInterface::asBinder(sDrmManagerService)->unlinkToDeath(this);
336*ec779b8eSAndroid Build Coastguard Worker }
337*ec779b8eSAndroid Build Coastguard Worker }
338*ec779b8eSAndroid Build Coastguard Worker
binderDied(const wp<IBinder> &)339*ec779b8eSAndroid Build Coastguard Worker void DrmManagerClientImpl::DeathNotifier::binderDied(
340*ec779b8eSAndroid Build Coastguard Worker const wp<IBinder>& /* who */) {
341*ec779b8eSAndroid Build Coastguard Worker Mutex::Autolock lock(sMutex);
342*ec779b8eSAndroid Build Coastguard Worker DrmManagerClientImpl::sDrmManagerService.clear();
343*ec779b8eSAndroid Build Coastguard Worker ALOGW("DrmManager server died!");
344*ec779b8eSAndroid Build Coastguard Worker }
345*ec779b8eSAndroid Build Coastguard Worker
346