1a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/*
2a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Copyright (C) 2010 The Android Open Source Project
3a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
4a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Licensed under the Apache License, Version 2.0 (the "License");
5a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * you may not use this file except in compliance with the License.
6a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * You may obtain a copy of the License at
7a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
8a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      http://www.apache.org/licenses/LICENSE-2.0
9a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
10a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Unless required by applicable law or agreed to in writing, software
11a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * distributed under the License is distributed on an "AS IS" BASIS,
12a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * See the License for the specific language governing permissions and
14a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * limitations under the License.
15a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
16a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
17a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifndef __FWDLOCKENGINE_H__
18a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#define __FWDLOCKENGINE_H__
19a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
20a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmEngineBase.h>
21a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmConstraints.h>
22a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmRights.h>
23a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfo.h>
24a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfoStatus.h>
25a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmConvertedStatus.h>
26a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfoRequest.h>
27a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmSupportInfo.h>
28a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfoEvent.h>
29a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
30a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include "SessionMap.h"
31a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include "FwdLockConv.h"
32a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
33a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheranamespace android {
34a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
35a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
36a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Forward Lock Engine class.
37a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
38a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraclass FwdLockEngine : public android::DrmEngineBase {
39a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
40a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherapublic:
41a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera    FwdLockEngine();
42a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera    virtual ~FwdLockEngine();
43a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
44a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraprotected:
45a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
46a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Get constraint information associated with input content.
47a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
48a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
49a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content
50a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Actions defined such as,
51a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Action::DEFAULT, Action::PLAY, etc
52a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmConstraints
53a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     key-value pairs of constraint are embedded in it
54a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @note
55a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     In case of error, return NULL
56a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
57a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmConstraints* onGetConstraints(int uniqueId, const String8* path, int action);
58a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
59a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
60a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Get metadata information associated with input content.
61a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
62a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
63a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content
64a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmMetadata
65a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      For Forward Lock engine, it returns an empty object
66a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @note
67a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     In case of error, returns NULL
68a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
69a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmMetadata* onGetMetadata(int uniqueId, const String8* path);
70a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
71a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
72a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Initialize plug-in.
73a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
74a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
75a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
76a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
77a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
78a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onInitialize(int uniqueId);
79a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
80a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
81a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Register a callback to be invoked when the caller required to
82a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * receive necessary information.
83a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
84a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
85a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param infoListener Listener
86a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
87a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
88a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
89a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSetOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener);
90a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
91a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
92a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Terminate the plug-in and release resources bound to it.
93a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
94a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
95a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
96a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
97a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
98a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onTerminate(int uniqueId);
99a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
100a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
101a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Get whether the given content can be handled by this plugin or not.
102a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
103a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
104a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path to the protected object
105a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return bool
106a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      Returns true if this plugin can handle , false in case of not able to handle
107a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
108a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherabool onCanHandle(int uniqueId, const String8& path);
109a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
110a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
111a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Processes the given DRM information as appropriate for its type.
112a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Not used for Forward Lock Engine.
113a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
114a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
115a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param drmInfo Information that needs to be processed
116a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmInfoStatus
117a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      instance as a result of processing given input
118a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
119a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo);
120a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
121a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
122a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Save DRM rights to specified rights path
123a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * and make association with content path.
124a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
125a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
126a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param drmRights DrmRights to be saved
127a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param rightsPath File path where rights to be saved
128a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param contentPath File path where content was saved
129a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
130a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
131a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
132a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSaveRights(int uniqueId,
133a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                      const DrmRights& drmRights,
134a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                      const String8& rightsPath,
135a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                      const String8& contentPath);
136a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
137a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
138a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Retrieves necessary information for registration, unregistration or rights
139a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * acquisition information.
140a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
141a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
142a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param drmInfoRequest Request information to retrieve drmInfo
143a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmInfo
144a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      instance as a result of processing given input
145a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
146a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmInfo* onAcquireDrmInfo(int uniqueId,
147a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                          const DrmInfoRequest* drmInfoRequest);
148a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
149a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
150a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Retrieves the mime type embedded inside the original content.
151a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
152a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
153a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content
154a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return String8
155a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *       Returns mime-type of the original content, such as "video/mpeg"
156a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
157a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraString8 onGetOriginalMimeType(int uniqueId, const String8& path);
158a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
159a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
160a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Retrieves the type of the protected object (content, rights, etc..)
161a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * using specified path or mimetype. At least one parameter should be non null
162a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * to retrieve DRM object type.
163a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
164a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
165a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the content or null.
166a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param mimeType Mime type of the content or null.
167a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return type of the DRM content,
168a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT
169a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
170a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraint onGetDrmObjectType(int uniqueId,
171a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                       const String8& path,
172a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                       const String8& mimeType);
173a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
174a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
175a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Check whether the given content has valid rights or not.
176a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
177a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
178a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content
179a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Action to perform (Action::DEFAULT, Action::PLAY, etc)
180a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return the status of the rights for the protected content,
181a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc.
182a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
183a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraint onCheckRightsStatus(int uniqueId,
184a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                        const String8& path,
185a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                        int action);
186a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
187a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
188a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Consumes the rights for a content.
189a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * If the reserve parameter is true the rights are reserved until the same
190a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * application calls this api again with the reserve parameter set to false.
191a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
192a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
193a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
194a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Action to perform. (Action::DEFAULT, Action::PLAY, etc)
195a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param reserve True if the rights should be reserved.
196a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
197a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
198a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
199a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onConsumeRights(int uniqueId,
200a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                         DecryptHandle* decryptHandle,
201a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                         int action,
202a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                         bool reserve);
203a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
204a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
205a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Informs the DRM Engine about the playback actions performed on the DRM files.
206a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
207a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
208a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
209a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE)
210a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param position Position in the file (in milliseconds) where the start occurs.
211a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Only valid together with Playback::START.
212a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
213a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
214a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
215a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API
216a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSetPlaybackStatus(int uniqueId,
217a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                             DecryptHandle* decryptHandle,
218a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                             int playbackStatus,
219a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                             int64_t position);
220a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else
221a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSetPlaybackStatus(int uniqueId,
222a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                             DecryptHandle* decryptHandle,
223a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                             int playbackStatus,
224a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                             int position);
225a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif
226a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
227a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
228a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *  Validates whether an action on the DRM content is allowed or not.
229a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
230a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
231a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content
232a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Action to validate (Action::PLAY, Action::TRANSFER, etc)
233a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param description Detailed description of the action
234a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return true if the action is allowed.
235a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
236a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherabool onValidateAction(int uniqueId,
237a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                      const String8& path,
238a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                      int action,
239a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                      const ActionDescription& description);
240a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
241a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
242a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Removes the rights associated with the given protected content.
243a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Not used for Forward Lock Engine.
244a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
245a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
246a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content
247a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
248a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
249a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
250a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onRemoveRights(int uniqueId, const String8& path);
251a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
252a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
253a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Removes all the rights information of each plug-in associated with
254a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM framework. Will be used in master reset but does nothing for
255a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Forward Lock Engine.
256a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
257a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
258a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
259a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
260a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
261a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onRemoveAllRights(int uniqueId);
262a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
263a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
264a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Starts the Forward Lock file conversion session.
265a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Each time the application tries to download a new DRM file
266a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * which needs to be converted, then the application has to
267a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * begin with calling this API. The convertId is used as the conversion session key
268a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * and must not be the same for different convert sessions.
269a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
270a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
271a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param convertId Handle for the convert session
272a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
273a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
274a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
275a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenConvertSession(int uniqueId, int convertId);
276a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
277a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
278a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Accepts and converts the input data which is part of DRM file.
279a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * The resultant converted data and the status is returned in the DrmConvertedInfo
280a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * object. This method will be called each time there is a new block
281a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * of data received by the application.
282a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
283a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
284a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param convertId Handle for the convert session
285a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param inputData Input Data which need to be converted
286a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Return object contains the status of the data conversion,
287a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *       the output converted data and offset. In this case the
288a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      application will ignore the offset information.
289a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
290a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmConvertedStatus* onConvertData(int uniqueId,
291a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                                  int convertId,
292a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                                  const DrmBuffer* inputData);
293a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
294a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
295a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Closes the convert session in case of data supply completed or error occurred.
296a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Upon successful conversion of the complete data, it returns signature calculated over
297a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * the entire data used over a conversion session. This signature must be copied to the offset
298a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * mentioned in the DrmConvertedStatus. Signature is used for data integrity protection.
299a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
300a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
301a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param convertId Handle for the convert session
302a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Return object contains the status of the data conversion,
303a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      the header and body signature data. It also informs
304a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      the application about the file offset at which this
305a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      signature data should be written.
306a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
307a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId);
308a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
309a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
310a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns the information about the Drm Engine capabilities which includes
311a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * supported MimeTypes and file suffixes.
312a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
313a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
314a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmSupportInfo
315a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *      instance which holds the capabilities of a plug-in
316a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
317a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmSupportInfo* onGetSupportInfo(int uniqueId);
318a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
319a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
320a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Open the decrypt session to decrypt the given protected content.
321a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
322a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
323a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the current decryption session
324a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param fd File descriptor of the protected content to be decrypted
325a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param offset Start position of the content
326a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param length The length of the protected content
327a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return
328a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
329a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
330a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API
331a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenDecryptSession(int uniqueId,
332a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                              DecryptHandle* decryptHandle,
333a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                              int fd, off64_t offset, off64_t length);
334a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else
335a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenDecryptSession(int uniqueId,
336a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                              DecryptHandle* decryptHandle,
337a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                              int fd, int offset, int length);
338a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif
339a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
340a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
341a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Open the decrypt session to decrypt the given protected content.
342a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
343a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
344a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the current decryption session
345a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uri Path of the protected content to be decrypted
346a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return
347a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
348a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
349a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenDecryptSession(int uniqueId,
350a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                              DecryptHandle* decryptHandle,
351a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                              const char* uri);
352a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
353a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
354a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Close the decrypt session for the given handle.
355a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
356a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
357a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
358a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
359a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
360a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
361a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onCloseDecryptSession(int uniqueId,
362a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                               DecryptHandle* decryptHandle);
363a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
364a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
365a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Initialize decryption for the given unit of the protected content.
366a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
367a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
368a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
369a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID which specifies decryption unit, such as track ID
370a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param headerInfo Information for initializing decryption of this decrypUnit
371a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return
372a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
373a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
374a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onInitializeDecryptUnit(int uniqueId,
375a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                                 DecryptHandle* decryptHandle,
376a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                                 int decryptUnitId,
377a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                                 const DrmBuffer* headerInfo);
378a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
379a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
380a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Decrypt the protected content buffers for the given unit.
381a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * This method will be called any number of times, based on number of
382a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * encrypted streams received from application.
383a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
384a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
385a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
386a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID which specifies decryption unit, such as track ID
387a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param encBuffer Encrypted data block
388a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decBuffer Decrypted data block
389a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
390a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns the error code for this API
391a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED
392a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
393a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_DECRYPT for failure.
394a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
395a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onDecrypt(int uniqueId,
396a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                   DecryptHandle* decryptHandle,
397a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                   int decryptUnitId,
398a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                   const DrmBuffer* encBuffer,
399a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                   DrmBuffer** decBuffer);
400a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
401a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
402a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Decrypt the protected content buffers for the given unit.
403a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * This method will be called any number of times, based on number of
404a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * encrypted streams received from application.
405a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
406a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
407a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptId Handle for the decryption session
408a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID Specifies decryption unit, such as track ID
409a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param encBuffer Encrypted data block
410a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decBuffer Decrypted data block
411a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param IV Optional buffer
412a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t
413a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     Returns the error code for this API
414a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED
415a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
416a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_DECRYPT for failure.
417a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
418a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle,
419a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                   int decryptUnitId, const DrmBuffer* encBuffer,
420a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                   DrmBuffer** decBuffer, DrmBuffer* IV);
421a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
422a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
423a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Finalize decryption for the given unit of the protected content.
424a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
425a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
426a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
427a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID Specifies decryption unit, such as track ID
428a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return
429a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
430a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
431a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onFinalizeDecryptUnit(int uniqueId,
432a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                               DecryptHandle* decryptHandle,
433a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                               int decryptUnitId);
434a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
435a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
436a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Reads the specified number of bytes from an open DRM file.
437a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
438a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
439a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
440a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param buffer Reference to the buffer that should receive the read data.
441a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param numBytes Number of bytes to read.
442a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
443a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Number of bytes read.
444a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @retval -1 Failure.
445a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
446a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherassize_t onRead(int uniqueId,
447a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera               DecryptHandle* decryptHandle,
448a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera               void* pBuffer,
449a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera               int numBytes);
450a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
451a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
452a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Updates the file position within an open DRM file.
453a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
454a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
455a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
456a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param offset Offset with which to update the file position.
457a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param whence One of SEEK_SET, SEEK_CUR, and SEEK_END.
458a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *           These constants are defined in unistd.h.
459a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
460a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return New file position.
461a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @retval ((off_t)-1) Failure.
462a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
463a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API
464a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraoff64_t onLseek(int uniqueId,
465a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                DecryptHandle* decryptHandle,
466a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                off64_t offset,
467a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                int whence);
468a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else
469a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraoff_t onLseek(int uniqueId,
470a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera              DecryptHandle* decryptHandle,
471a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera              off_t offset,
472a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera              int whence);
473a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif
474a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
475a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
476a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Reads the specified number of bytes from an open DRM file.
477a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
478a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session
479a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session
480a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param buffer Reference to the buffer that should receive the read data.
481a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param numBytes Number of bytes to read.
482a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param offset Offset with which to update the file position.
483a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
484a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Number of bytes read. Returns -1 for Failure.
485a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
486a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API
487a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherassize_t onPread(int uniqueId,
488a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                DecryptHandle* decryptHandle,
489a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                void* buffer,
490a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                ssize_t numBytes,
491a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                off64_t offset);
492a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else
493a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherassize_t onPread(int uniqueId,
494a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                DecryptHandle* decryptHandle,
495a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                void* buffer,
496a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                ssize_t numBytes,
497a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera                off_t offset);
498a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif
499a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
500a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraprivate:
501a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
502a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
503a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Session Class for Forward Lock Conversion. An object of this class is created
504a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * for every conversion.
505a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
506a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraclass ConvertSession {
507a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera    public :
508a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        int uniqueId;
509a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        FwdLockConv_Output_t output;
510a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
511a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        ConvertSession() {
512a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera            uniqueId = 0;
513a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera            memset(&output, 0, sizeof(FwdLockConv_Output_t));
514a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        }
515a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
516a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        virtual ~ConvertSession() {}
517a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera};
518a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
519a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
520a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Session Class for Forward Lock decoder. An object of this class is created
521a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * for every decoding session.
522a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
523a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraclass DecodeSession {
524a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera    public :
525a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        int fileDesc;
526a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        off_t offset;
527a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
528a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        DecodeSession() {
529a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera            fileDesc = -1;
530a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera            offset = 0;
531a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        }
532a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
533a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        DecodeSession(int fd) {
534a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera            fileDesc = fd;
535a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera            offset = 0;
536a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        }
537a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
538a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera        virtual ~DecodeSession() {}
539a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera};
540a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
541a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
542a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Session Map Tables for Conversion and Decoding of forward lock files.
543a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
544a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraSessionMap<ConvertSession*> convertSessionMap;
545a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraSessionMap<DecodeSession*> decodeSessionMap;
546a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
547a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/**
548a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Converts the error code from Forward Lock Converter to DrmConvertStatus error code.
549a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
550a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param Forward Lock Converter error code
551a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera *
552a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Status code from DrmConvertStatus.
553a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */
554a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatic int getConvertedStatus(FwdLockConv_Status_t status);
555a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera};
556a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
557a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera};
558a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera
559a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif /* __FWDLOCKENGINE_H__ */
560