summaryrefslogtreecommitdiffstats
path: root/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp')
-rw-r--r--drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp695
1 files changed, 0 insertions, 695 deletions
diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
deleted file mode 100644
index 4b1b40e..0000000
--- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
+++ /dev/null
@@ -1,695 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SessionMap.h"
-#include "FwdLockEngine.h"
-#include <utils/Log.h>
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-#include "drm_framework_common.h"
-#include <fcntl.h>
-#include <limits.h>
-#include <DrmRights.h>
-#include <DrmConstraints.h>
-#include <DrmMetadata.h>
-#include <DrmInfo.h>
-#include <DrmInfoStatus.h>
-#include <DrmInfoRequest.h>
-#include <DrmSupportInfo.h>
-#include <DrmConvertedStatus.h>
-#include <utils/String8.h>
-#include "FwdLockConv.h"
-#include "FwdLockFile.h"
-#include "FwdLockGlue.h"
-#include "MimeTypeUtil.h"
-
-#undef LOG_TAG
-#define LOG_TAG "FwdLockEngine"
-
-#ifdef DRM_OMA_FL_ENGINE_DEBUG
-#define LOG_NDEBUG 0
-#define LOG_VERBOSE(...) ALOGV(__VA_ARGS__)
-#else
-#define LOG_VERBOSE(...)
-#endif
-
-using namespace android;
-// This extern "C" is mandatory to be managed by TPlugInManager
-extern "C" IDrmEngine* create() {
- return new FwdLockEngine();
-}
-
-// This extern "C" is mandatory to be managed by TPlugInManager
-extern "C" void destroy(IDrmEngine* plugIn) {
- delete plugIn;
-}
-
-FwdLockEngine::FwdLockEngine() {
- LOG_VERBOSE("FwdLockEngine Construction");
-}
-
-FwdLockEngine::~FwdLockEngine() {
- LOG_VERBOSE("FwdLockEngine Destruction");
-
- int size = decodeSessionMap.getSize();
-
- for (int i = 0; i < size; i++) {
- DecodeSession *session = (DecodeSession*) decodeSessionMap.getValueAt(i);
- FwdLockFile_detach(session->fileDesc);
- ::close(session->fileDesc);
- }
-
- size = convertSessionMap.getSize();
- for (int i = 0; i < size; i++) {
- ConvertSession *convSession = (ConvertSession*) convertSessionMap.getValueAt(i);
- FwdLockConv_CloseSession(convSession->uniqueId, &(convSession->output));
- }
-}
-
-int FwdLockEngine::getConvertedStatus(FwdLockConv_Status_t status) {
- int retStatus = DrmConvertedStatus::STATUS_ERROR;
-
- switch(status) {
- case FwdLockConv_Status_OK:
- retStatus = DrmConvertedStatus::STATUS_OK;
- break;
- case FwdLockConv_Status_SyntaxError:
- case FwdLockConv_Status_InvalidArgument:
- case FwdLockConv_Status_UnsupportedFileFormat:
- case FwdLockConv_Status_UnsupportedContentTransferEncoding:
- ALOGE("FwdLockEngine getConvertedStatus: file conversion Error %d. "
- "Returning STATUS_INPUTDATA_ERROR", status);
- retStatus = DrmConvertedStatus::STATUS_INPUTDATA_ERROR;
- break;
- default:
- ALOGE("FwdLockEngine getConvertedStatus: file conversion Error %d. "
- "Returning STATUS_ERROR", status);
- retStatus = DrmConvertedStatus::STATUS_ERROR;
- break;
- }
-
- return retStatus;
-}
-
-DrmConstraints* FwdLockEngine::onGetConstraints(int uniqueId, const String8* path, int action) {
- DrmConstraints* drmConstraints = NULL;
-
- LOG_VERBOSE("FwdLockEngine::onGetConstraints");
-
- if (NULL != path &&
- (RightsStatus::RIGHTS_VALID == onCheckRightsStatus(uniqueId, *path, action))) {
- // Return the empty constraints to show no error condition.
- drmConstraints = new DrmConstraints();
- }
-
- return drmConstraints;
-}
-
-DrmMetadata* FwdLockEngine::onGetMetadata(int uniqueId, const String8* path) {
- DrmMetadata* drmMetadata = NULL;
-
- LOG_VERBOSE("FwdLockEngine::onGetMetadata");
-
- if (NULL != path) {
- // Returns empty metadata to show no error condition.
- drmMetadata = new DrmMetadata();
- }
-
- return drmMetadata;
-}
-
-android::status_t FwdLockEngine::onInitialize(int uniqueId) {
- LOG_VERBOSE("FwdLockEngine::onInitialize");
-
- if (FwdLockGlue_InitializeKeyEncryption()) {
- LOG_VERBOSE("FwdLockEngine::onInitialize -- FwdLockGlue_InitializeKeyEncryption succeeded");
- } else {
- ALOGE("FwdLockEngine::onInitialize -- FwdLockGlue_InitializeKeyEncryption failed:"
- "errno = %d", errno);
- }
-
- return DRM_NO_ERROR;
-}
-
-android::status_t
-FwdLockEngine::onSetOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener) {
- // Not used
- LOG_VERBOSE("FwdLockEngine::onSetOnInfoListener");
-
- return DRM_NO_ERROR;
-}
-
-android::status_t FwdLockEngine::onTerminate(int uniqueId) {
- LOG_VERBOSE("FwdLockEngine::onTerminate");
-
- return DRM_NO_ERROR;
-}
-
-// make sure that lower-case letters are used.
-const String8 FwdLockEngine::FileSuffixes[] = {
- String8(".fl"),
- String8(".dm"),
-};
-
-// make sure that lower-case letters are used.
-const String8 FwdLockEngine::MimeTypes[] = {
- String8("application/x-android-drm-fl"),
- String8("application/vnd.oma.drm.message"),
-};
-
-const String8 FwdLockEngine::Description("OMA V1 Forward Lock");
-
-void FwdLockEngine::AddSupportedMimeTypes(DrmSupportInfo *info) {
- for (size_t i = 0, n = sizeof(MimeTypes)/sizeof(MimeTypes[0]); i < n; ++i) {
- info->addMimeType(MimeTypes[i]);
- }
-}
-
-void FwdLockEngine::AddSupportedFileSuffixes(DrmSupportInfo *info) {
- for (size_t i = 0, n = sizeof(FileSuffixes)/sizeof(FileSuffixes[0]); i < n; ++i) {
- info->addFileSuffix(FileSuffixes[i]);
- }
-}
-
-bool FwdLockEngine::IsMimeTypeSupported(const String8& mime) {
- String8 tmp(mime);
- tmp.toLower();
- for (size_t i = 0, n = sizeof(MimeTypes)/sizeof(MimeTypes[0]); i < n; ++i) {
- if (tmp == MimeTypes[i]) {
- return true;
- }
- }
- return false;
-}
-
-bool FwdLockEngine::IsFileSuffixSupported(const String8& suffix) {
- String8 tmp(suffix);
- tmp.toLower();
- for (size_t i = 0, n = sizeof(FileSuffixes)/sizeof(FileSuffixes[0]); i < n; ++i) {
- if (tmp == FileSuffixes[i]) {
- return true;
- }
- }
- return false;
-}
-
-DrmSupportInfo* FwdLockEngine::onGetSupportInfo(int uniqueId) {
- DrmSupportInfo* pSupportInfo = new DrmSupportInfo();
-
- LOG_VERBOSE("FwdLockEngine::onGetSupportInfo");
-
- // fill all Forward Lock mimetypes and extensions
- if (NULL != pSupportInfo) {
- AddSupportedMimeTypes(pSupportInfo);
- AddSupportedFileSuffixes(pSupportInfo);
- pSupportInfo->setDescription(Description);
- }
-
- return pSupportInfo;
-}
-
-bool FwdLockEngine::onCanHandle(int uniqueId, const String8& path) {
- bool result = false;
-
- String8 extString = path.getPathExtension();
- return IsFileSuffixSupported(extString);
-}
-
-DrmInfoStatus* FwdLockEngine::onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo) {
- DrmInfoStatus *drmInfoStatus = NULL;
-
- // Nothing to process
-
- drmInfoStatus = new DrmInfoStatus((int)DrmInfoStatus::STATUS_OK, 0, NULL, String8(""));
-
- LOG_VERBOSE("FwdLockEngine::onProcessDrmInfo");
-
- return drmInfoStatus;
-}
-
-status_t FwdLockEngine::onSaveRights(
- int uniqueId,
- const DrmRights& drmRights,
- const String8& rightsPath,
- const String8& contentPath) {
- // No rights to save. Return
- LOG_VERBOSE("FwdLockEngine::onSaveRights");
- return DRM_ERROR_UNKNOWN;
-}
-
-DrmInfo* FwdLockEngine::onAcquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest) {
- DrmInfo* drmInfo = NULL;
-
- // Nothing to be done for Forward Lock file
- LOG_VERBOSE("FwdLockEngine::onAcquireDrmInfo");
-
- return drmInfo;
-}
-
-int FwdLockEngine::onCheckRightsStatus(int uniqueId,
- const String8& path,
- int action) {
- int result = RightsStatus::RIGHTS_INVALID;
-
- LOG_VERBOSE("FwdLockEngine::onCheckRightsStatus");
-
- // Only Transfer action is not allowed for forward Lock files.
- if (onCanHandle(uniqueId, path)) {
- switch(action) {
- case Action::DEFAULT:
- case Action::PLAY:
- case Action::RINGTONE:
- case Action::OUTPUT:
- case Action::PREVIEW:
- case Action::EXECUTE:
- case Action::DISPLAY:
- result = RightsStatus::RIGHTS_VALID;
- break;
-
- case Action::TRANSFER:
- default:
- result = RightsStatus::RIGHTS_INVALID;
- break;
- }
- }
-
- return result;
-}
-
-status_t FwdLockEngine::onConsumeRights(int uniqueId,
- DecryptHandle* decryptHandle,
- int action,
- bool reserve) {
- // No rights consumption
- LOG_VERBOSE("FwdLockEngine::onConsumeRights");
- return DRM_NO_ERROR;
-}
-
-bool FwdLockEngine::onValidateAction(int uniqueId,
- const String8& path,
- int action,
- const ActionDescription& description) {
- LOG_VERBOSE("FwdLockEngine::onValidateAction");
-
- // For the forwardlock engine checkRights and ValidateAction are the same.
- return (onCheckRightsStatus(uniqueId, path, action) == RightsStatus::RIGHTS_VALID);
-}
-
-String8 FwdLockEngine::onGetOriginalMimeType(int uniqueId, const String8& path) {
- LOG_VERBOSE("FwdLockEngine::onGetOriginalMimeType");
- String8 mimeString = String8("");
- int fileDesc = FwdLockFile_open(path.string());
-
- if (-1 < fileDesc) {
- const char* pMimeType = FwdLockFile_GetContentType(fileDesc);
-
- if (NULL != pMimeType) {
- String8 contentType = String8(pMimeType);
- contentType.toLower();
- mimeString = MimeTypeUtil::convertMimeType(contentType);
- }
-
- FwdLockFile_close(fileDesc);
- }
-
- return mimeString;
-}
-
-int FwdLockEngine::onGetDrmObjectType(int uniqueId,
- const String8& path,
- const String8& mimeType) {
- String8 mimeStr = String8(mimeType);
-
- LOG_VERBOSE("FwdLockEngine::onGetDrmObjectType");
-
- /* Checks whether
- * 1. path and mime type both are not empty strings (meaning unavailable) else content is unknown
- * 2. if one of them is empty string and if other is known then its a DRM Content Object.
- * 3. if both of them are available, then both may be of known type
- * (regardless of the relation between them to make it compatible with other DRM Engines)
- */
- if (((0 == path.length()) || onCanHandle(uniqueId, path)) &&
- ((0 == mimeType.length()) || IsMimeTypeSupported(mimeType)) && (mimeType != path) ) {
- return DrmObjectType::CONTENT;
- }
-
- return DrmObjectType::UNKNOWN;
-}
-
-status_t FwdLockEngine::onRemoveRights(int uniqueId, const String8& path) {
- // No Rights to remove
- LOG_VERBOSE("FwdLockEngine::onRemoveRights");
- return DRM_NO_ERROR;
-}
-
-status_t FwdLockEngine::onRemoveAllRights(int uniqueId) {
- // No rights to remove
- LOG_VERBOSE("FwdLockEngine::onRemoveAllRights");
- return DRM_NO_ERROR;
-}
-
-#ifdef USE_64BIT_DRM_API
-status_t FwdLockEngine::onSetPlaybackStatus(int uniqueId, DecryptHandle* decryptHandle,
- int playbackStatus, int64_t position) {
-#else
-status_t FwdLockEngine::onSetPlaybackStatus(int uniqueId, DecryptHandle* decryptHandle,
- int playbackStatus, int position) {
-#endif
- // Not used
- LOG_VERBOSE("FwdLockEngine::onSetPlaybackStatus");
- return DRM_NO_ERROR;
-}
-
-status_t FwdLockEngine::onOpenConvertSession(int uniqueId,
- int convertId) {
- status_t result = DRM_ERROR_UNKNOWN;
- LOG_VERBOSE("FwdLockEngine::onOpenConvertSession");
- if (!convertSessionMap.isCreated(convertId)) {
- ConvertSession *newSession = new ConvertSession();
- if (FwdLockConv_Status_OK ==
- FwdLockConv_OpenSession(&(newSession->uniqueId), &(newSession->output))) {
- convertSessionMap.addValue(convertId, newSession);
- result = DRM_NO_ERROR;
- } else {
- ALOGE("FwdLockEngine::onOpenConvertSession -- FwdLockConv_OpenSession failed.");
- delete newSession;
- }
- }
- return result;
-}
-
-DrmConvertedStatus* FwdLockEngine::onConvertData(int uniqueId,
- int convertId,
- const DrmBuffer* inputData) {
- FwdLockConv_Status_t retStatus = FwdLockConv_Status_InvalidArgument;
- DrmBuffer *convResult = new DrmBuffer(NULL, 0);
- int offset = -1;
-
- if (NULL != inputData && convertSessionMap.isCreated(convertId)) {
- ConvertSession *convSession = convertSessionMap.getValue(convertId);
-
- if (NULL != convSession) {
- retStatus = FwdLockConv_ConvertData(convSession->uniqueId,
- inputData->data,
- inputData->length,
- &(convSession->output));
-
- if (FwdLockConv_Status_OK == retStatus) {
- // return bytes from conversion if available
- if (convSession->output.fromConvertData.numBytes > 0) {
- convResult->data = new char[convSession->output.fromConvertData.numBytes];
-
- if (NULL != convResult->data) {
- convResult->length = convSession->output.fromConvertData.numBytes;
- memcpy(convResult->data,
- (char *)convSession->output.fromConvertData.pBuffer,
- convResult->length);
- }
- }
- } else {
- offset = convSession->output.fromConvertData.errorPos;
- }
- }
- }
- return new DrmConvertedStatus(getConvertedStatus(retStatus), convResult, offset);
-}
-
-DrmConvertedStatus* FwdLockEngine::onCloseConvertSession(int uniqueId,
- int convertId) {
- FwdLockConv_Status_t retStatus = FwdLockConv_Status_InvalidArgument;
- DrmBuffer *convResult = new DrmBuffer(NULL, 0);
- int offset = -1;
-
- LOG_VERBOSE("FwdLockEngine::onCloseConvertSession");
-
- if (convertSessionMap.isCreated(convertId)) {
- ConvertSession *convSession = convertSessionMap.getValue(convertId);
-
- if (NULL != convSession) {
- retStatus = FwdLockConv_CloseSession(convSession->uniqueId, &(convSession->output));
-
- if (FwdLockConv_Status_OK == retStatus) {
- offset = convSession->output.fromCloseSession.fileOffset;
- convResult->data = new char[FWD_LOCK_SIGNATURES_SIZE];
-
- if (NULL != convResult->data) {
- convResult->length = FWD_LOCK_SIGNATURES_SIZE;
- memcpy(convResult->data,
- (char *)convSession->output.fromCloseSession.signatures,
- convResult->length);
- }
- }
- }
- convertSessionMap.removeValue(convertId);
- }
- return new DrmConvertedStatus(getConvertedStatus(retStatus), convResult, offset);
-}
-
-#ifdef USE_64BIT_DRM_API
-status_t FwdLockEngine::onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
- int fd,
- off64_t offset,
- off64_t length) {
-#else
-status_t FwdLockEngine::onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
- int fd,
- int offset,
- int length) {
-#endif
- status_t result = DRM_ERROR_CANNOT_HANDLE;
- int fileDesc = -1;
-
- LOG_VERBOSE("FwdLockEngine::onOpenDecryptSession");
-
- if ((-1 < fd) &&
- (NULL != decryptHandle) &&
- (!decodeSessionMap.isCreated(decryptHandle->decryptId))) {
- fileDesc = dup(fd);
- } else {
- ALOGE("FwdLockEngine::onOpenDecryptSession parameter error");
- return result;
- }
-
- if (-1 < fileDesc &&
- -1 < ::lseek(fileDesc, offset, SEEK_SET) &&
- -1 < FwdLockFile_attach(fileDesc)) {
- // check for file integrity. This must be done to protect the content mangling.
- int retVal = FwdLockFile_CheckHeaderIntegrity(fileDesc);
- DecodeSession* decodeSession = new DecodeSession(fileDesc);
-
- if (retVal && NULL != decodeSession) {
- decodeSessionMap.addValue(decryptHandle->decryptId, decodeSession);
- const char *pmime= FwdLockFile_GetContentType(fileDesc);
- String8 contentType = String8(pmime == NULL ? "" : pmime);
- contentType.toLower();
- decryptHandle->mimeType = MimeTypeUtil::convertMimeType(contentType);
- decryptHandle->decryptApiType = DecryptApiType::CONTAINER_BASED;
- decryptHandle->status = RightsStatus::RIGHTS_VALID;
- decryptHandle->decryptInfo = NULL;
- result = DRM_NO_ERROR;
- } else {
- LOG_VERBOSE("FwdLockEngine::onOpenDecryptSession Integrity Check failed for the fd");
- FwdLockFile_detach(fileDesc);
- delete decodeSession;
- }
- }
-
- if (DRM_NO_ERROR != result && -1 < fileDesc) {
- ::close(fileDesc);
- }
-
- LOG_VERBOSE("FwdLockEngine::onOpenDecryptSession Exit. result = %d", result);
-
- return result;
-}
-
-status_t FwdLockEngine::onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
- const char* uri) {
- status_t result = DRM_ERROR_CANNOT_HANDLE;
- const char fileTag [] = "file://";
-
- if (NULL != decryptHandle && NULL != uri && strlen(uri) > sizeof(fileTag)) {
- String8 uriTag = String8(uri);
- uriTag.toLower();
-
- if (0 == strncmp(uriTag.string(), fileTag, sizeof(fileTag) - 1)) {
- const char *filePath = strchr(uri + sizeof(fileTag) - 1, '/');
- if (NULL != filePath && onCanHandle(uniqueId, String8(filePath))) {
- int fd = open(filePath, O_RDONLY);
-
- if (-1 < fd) {
- // offset is always 0 and length is not used. so any positive size.
- result = onOpenDecryptSession(uniqueId, decryptHandle, fd, 0, 1);
-
- // fd is duplicated already if success. closing the file
- close(fd);
- }
- }
- }
- }
-
- return result;
-}
-
-status_t FwdLockEngine::onCloseDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle) {
- status_t result = DRM_ERROR_UNKNOWN;
- LOG_VERBOSE("FwdLockEngine::onCloseDecryptSession");
-
- if (NULL != decryptHandle && decodeSessionMap.isCreated(decryptHandle->decryptId)) {
- DecodeSession* session = decodeSessionMap.getValue(decryptHandle->decryptId);
- if (NULL != session && session->fileDesc > -1) {
- FwdLockFile_detach(session->fileDesc);
- ::close(session->fileDesc);
- decodeSessionMap.removeValue(decryptHandle->decryptId);
- result = DRM_NO_ERROR;
- }
- }
-
- if (NULL != decryptHandle) {
- if (NULL != decryptHandle->decryptInfo) {
- delete decryptHandle->decryptInfo;
- decryptHandle->decryptInfo = NULL;
- }
-
- decryptHandle->copyControlVector.clear();
- decryptHandle->extendedData.clear();
-
- delete decryptHandle;
- decryptHandle = NULL;
- }
-
- LOG_VERBOSE("FwdLockEngine::onCloseDecryptSession Exit");
- return result;
-}
-
-status_t FwdLockEngine::onInitializeDecryptUnit(int uniqueId,
- DecryptHandle* decryptHandle,
- int decryptUnitId,
- const DrmBuffer* headerInfo) {
- ALOGE("FwdLockEngine::onInitializeDecryptUnit is not supported for this DRM scheme");
- return DRM_ERROR_UNKNOWN;
-}
-
-status_t FwdLockEngine::onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
- const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
- ALOGE("FwdLockEngine::onDecrypt is not supported for this DRM scheme");
- return DRM_ERROR_UNKNOWN;
-}
-
-status_t FwdLockEngine::onDecrypt(int uniqueId,
- DecryptHandle* decryptHandle,
- int decryptUnitId,
- const DrmBuffer* encBuffer,
- DrmBuffer** decBuffer) {
- ALOGE("FwdLockEngine::onDecrypt is not supported for this DRM scheme");
- return DRM_ERROR_UNKNOWN;
-}
-
-status_t FwdLockEngine::onFinalizeDecryptUnit(int uniqueId,
- DecryptHandle* decryptHandle,
- int decryptUnitId) {
- ALOGE("FwdLockEngine::onFinalizeDecryptUnit is not supported for this DRM scheme");
- return DRM_ERROR_UNKNOWN;
-}
-
-ssize_t FwdLockEngine::onRead(int uniqueId,
- DecryptHandle* decryptHandle,
- void* buffer,
- int numBytes) {
- ssize_t size = -1;
-
- if (NULL != decryptHandle &&
- decodeSessionMap.isCreated(decryptHandle->decryptId) &&
- NULL != buffer &&
- numBytes > -1) {
- DecodeSession* session = decodeSessionMap.getValue(decryptHandle->decryptId);
- if (NULL != session && session->fileDesc > -1) {
- size = FwdLockFile_read(session->fileDesc, buffer, numBytes);
-
- if (0 > size) {
- session->offset = ((off_t)-1);
- } else {
- session->offset += size;
- }
- }
- }
-
- return size;
-}
-
-#ifdef USE_64BIT_DRM_API
-off64_t FwdLockEngine::onLseek(int uniqueId, DecryptHandle* decryptHandle,
- off64_t offset, int whence) {
-#else
-off_t FwdLockEngine::onLseek(int uniqueId, DecryptHandle* decryptHandle,
- off_t offset, int whence) {
-#endif
- off_t offval = -1;
-
- if (NULL != decryptHandle && decodeSessionMap.isCreated(decryptHandle->decryptId)) {
- DecodeSession* session = decodeSessionMap.getValue(decryptHandle->decryptId);
- if (NULL != session && session->fileDesc > -1) {
- offval = FwdLockFile_lseek(session->fileDesc, offset, whence);
- session->offset = offval;
- }
- }
-
- return offval;
-}
-
-#ifdef USE_64BIT_DRM_API
-ssize_t FwdLockEngine::onPread(int uniqueId,
- DecryptHandle* decryptHandle,
- void* buffer,
- ssize_t numBytes,
- off64_t offset) {
-#else
-ssize_t FwdLockEngine::onPread(int uniqueId,
- DecryptHandle* decryptHandle,
- void* buffer,
- ssize_t numBytes,
- off_t offset) {
-#endif
- ssize_t bytesRead = -1;
-
- DecodeSession* decoderSession = NULL;
-
- if ((NULL != decryptHandle) &&
- (NULL != (decoderSession = decodeSessionMap.getValue(decryptHandle->decryptId))) &&
- (NULL != buffer) &&
- (numBytes > -1) &&
- (offset > -1)) {
- if (offset != decoderSession->offset) {
- decoderSession->offset = onLseek(uniqueId, decryptHandle, offset, SEEK_SET);
- }
-
- if (((off_t)-1) != decoderSession->offset) {
- bytesRead = onRead(uniqueId, decryptHandle, buffer, numBytes);
- if (bytesRead < 0) {
- ALOGE("FwdLockEngine::onPread error reading");
- }
- }
- } else {
- ALOGE("FwdLockEngine::onPread decryptId not found");
- }
-
- return bytesRead;
-}