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