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         OPEN_DECRYPT_SESSION_FOR_STREAMING,
74         CLOSE_DECRYPT_SESSION,
75         INITIALIZE_DECRYPT_UNIT,
76         DECRYPT,
77         FINALIZE_DECRYPT_UNIT,
78         PREAD
79     };
80 
81 public:
82     DECLARE_META_INTERFACE(DrmManagerService);
83 
84 public:
85     virtual int addUniqueId(bool isNative) = 0;
86 
87     virtual void removeUniqueId(int uniqueId) = 0;
88 
89     virtual void addClient(int uniqueId) = 0;
90 
91     virtual void removeClient(int uniqueId) = 0;
92 
93     virtual status_t setDrmServiceListener(
94             int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
95 
96     virtual DrmConstraints* getConstraints(
97             int uniqueId, const String8* path, const int action) = 0;
98 
99     virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0;
100 
101     virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
102 
103     virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
104 
105     virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
106 
107     virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
108             const String8& rightsPath, const String8& contentPath) = 0;
109 
110     virtual String8 getOriginalMimeType(int uniqueId, const String8& path, int fd) = 0;
111 
112     virtual int getDrmObjectType(
113             int uniqueId, const String8& path, const String8& mimeType) = 0;
114 
115     virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
116 
117     virtual status_t consumeRights(
118             int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) = 0;
119 
120     virtual status_t setPlaybackStatus(
121             int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus,
122             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 sp<DecryptHandle> openDecryptSession(
143                 int uniqueId, int fd, off64_t offset,
144                 off64_t length, const char* mime) = 0;
145 
146     virtual sp<DecryptHandle> openDecryptSession(
147                 int uniqueId, const char* uri, const char* mime) = 0;
148 
149     virtual sp<DecryptHandle> openDecryptSession(
150             int uniqueId, const DrmBuffer& buf, const String8& mimeType) = 0;
151 
152     virtual status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) = 0;
153 
154     virtual status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
155             int decryptUnitId, const DrmBuffer* headerInfo) = 0;
156 
157     virtual status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
158             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
159 
160     virtual status_t finalizeDecryptUnit(
161             int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) = 0;
162 
163     virtual ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
164             void* buffer, ssize_t numBytes,off64_t offset) = 0;
165 };
166 
167 /**
168  * This is the Binder implementation class for DRM Manager service.
169  */
170 class BpDrmManagerService: public BpInterface<IDrmManagerService>
171 {
172 public:
BpDrmManagerService(const sp<IBinder> & impl)173     explicit BpDrmManagerService(const sp<IBinder>& impl)
174             : BpInterface<IDrmManagerService>(impl) {}
175 
176     virtual int addUniqueId(bool isNative);
177 
178     virtual void removeUniqueId(int uniqueId);
179 
180     virtual void addClient(int uniqueId);
181 
182     virtual void removeClient(int uniqueId);
183 
184     virtual status_t setDrmServiceListener(
185             int uniqueId, const sp<IDrmServiceListener>& infoListener);
186 
187     virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
188 
189     virtual DrmMetadata* getMetadata(int uniqueId, const String8* path);
190 
191     virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
192 
193     virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
194 
195     virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
196 
197     virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
198             const String8& rightsPath, const String8& contentPath);
199 
200     virtual String8 getOriginalMimeType(int uniqueId, const String8& path, int fd);
201 
202     virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
203 
204     virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
205 
206     virtual status_t consumeRights(
207             int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve);
208 
209     virtual status_t setPlaybackStatus(
210             int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
211 
212     virtual bool validateAction(
213             int uniqueId, const String8& path, int action, const ActionDescription& description);
214 
215     virtual status_t removeRights(int uniqueId, const String8& path);
216 
217     virtual status_t removeAllRights(int uniqueId);
218 
219     virtual int openConvertSession(int uniqueId, const String8& mimeType);
220 
221     virtual DrmConvertedStatus* convertData(
222             int uniqueId, int convertId, const DrmBuffer* inputData);
223 
224     virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
225 
226     virtual status_t getAllSupportInfo(
227             int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
228 
229     virtual sp<DecryptHandle> openDecryptSession(
230                 int uniqueId, int fd, off64_t offset, off64_t length,
231                 const char* mime);
232 
233     virtual sp<DecryptHandle> openDecryptSession(
234                 int uniqueId, const char* uri, const char* mime);
235 
236     virtual sp<DecryptHandle> openDecryptSession(
237             int uniqueId, const DrmBuffer& buf, const String8& mimeType);
238 
239     virtual status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
240 
241     virtual status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
242             int decryptUnitId, const DrmBuffer* headerInfo);
243 
244     virtual status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
245             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
246 
247     virtual status_t finalizeDecryptUnit(
248             int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId);
249 
250     virtual ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
251             void* buffer, ssize_t numBytes, off64_t offset);
252 };
253 
254 /**
255  * This is the Binder implementation class for DRM Manager service.
256  */
257 class BnDrmManagerService: public BnInterface<IDrmManagerService>
258 {
259 public:
260     virtual status_t onTransact(
261             uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
262 };
263 
264 };
265 
266 #endif /* __IDRM_MANAGER_SERVICE_H__ */
267 
268