• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef __IDRM_MANAGER_SERVICE_H__
18 #define __IDRM_MANAGER_SERVICE_H__
19 
20 #include <utils/RefBase.h>
21 #include <binder/IInterface.h>
22 #include <binder/Parcel.h>
23 #include <drm/drm_framework_common.h>
24 #include "IDrmServiceListener.h"
25 
26 namespace android {
27 
28 class DrmConstraints;
29 class DrmMetadata;
30 class DrmRights;
31 class DrmInfo;
32 class DrmInfoStatus;
33 class DrmInfoRequest;
34 class DrmSupportInfo;
35 class DrmConvertedStatus;
36 class String8;
37 class ActionDescription;
38 
39 /**
40  * This is the interface class for DRM Manager service.
41  *
42  */
43 class IDrmManagerService : public IInterface
44 {
45 public:
46     enum {
47         ADD_UNIQUEID = IBinder::FIRST_CALL_TRANSACTION,
48         REMOVE_UNIQUEID,
49         ADD_CLIENT,
50         REMOVE_CLIENT,
51         SET_DRM_SERVICE_LISTENER,
52         INSTALL_DRM_ENGINE,
53         GET_CONSTRAINTS_FROM_CONTENT,
54         GET_METADATA_FROM_CONTENT,
55         CAN_HANDLE,
56         PROCESS_DRM_INFO,
57         ACQUIRE_DRM_INFO,
58         SAVE_RIGHTS,
59         GET_ORIGINAL_MIMETYPE,
60         GET_DRM_OBJECT_TYPE,
61         CHECK_RIGHTS_STATUS,
62         CONSUME_RIGHTS,
63         SET_PLAYBACK_STATUS,
64         VALIDATE_ACTION,
65         REMOVE_RIGHTS,
66         REMOVE_ALL_RIGHTS,
67         OPEN_CONVERT_SESSION,
68         CONVERT_DATA,
69         CLOSE_CONVERT_SESSION,
70         GET_ALL_SUPPORT_INFO,
71         OPEN_DECRYPT_SESSION,
72         OPEN_DECRYPT_SESSION_FROM_URI,
73         CLOSE_DECRYPT_SESSION,
74         INITIALIZE_DECRYPT_UNIT,
75         DECRYPT,
76         FINALIZE_DECRYPT_UNIT,
77         PREAD
78     };
79 
80 public:
81     DECLARE_META_INTERFACE(DrmManagerService);
82 
83 public:
84     virtual int addUniqueId(bool isNative) = 0;
85 
86     virtual void removeUniqueId(int uniqueId) = 0;
87 
88     virtual void addClient(int uniqueId) = 0;
89 
90     virtual void removeClient(int uniqueId) = 0;
91 
92     virtual status_t setDrmServiceListener(
93             int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
94 
95     virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0;
96 
97     virtual DrmConstraints* getConstraints(
98             int uniqueId, const String8* path, const int action) = 0;
99 
100     virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0;
101 
102     virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
103 
104     virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
105 
106     virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
107 
108     virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
109             const String8& rightsPath, const String8& contentPath) = 0;
110 
111     virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0;
112 
113     virtual int getDrmObjectType(
114             int uniqueId, const String8& path, const String8& mimeType) = 0;
115 
116     virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
117 
118     virtual status_t consumeRights(
119             int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
120 
121     virtual status_t setPlaybackStatus(
122             int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
123 
124     virtual bool validateAction(
125             int uniqueId, const String8& path,
126             int action, const ActionDescription& description) = 0;
127 
128     virtual status_t removeRights(int uniqueId, const String8& path) = 0;
129 
130     virtual status_t removeAllRights(int uniqueId) = 0;
131 
132     virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0;
133 
134     virtual DrmConvertedStatus* convertData(
135             int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
136 
137     virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0;
138 
139     virtual status_t getAllSupportInfo(
140             int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
141 
142     virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, off64_t offset, off64_t length) = 0;
143 
144     virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri) = 0;
145 
146     virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
147 
148     virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
149             int decryptUnitId, const DrmBuffer* headerInfo) = 0;
150 
151     virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
152             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
153 
154     virtual status_t finalizeDecryptUnit(
155             int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
156 
157     virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
158             void* buffer, ssize_t numBytes,off64_t offset) = 0;
159 };
160 
161 /**
162  * This is the Binder implementation class for DRM Manager service.
163  */
164 class BpDrmManagerService: public BpInterface<IDrmManagerService>
165 {
166 public:
BpDrmManagerService(const sp<IBinder> & impl)167     BpDrmManagerService(const sp<IBinder>& impl)
168             : BpInterface<IDrmManagerService>(impl) {}
169 
170     virtual int addUniqueId(bool isNative);
171 
172     virtual void removeUniqueId(int uniqueId);
173 
174     virtual void addClient(int uniqueId);
175 
176     virtual void removeClient(int uniqueId);
177 
178     virtual status_t setDrmServiceListener(
179             int uniqueId, const sp<IDrmServiceListener>& infoListener);
180 
181     virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
182 
183     virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
184 
185     virtual DrmMetadata* getMetadata(int uniqueId, const String8* path);
186 
187     virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
188 
189     virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
190 
191     virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
192 
193     virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
194             const String8& rightsPath, const String8& contentPath);
195 
196     virtual String8 getOriginalMimeType(int uniqueId, const String8& path);
197 
198     virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
199 
200     virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
201 
202     virtual status_t consumeRights(
203             int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
204 
205     virtual status_t setPlaybackStatus(
206             int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
207 
208     virtual bool validateAction(
209             int uniqueId, const String8& path, int action, const ActionDescription& description);
210 
211     virtual status_t removeRights(int uniqueId, const String8& path);
212 
213     virtual status_t removeAllRights(int uniqueId);
214 
215     virtual int openConvertSession(int uniqueId, const String8& mimeType);
216 
217     virtual DrmConvertedStatus* convertData(
218             int uniqueId, int convertId, const DrmBuffer* inputData);
219 
220     virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
221 
222     virtual status_t getAllSupportInfo(
223             int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
224 
225     virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, off64_t offset, off64_t length);
226 
227     virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
228 
229     virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
230 
231     virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
232             int decryptUnitId, const DrmBuffer* headerInfo);
233 
234     virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
235             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
236 
237     virtual status_t finalizeDecryptUnit(
238             int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
239 
240     virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
241             void* buffer, ssize_t numBytes, off64_t offset);
242 };
243 
244 /**
245  * This is the Binder implementation class for DRM Manager service.
246  */
247 class BnDrmManagerService: public BnInterface<IDrmManagerService>
248 {
249 public:
250     virtual status_t onTransact(
251             uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
252 };
253 
254 };
255 
256 #endif /* __IDRM_MANAGER_SERVICE_H__ */
257 
258