blob: a4d128af8f8ea299655cd1b482cdd06b7ccaabe5 [file] [log] [blame]
aimitakeshi27ed8ad2010-07-29 10:12:27 +09001/*
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
26namespace android {
27
28class DrmContentIds;
29class DrmConstraints;
30class DrmRights;
31class DrmInfo;
32class DrmInfoStatus;
33class DrmInfoRequest;
34class DrmSupportInfo;
35class DrmConvertedStatus;
36class String8;
37class ActionDescription;
38
39/**
40 * This is the interface class for DRM Manager service.
41 *
42 */
43class IDrmManagerService : public IInterface
44{
45public:
46 enum {
47 LOAD_PLUGINS = IBinder::FIRST_CALL_TRANSACTION,
48 LOAD_PLUGINS_FROM_PATH,
49 SET_DRM_SERVICE_LISTENER,
50 UNLOAD_PLUGINS,
51 INSTALL_DRM_ENGINE,
52 GET_CONSTRAINTS_FROM_CONTENT,
53 CAN_HANDLE,
54 PROCESS_DRM_INFO,
55 ACQUIRE_DRM_INFO,
56 SAVE_RIGHTS,
57 GET_ORIGINAL_MIMETYPE,
58 GET_DRM_OBJECT_TYPE,
59 CHECK_RIGHTS_STATUS,
60 CONSUME_RIGHTS,
61 SET_PLAYBACK_STATUS,
62 VALIDATE_ACTION,
63 REMOVE_RIGHTS,
64 REMOVE_ALL_RIGHTS,
65 OPEN_CONVERT_SESSION,
66 CONVERT_DATA,
67 CLOSE_CONVERT_SESSION,
68 GET_ALL_SUPPORT_INFO,
69 OPEN_DECRYPT_SESSION,
70 CLOSE_DECRYPT_SESSION,
71 INITIALIZE_DECRYPT_UNIT,
72 DECRYPT,
73 FINALIZE_DECRYPT_UNIT,
74 PREAD
75 };
76
77public:
78 DECLARE_META_INTERFACE(DrmManagerService);
79
80public:
81 virtual status_t loadPlugIns(int uniqueId) = 0;
82
83 virtual status_t loadPlugIns(int uniqueId, const String8& plugInDirPath) = 0;
84
85 virtual status_t setDrmServiceListener(
86 int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
87
88 virtual status_t unloadPlugIns(int uniqueId) = 0;
89
90 virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0;
91
92 virtual DrmConstraints* getConstraints(
93 int uniqueId, const String8* path, const int action) = 0;
94
95 virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
96
97 virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
98
99 virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
100
101 virtual void saveRights(int uniqueId, const DrmRights& drmRights,
102 const String8& rightsPath, const String8& contentPath) = 0;
103
104 virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0;
105
106 virtual int getDrmObjectType(
107 int uniqueId, const String8& path, const String8& mimeType) = 0;
108
109 virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
110
111 virtual void consumeRights(
112 int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
113
114 virtual void setPlaybackStatus(
115 int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position) = 0;
116
117 virtual bool validateAction(
118 int uniqueId, const String8& path,
119 int action, const ActionDescription& description) = 0;
120
121 virtual void removeRights(int uniqueId, const String8& path) = 0;
122
123 virtual void removeAllRights(int uniqueId) = 0;
124
125 virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0;
126
127 virtual DrmConvertedStatus* convertData(
128 int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
129
130 virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0;
131
132 virtual status_t getAllSupportInfo(
133 int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
134
135 virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length) = 0;
136
137 virtual void closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
138
139 virtual void initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
140 int decryptUnitId, const DrmBuffer* headerInfo) = 0;
141
142 virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle,
143 int decryptUnitId, const DrmBuffer* encBuffer, DrmBuffer** decBuffer) = 0;
144
145 virtual void finalizeDecryptUnit(
146 int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
147
148 virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
149 void* buffer, ssize_t numBytes,off_t offset) = 0;
150};
151
152/**
153 * This is the Binder implementation class for DRM Manager service.
154 */
155class BpDrmManagerService: public BpInterface<IDrmManagerService>
156{
157public:
158 BpDrmManagerService(const sp<IBinder>& impl)
159 : BpInterface<IDrmManagerService>(impl) {}
160
161 virtual status_t loadPlugIns(int uniqueId);
162
163 virtual status_t loadPlugIns(int uniqueId, const String8& plugInDirPath);
164
165 virtual status_t setDrmServiceListener(
166 int uniqueId, const sp<IDrmServiceListener>& infoListener);
167
168 virtual status_t unloadPlugIns(int uniqueId);
169
170 virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
171
172 virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
173
174 virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
175
176 virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
177
178 virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
179
180 virtual void saveRights(int uniqueId, const DrmRights& drmRights,
181 const String8& rightsPath, const String8& contentPath);
182
183 virtual String8 getOriginalMimeType(int uniqueId, const String8& path);
184
185 virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
186
187 virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
188
189 virtual void consumeRights(
190 int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
191
192 virtual void setPlaybackStatus(
193 int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position);
194
195 virtual bool validateAction(
196 int uniqueId, const String8& path, int action, const ActionDescription& description);
197
198 virtual void removeRights(int uniqueId, const String8& path);
199
200 virtual void removeAllRights(int uniqueId);
201
202 virtual int openConvertSession(int uniqueId, const String8& mimeType);
203
204 virtual DrmConvertedStatus* convertData(
205 int uniqueId, int convertId, const DrmBuffer* inputData);
206
207 virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
208
209 virtual status_t getAllSupportInfo(
210 int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
211
212 virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length);
213
214 virtual void closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
215
216 virtual void initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
217 int decryptUnitId, const DrmBuffer* headerInfo);
218
219 virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle,
220 int decryptUnitId, const DrmBuffer* encBuffer, DrmBuffer** decBuffer);
221
222 virtual void finalizeDecryptUnit(
223 int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
224
225 virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
226 void* buffer, ssize_t numBytes, off_t offset);
227};
228
229/**
230 * This is the Binder implementation class for DRM Manager service.
231 */
232class BnDrmManagerService: public BnInterface<IDrmManagerService>
233{
234public:
235 virtual status_t onTransact(
236 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
237};
238
239};
240
241#endif /* __IDRM_MANAGER_SERVICE_H__ */
242