DrmEngineBase.cpp revision bf5b3b29e31b293313788d7464cfb258ac0da803
127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/*
227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project
327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License");
527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License.
627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at
727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *      http://www.apache.org/licenses/LICENSE-2.0
927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software
1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS,
1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and
1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License.
1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "DrmEngineBase.h"
1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiusing namespace android;
2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmEngineBase::DrmEngineBase() {
2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmEngineBase::~DrmEngineBase() {
2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints* DrmEngineBase::getConstraints(
3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, const String8* path, int action) {
3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onGetConstraints(uniqueId, path, action);
3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
343473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata* DrmEngineBase::getMetadata(int uniqueId, const String8* path) {
353473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return onGetMetadata(uniqueId, path);
363473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
373473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmEngineBase::initialize(int uniqueId) {
3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onInitialize(uniqueId);
4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmEngineBase::setOnInfoListener(
4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, const IDrmEngine::OnInfoListener* infoListener) {
4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onSetOnInfoListener(uniqueId, infoListener);
4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmEngineBase::terminate(int uniqueId) {
4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onTerminate(uniqueId);
4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmEngineBase::canHandle(int uniqueId, const String8& path) {
5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onCanHandle(uniqueId, path);
5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfoStatus* DrmEngineBase::processDrmInfo(int uniqueId, const DrmInfo* drmInfo) {
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onProcessDrmInfo(uniqueId, drmInfo);
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
592272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::saveRights(
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const DrmRights& drmRights,
6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath) {
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onSaveRights(uniqueId, drmRights, rightsPath, contentPath);
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo* DrmEngineBase::acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest) {
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onAcquireDrmInfo(uniqueId, drmInfoRequest);
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
69bf5b3b29e31b293313788d7464cfb258ac0da803James DongString8 DrmEngineBase::getOriginalMimeType(int uniqueId, const String8& path, int fd) {
70bf5b3b29e31b293313788d7464cfb258ac0da803James Dong    return onGetOriginalMimeType(uniqueId, path, fd);
7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmEngineBase::getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType) {
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onGetDrmObjectType(uniqueId, path, mimeType);
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmEngineBase::checkRightsStatus(int uniqueId, const String8& path, int action) {
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onCheckRightsStatus(uniqueId, path, action);
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
812272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::consumeRights(
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) {
832272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onConsumeRights(uniqueId, decryptHandle, action, reserve);
8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
862272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::setPlaybackStatus(
87a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang    int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) {
882272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onSetPlaybackStatus(uniqueId, decryptHandle, playbackStatus, position);
8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmEngineBase::validateAction(
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, const String8& path,
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int action, const ActionDescription& description) {
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onValidateAction(uniqueId, path, action, description);
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
972272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::removeRights(int uniqueId, const String8& path) {
982272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onRemoveRights(uniqueId, path);
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1012272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::removeAllRights(int uniqueId) {
1022272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onRemoveAllRights(uniqueId);
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1052272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::openConvertSession(int uniqueId, int convertId) {
1062272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onOpenConvertSession(uniqueId, convertId);
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConvertedStatus* DrmEngineBase::convertData(
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, int convertId, const DrmBuffer* inputData) {
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onConvertData(uniqueId, convertId, inputData);
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConvertedStatus* DrmEngineBase::closeConvertSession(int uniqueId, int convertId) {
11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onCloseConvertSession(uniqueId, convertId);
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo* DrmEngineBase::getSupportInfo(int uniqueId) {
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onGetSupportInfo(uniqueId);
12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmEngineBase::openDecryptSession(
1239d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    int uniqueId, DecryptHandle* decryptHandle,
1249d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    int fd, off64_t offset, off64_t length, const char* mime) {
1259d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong
1269d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    if (!mime || mime[0] == '\0') {
1279d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong        return onOpenDecryptSession(uniqueId, decryptHandle, fd, offset, length);
1289d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    }
1299d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong
1309d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    return onOpenDecryptSession(uniqueId, decryptHandle, fd, offset, length, mime);
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
133e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimistatus_t DrmEngineBase::openDecryptSession(
1349d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    int uniqueId, DecryptHandle* decryptHandle,
1359d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    const char* uri, const char* mime) {
1369d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    if (!mime || mime[0] == '\0') {
1379d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong        return onOpenDecryptSession(uniqueId, decryptHandle, uri);
1389d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    }
1399d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    return onOpenDecryptSession(uniqueId, decryptHandle, uri, mime);
140e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi}
141e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
142cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashistatus_t DrmEngineBase::openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
143cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi        const DrmBuffer& buf, const String8& mimeType) {
144cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi    return onOpenDecryptSession(uniqueId, decryptHandle, buf, mimeType);
145cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi}
146cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi
1472272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
1482272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onCloseDecryptSession(uniqueId, decryptHandle);
14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1512272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::initializeDecryptUnit(
15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, const DrmBuffer* headerInfo) {
1532272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onInitializeDecryptUnit(uniqueId, decryptHandle, decryptUnitId, headerInfo);
15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmEngineBase::decrypt(
15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
1582272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
1592272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onDecrypt(uniqueId, decryptHandle, decryptUnitId, encBuffer, decBuffer, IV);
16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1622272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimistatus_t DrmEngineBase::finalizeDecryptUnit(
16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) {
1642272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    return onFinalizeDecryptUnit(uniqueId, decryptHandle, decryptUnitId);
16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshissize_t DrmEngineBase::pread(
168a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang    int uniqueId, DecryptHandle* decryptHandle, void* buffer, ssize_t numBytes, off64_t offset) {
16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return onPread(uniqueId, decryptHandle, buffer, numBytes, offset);
17027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
17127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
172