IDrmManagerService.cpp revision cba7b32d8f2c47632313f54118ed3733b4b02cc8
1155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande/* 2155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * Copyright (C) 2010 The Android Open Source Project 3155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * 4155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * Licensed under the Apache License, Version 2.0 (the "License"); 5155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * you may not use this file except in compliance with the License. 6155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * You may obtain a copy of the License at 7155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * 8155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * http://www.apache.org/licenses/LICENSE-2.0 9155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * 10155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * Unless required by applicable law or agreed to in writing, software 11155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * distributed under the License is distributed on an "AS IS" BASIS, 12155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * See the License for the specific language governing permissions and 14155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande * limitations under the License. 15155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande */ 16155b9d09ef9b8ead3ca617afdd91e74070d3f0cbVinit Deshpande 17a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills//#define LOG_NDEBUG 0 18e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#define LOG_TAG "IDrmManagerService(Native)" 19ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande#include <utils/Log.h> 20e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 21e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <stdint.h> 22e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <sys/types.h> 23e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <binder/IPCThreadState.h> 24e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 25cbf5c1792df8509c1b0de0a1b73d1c004a83e4bfdcashman#include <drm/DrmInfo.h> 26e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <drm/DrmConstraints.h> 27e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <drm/DrmMetadata.h> 28e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <drm/DrmRights.h> 29e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#include <drm/DrmInfoStatus.h> 30bb6942c6b6d129fd8904e341c9ce4a4118ed3e0bVinit Deshpande#include <drm/DrmConvertedStatus.h> 319153bd67d51b305ffdd61355e0748e3c332c2cafRoshan Pius#include <drm/DrmInfoRequest.h> 32bb6942c6b6d129fd8904e341c9ce4a4118ed3e0bVinit Deshpande#include <drm/DrmSupportInfo.h> 33e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 34cbf5c1792df8509c1b0de0a1b73d1c004a83e4bfdcashman#include "IDrmManagerService.h" 35efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande 36e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde#define INVALID_BUFFER_LENGTH -1 37e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 38e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndeusing namespace android; 39e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 406c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silbersteinstatic void writeDecryptHandleToParcelData( 41fc42a2cd2d461dc39b6853c130bae7dc69ed68e3Vinit Deshpande const DecryptHandle* handle, Parcel* data) { 42297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data->writeInt32(handle->decryptId); 43d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande data->writeString8(handle->mimeType); 44e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data->writeInt32(handle->decryptApiType); 458adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data->writeInt32(handle->status); 46e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 47e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao int size = handle->copyControlVector.size(); 48fc42a2cd2d461dc39b6853c130bae7dc69ed68e3Vinit Deshpande data->writeInt32(size); 498a9a103245ecfaf2c596603ccef884b870509566Ningyuan Wang for (int i = 0; i < size; i++) { 50e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data->writeInt32(handle->copyControlVector.keyAt(i)); 51e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data->writeInt32(handle->copyControlVector.valueAt(i)); 52e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 539ec71f6499e0e3d6f52310a41ff4a59d2fa4f8b2Mitchell Wills 54ee0ab818341d44614ffe56ae73ecc08b974c2cbbRoshan Pius size = handle->extendedData.size(); 55e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao data->writeInt32(size); 56a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills for (int i = 0; i < size; i++) { 574fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao data->writeString8(handle->extendedData.keyAt(i)); 58a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills data->writeString8(handle->extendedData.valueAt(i)); 59a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills } 60a8367288377cbaed6371256ca837b7aa22280706Mitchell Wills 61da94688198c864bb29be2e9603ebbe9ae6492a87Tamas Berghammer if (NULL != handle->decryptInfo) { 628adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data->writeInt32(handle->decryptInfo->decryptBufferLength); 634fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao } else { 64fc42a2cd2d461dc39b6853c130bae7dc69ed68e3Vinit Deshpande data->writeInt32(INVALID_BUFFER_LENGTH); 65e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 66e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 67e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 68a049f83a308e7753b68c1a5036ab67d9806807ecRebecca Silbersteinstatic void readDecryptHandleFromParcelData( 69e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DecryptHandle* handle, const Parcel& data) { 70e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (0 == data.dataAvail()) { 716259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius return; 72e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 73e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 74e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde handle->decryptId = data.readInt32(); 75297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills handle->mimeType = data.readString8(); 7684e718d76c7412121b64ed9ac497c8071f0ef5e9Vinit Deshpande handle->decryptApiType = data.readInt32(); 77716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe handle->status = data.readInt32(); 7812836d34cc6c4497c1fa5adbb956684ecec7578eVinit Deshpande 79ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande int size = data.readInt32(); 80e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde for (int i = 0; i < size; i++) { 811e911c92133843fc0a50a1b1c6f654f62e7c98a8Randy Pan DrmCopyControl key = (DrmCopyControl)data.readInt32(); 82d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande int value = data.readInt32(); 834fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao handle->copyControlVector.add(key, value); 844fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao } 85d36b93b07ee7a3f6116cc7ae7a1a1e6b687a9d3cMitchell Wills 86d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande size = data.readInt32(); 87d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande for (int i = 0; i < size; i++) { 88d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande String8 key = data.readString8(); 89d36b93b07ee7a3f6116cc7ae7a1a1e6b687a9d3cMitchell Wills String8 value = data.readString8(); 90d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande handle->extendedData.add(key, value); 91d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande } 92d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande 93d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande handle->decryptInfo = NULL; 94d36b93b07ee7a3f6116cc7ae7a1a1e6b687a9d3cMitchell Wills const int bufferLen = data.readInt32(); 95d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande if (INVALID_BUFFER_LENGTH != bufferLen) { 96d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande handle->decryptInfo = new DecryptInfo(); 97d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande handle->decryptInfo->decryptBufferLength = bufferLen; 98d7cbebf7fa9081e294ecab38cfe82709f381e1c9Vinit Deshpande } 999ec71f6499e0e3d6f52310a41ff4a59d2fa4f8b2Mitchell Wills} 1009ec71f6499e0e3d6f52310a41ff4a59d2fa4f8b2Mitchell Wills 101e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndestatic void clearDecryptHandle(DecryptHandle* handle) { 102e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (handle == NULL) { 103dd490cf1df37b70a8625dc4ec8e712f740dd1e4aPierre Vandwalle return; 1044fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao } 105dd490cf1df37b70a8625dc4ec8e712f740dd1e4aPierre Vandwalle if (handle->decryptInfo) { 106dd490cf1df37b70a8625dc4ec8e712f740dd1e4aPierre Vandwalle delete handle->decryptInfo; 1074fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao handle->decryptInfo = NULL; 1084fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao } 109e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde handle->copyControlVector.clear(); 110e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde handle->extendedData.clear(); 111efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande} 112efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande 113e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Willsint BpDrmManagerService::addUniqueId(bool isNative) { 1147e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills ALOGV("add uniqueid"); 115efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande Parcel data, reply; 116bb6942c6b6d129fd8904e341c9ce4a4118ed3e0bVinit Deshpande data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 117efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande data.writeInt32(isNative); 118efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande remote()->transact(ADD_UNIQUEID, data, &reply); 119efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande return reply.readInt32(); 120efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande} 1214fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao 122efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpandevoid BpDrmManagerService::removeUniqueId(int uniqueId) { 123efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande ALOGV("remove uniqueid"); 124efa77c1826499b0a3e57998bd6b3073b107e45d7Vinit Deshpande Parcel data, reply; 125ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 126ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande data.writeInt32(uniqueId); 127ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande remote()->transact(REMOVE_UNIQUEID, data, &reply); 128ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande} 129ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande 13046d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpandevoid BpDrmManagerService::addClient(int uniqueId) { 13146d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande Parcel data, reply; 1324fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 133e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeInt32(uniqueId); 1344fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao remote()->transact(ADD_CLIENT, data, &reply); 1354fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao} 136e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 137e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndevoid BpDrmManagerService::removeClient(int uniqueId) { 138e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde Parcel data, reply; 139e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 1404fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao data.writeInt32(uniqueId); 141e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(REMOVE_CLIENT, data, &reply); 142297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills} 143a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius 144297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Willsstatus_t BpDrmManagerService::setDrmServiceListener( 1459e7f5e0a47a9a4aa519a50d9a0959547c1c604f1Mitchell Wills int uniqueId, const sp<IDrmServiceListener>& drmServiceListener) { 1469e7f5e0a47a9a4aa519a50d9a0959547c1c604f1Mitchell Wills ALOGV("setDrmServiceListener"); 147297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Parcel data, reply; 148297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 149297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 150e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeInt32(uniqueId); 151297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data.writeStrongBinder(drmServiceListener->asBinder()); 152e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao remote()->transact(SET_DRM_SERVICE_LISTENER, data, &reply); 153297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return reply.readInt32(); 154297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills} 155a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius 156a91494208927643d011b4fa62db2064d9e8228c1Roshan Piusstatus_t BpDrmManagerService::installDrmEngine(int uniqueId, const String8& drmEngineFile) { 157297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ALOGV("Install DRM Engine"); 158297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills Parcel data, reply; 159297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 1609e7f5e0a47a9a4aa519a50d9a0959547c1c604f1Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 161fc42a2cd2d461dc39b6853c130bae7dc69ed68e3Vinit Deshpande data.writeInt32(uniqueId); 162297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data.writeString8(drmEngineFile); 163297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 164a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius remote()->transact(INSTALL_DRM_ENGINE, data, &reply); 165297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return reply.readInt32(); 166297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills} 167e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 168297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell WillsDrmConstraints* BpDrmManagerService::getConstraints( 169297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills int uniqueId, const String8* path, const int action) { 170297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ALOGV("Get Constraints"); 171a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius Parcel data, reply; 172c9c91fd93350151a33d87fca768921520c256256Mitchell Wills 173c9c91fd93350151a33d87fca768921520c256256Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 174c9c91fd93350151a33d87fca768921520c256256Mitchell Wills data.writeInt32(uniqueId); 1759e7f5e0a47a9a4aa519a50d9a0959547c1c604f1Mitchell Wills data.writeString8(*path); 176a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius data.writeInt32(action); 17728c7065e2af36064a230d2647782c5cdadaff2d8Vinit Deshpande 178e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(GET_CONSTRAINTS_FROM_CONTENT, data, &reply); 179297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 180e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DrmConstraints* drmConstraints = NULL; 181e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (0 != reply.dataAvail()) { 18246d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande //Filling Drm Constraints 183ed3f1ddf197602340e675ae4357cd0fbb145f078Vinit Deshpande drmConstraints = new DrmConstraints(); 18446d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande 185716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe const int size = reply.readInt32(); 18646d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande for (int index = 0; index < size; ++index) { 18746d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande const String8 key(reply.readString8()); 18846d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande const int bufferSize = reply.readInt32(); 18946d6b0ac6d466002e868627488796ce3d6a154aaVinit Deshpande char* data = NULL; 190d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein if (0 < bufferSize) { 191d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein data = new char[bufferSize]; 192d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein reply.read(data, bufferSize); 193d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein } 19414aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann drmConstraints->put(&key, data); 1958adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 19614aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann } 19714aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann return drmConstraints; 198d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein} 199d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein 200d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca SilbersteinDrmMetadata* BpDrmManagerService::getMetadata(int uniqueId, const String8* path) { 201d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein ALOGV("Get Metadata"); 202a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius Parcel data, reply; 20314aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 20414aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann data.writeInt32(uniqueId); 2051581a6e6da810df4173dcbb62a1c51eb624ad427Mitchell Wills 206daac2ad767f6047409987bb22812ab5f295e54dfVinit Deshpande DrmMetadata* drmMetadata = NULL; 207e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeString8(*path); 208e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(GET_METADATA_FROM_CONTENT, data, &reply); 209e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 21094bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills if (0 != reply.dataAvail()) { 21194bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills //Filling Drm Metadata 21294bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills drmMetadata = new DrmMetadata(); 2138adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 2148adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const int size = reply.readInt32(); 215c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius for (int index = 0; index < size; ++index) { 216c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const String8 key(reply.readString8()); 217c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int bufferSize = reply.readInt32(); 218c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius char* data = NULL; 21994bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills if (0 < bufferSize) { 22094bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills data = new char[bufferSize]; 2218adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills reply.read(data, bufferSize); 2228adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 2231ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills drmMetadata->put(&key, data); 2241ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills } 2251ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills } 2261ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills return drmMetadata; 2271ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills} 2281ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills 2291ba04405f98489f0fbd66b6566c64324be11111aMitchell Willsbool BpDrmManagerService::canHandle(int uniqueId, const String8& path, const String8& mimeType) { 2301ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills ALOGV("Can Handle"); 2311ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills Parcel data, reply; 23294bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills 23394bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 2348adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 235e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 236e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeString8(path); 237e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeString8(mimeType); 238e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 239e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(CAN_HANDLE, data, &reply); 240e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 241e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return static_cast<bool>(reply.readInt32()); 242e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 243e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 244e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit DeshapndeDrmInfoStatus* BpDrmManagerService::processDrmInfo(int uniqueId, const DrmInfo* drmInfo) { 245578f7a33d0085559485bccfe7d1e26f813dc081dMitchell Wills ALOGV("Process DRM Info"); 246a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius Parcel data, reply; 247a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius 248a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 249a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius data.writeInt32(uniqueId); 250a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius 251a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius //Filling DRM info 252a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius data.writeInt32(drmInfo->getInfoType()); 253a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius const DrmBuffer dataBuffer = drmInfo->getData(); 254e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int dataBufferSize = dataBuffer.length; 25518786eca942042388748b0d98979f21c9dff4a89Mitchell Wills data.writeInt32(dataBufferSize); 25694bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills if (0 < dataBufferSize) { 25794bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills data.write(dataBuffer.data, dataBufferSize); 258297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 259297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills data.writeString8(drmInfo->getMimeType()); 2601ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills 2611ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills data.writeInt32(drmInfo->getCount()); 2627e3e85327ca82a83de84b4750e793f2e3d1b3bfcMitchell Wills DrmInfo::KeyIterator keyIt = drmInfo->keyIterator(); 263985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills 264297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills while (keyIt.hasNext()) { 265297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills const String8 key = keyIt.next(); 2668adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeString8(key); 2678adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const String8 value = drmInfo->get(key); 268c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius data.writeString8((value == String8("")) ? String8("NULL") : value); 269e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 270297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 2718adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(PROCESS_DRM_INFO, data, &reply); 272ee0ab818341d44614ffe56ae73ecc08b974c2cbbRoshan Pius 273ee0ab818341d44614ffe56ae73ecc08b974c2cbbRoshan Pius DrmInfoStatus* drmInfoStatus = NULL; 274e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao if (0 != reply.dataAvail()) { 275e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling DRM Info Status 27694bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills const int statusCode = reply.readInt32(); 277c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const int infoType = reply.readInt32(); 278c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const String8 mimeType = reply.readString8(); 279e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 28094bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills DrmBuffer* drmBuffer = NULL; 28194bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills if (0 != reply.dataAvail()) { 28294bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills const int bufferSize = reply.readInt32(); 283297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills char* data = NULL; 2848adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (0 < bufferSize) { 285c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne data = new char[bufferSize]; 286ee0ab818341d44614ffe56ae73ecc08b974c2cbbRoshan Pius reply.read(data, bufferSize); 2874fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao } 288e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao drmBuffer = new DrmBuffer(data, bufferSize); 289297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 290e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde drmInfoStatus = new DrmInfoStatus(statusCode, infoType, drmBuffer, mimeType); 291e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 29218786eca942042388748b0d98979f21c9dff4a89Mitchell Wills return drmInfoStatus; 2934fbaf3821bd5c3056c7c4cdd1aee3e17ac7046d0Sohani Rao} 2948adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 2958adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell WillsDrmInfo* BpDrmManagerService::acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) { 296c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius ALOGV("Acquire DRM Info"); 297e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde Parcel data, reply; 298e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 299e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 300e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeInt32(uniqueId); 301e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 302e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling DRM Info Request 303e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeInt32(drmInforequest->getInfoType()); 304716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe data.writeString8(drmInforequest->getMimeType()); 305e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 3068adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(drmInforequest->getCount()); 3078adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DrmInfoRequest::KeyIterator keyIt = drmInforequest->keyIterator(); 308c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 309e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde while (keyIt.hasNext()) { 3108adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const String8 key = keyIt.next(); 3118adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeString8(key); 312c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const String8 value = drmInforequest->get(key); 313e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeString8((value == String8("")) ? String8("NULL") : value); 314e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 315e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 316e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(ACQUIRE_DRM_INFO, data, &reply); 3178adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 3188adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DrmInfo* drmInfo = NULL; 319c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius if (0 != reply.dataAvail()) { 320e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling DRM Info 321e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int infoType = reply.readInt32(); 322e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao const int bufferSize = reply.readInt32(); 323e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao char* data = NULL; 324e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao 325e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao if (0 < bufferSize) { 326e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao data = new char[bufferSize]; 327e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao reply.read(data, bufferSize); 328e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao } 329e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao drmInfo = new DrmInfo(infoType, DrmBuffer(data, bufferSize), reply.readString8()); 330e7ebc3fba71f4f996794bc5fa939674f8b4b2c5aSohani Rao 33144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const int size = reply.readInt32(); 33244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills for (int index = 0; index < size; ++index) { 33344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 key(reply.readString8()); 33444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 value(reply.readString8()); 335d36b93b07ee7a3f6116cc7ae7a1a1e6b687a9d3cMitchell Wills drmInfo->put(key, (value == String8("NULL")) ? String8("") : value); 33644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills } 33744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills } 33848444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills return drmInfo; 33948444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills} 34048444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills 34144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Willsstatus_t BpDrmManagerService::saveRights( 34244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills int uniqueId, const DrmRights& drmRights, 34344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8& rightsPath, const String8& contentPath) { 34444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills ALOGV("Save Rights"); 34544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills Parcel data, reply; 34644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 34744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 34844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(uniqueId); 34944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 35044f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills //Filling Drm Rights 35144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const DrmBuffer dataBuffer = drmRights.getData(); 35244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(dataBuffer.length); 35344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.write(dataBuffer.data, dataBuffer.length); 35444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 35544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 mimeType = drmRights.getMimeType(); 356d36b93b07ee7a3f6116cc7ae7a1a1e6b687a9d3cMitchell Wills data.writeString8((mimeType == String8("")) ? String8("NULL") : mimeType); 35744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 35844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 accountId = drmRights.getAccountId(); 35944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeString8((accountId == String8("")) ? String8("NULL") : accountId); 36044f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 36144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 subscriptionId = drmRights.getSubscriptionId(); 36244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeString8((subscriptionId == String8("")) ? String8("NULL") : subscriptionId); 36344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 36444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeString8((rightsPath == String8("")) ? String8("NULL") : rightsPath); 36544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeString8((contentPath == String8("")) ? String8("NULL") : contentPath); 36644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 36744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills remote()->transact(SAVE_RIGHTS, data, &reply); 36844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills return reply.readInt32(); 36944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills} 37044f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 37144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell WillsString8 BpDrmManagerService::getOriginalMimeType(int uniqueId, const String8& path) { 37244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills ALOGV("Get Original MimeType"); 37344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills Parcel data, reply; 37444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 375d36b93b07ee7a3f6116cc7ae7a1a1e6b687a9d3cMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 376f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeInt32(uniqueId); 377f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeString8(path); 378f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 379f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius remote()->transact(GET_ORIGINAL_MIMETYPE, data, &reply); 380f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius return reply.readString8(); 381f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius} 38244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 38344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Willsint BpDrmManagerService::getDrmObjectType( 38444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills int uniqueId, const String8& path, const String8& mimeType) { 38544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills ALOGV("Get Drm object type"); 386f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius Parcel data, reply; 38744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 38844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 38944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(uniqueId); 390f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeString8(path); 391f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeString8(mimeType); 392f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 393f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius remote()->transact(GET_DRM_OBJECT_TYPE, data, &reply); 394f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 39544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills return reply.readInt32(); 39644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills} 39744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 398f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Piusint BpDrmManagerService::checkRightsStatus(int uniqueId, const String8& path, int action) { 399f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius ALOGV("checkRightsStatus"); 400f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius Parcel data, reply; 401f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 402f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 403f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeInt32(uniqueId); 404f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeString8(path); 40544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(action); 40644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 40744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills remote()->transact(CHECK_RIGHTS_STATUS, data, &reply); 40844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 409f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius return reply.readInt32(); 410f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius} 411f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 412f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Piusstatus_t BpDrmManagerService::consumeRights( 41344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) { 41444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills ALOGV("consumeRights"); 41544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills Parcel data, reply; 41644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 41744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 41844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(uniqueId); 41944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 42044f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills writeDecryptHandleToParcelData(decryptHandle, &data); 42144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 42244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(action); 42344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(static_cast< int>(reserve)); 42444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 42544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills remote()->transact(CONSUME_RIGHTS, data, &reply); 42644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills return reply.readInt32(); 42744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills} 42844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 42944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Willsstatus_t BpDrmManagerService::setPlaybackStatus( 43044f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) { 43144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills ALOGV("setPlaybackStatus"); 43244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills Parcel data, reply; 43344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 4348adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 4358adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 4368adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4378adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills writeDecryptHandleToParcelData(decryptHandle, &data); 4388adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4398adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(playbackStatus); 4408adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt64(position); 44123216ca333dc411e6ce0829f777ca29992388443Roshan Pius 44223216ca333dc411e6ce0829f777ca29992388443Roshan Pius remote()->transact(SET_PLAYBACK_STATUS, data, &reply); 44323216ca333dc411e6ce0829f777ca29992388443Roshan Pius return reply.readInt32(); 44423216ca333dc411e6ce0829f777ca29992388443Roshan Pius} 44523216ca333dc411e6ce0829f777ca29992388443Roshan Pius 44623216ca333dc411e6ce0829f777ca29992388443Roshan Piusbool BpDrmManagerService::validateAction( 44723216ca333dc411e6ce0829f777ca29992388443Roshan Pius int uniqueId, const String8& path, 44823216ca333dc411e6ce0829f777ca29992388443Roshan Pius int action, const ActionDescription& description) { 44923216ca333dc411e6ce0829f777ca29992388443Roshan Pius ALOGV("validateAction"); 4508adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 4518adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4528adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 4538adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 4548adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeString8(path); 4555751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.writeInt32(action); 45644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(description.outputType); 45744f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt32(description.configuration); 4588adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 45923216ca333dc411e6ce0829f777ca29992388443Roshan Pius remote()->transact(VALIDATE_ACTION, data, &reply); 46023216ca333dc411e6ce0829f777ca29992388443Roshan Pius 4616c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein return static_cast<bool>(reply.readInt32()); 4628adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills} 4638adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4648adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Willsstatus_t BpDrmManagerService::removeRights(int uniqueId, const String8& path) { 4658adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("removeRights"); 4668adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 4678adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4688adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 4698adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 4708adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeString8(path); 4718adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4728adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(REMOVE_RIGHTS, data, &reply); 4738adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return reply.readInt32(); 474e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 475e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 476e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndestatus_t BpDrmManagerService::removeAllRights(int uniqueId) { 477e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("removeAllRights"); 4788adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 4798adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 4808adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 4818adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 482e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 48363539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills remote()->transact(REMOVE_ALL_RIGHTS, data, &reply); 48463539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills return reply.readInt32(); 48563539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills} 48663539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 48763539f1283899fbbf83ab90757961b4be51d5034Mitchell Willsint BpDrmManagerService::openConvertSession(int uniqueId, const String8& mimeType) { 48863539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills ALOGV("openConvertSession"); 48963539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills Parcel data, reply; 49063539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 49163539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 49263539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills data.writeInt32(uniqueId); 49363539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills data.writeString8(mimeType); 49463539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 49563539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills remote()->transact(OPEN_CONVERT_SESSION, data, &reply); 49663539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills return reply.readInt32(); 49763539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills} 498b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande 499b7cc309f06da8a18224057c21ba086f8550367d6Vinit DeshpandeDrmConvertedStatus* BpDrmManagerService::convertData( 5008adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills int uniqueId, int convertId, const DrmBuffer* inputData) { 5018adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("convertData"); 5028adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 5038adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 504c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 5058adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 506c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills data.writeInt32(convertId); 5078adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(inputData->length); 5088adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.write(inputData->data, inputData->length); 5098adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5108adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(CONVERT_DATA, data, &reply); 5118adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5128adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DrmConvertedStatus* drmConvertedStatus = NULL; 513b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 514b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande if (0 != reply.dataAvail()) { 515b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande //Filling DRM Converted Status 516b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande const int statusCode = reply.readInt32(); 5178adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const off64_t offset = reply.readInt64(); 5188adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 519d4762401ec14be6bdd2d27aff2478ddbf8d6ce2aVinit Deshpande DrmBuffer* convertedData = NULL; 520d4762401ec14be6bdd2d27aff2478ddbf8d6ce2aVinit Deshpande if (0 != reply.dataAvail()) { 521e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int bufferSize = reply.readInt32(); 522e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde char* data = NULL; 523e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (0 < bufferSize) { 5248adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data = new char[bufferSize]; 5258adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills reply.read(data, bufferSize); 526e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 527e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde convertedData = new DrmBuffer(data, bufferSize); 528e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 529e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde drmConvertedStatus = new DrmConvertedStatus(statusCode, convertedData, offset); 530e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 5318adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return drmConvertedStatus; 5328adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills} 5338adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5348adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell WillsDrmConvertedStatus* BpDrmManagerService::closeConvertSession(int uniqueId, int convertId) { 5358adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("closeConvertSession"); 5368adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 5378adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5388adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 5398adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 5408adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(convertId); 5418adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5428adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(CLOSE_CONVERT_SESSION, data, &reply); 5438adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5448adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DrmConvertedStatus* drmConvertedStatus = NULL; 5458adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 546d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein if (0 != reply.dataAvail()) { 54723216ca333dc411e6ce0829f777ca29992388443Roshan Pius //Filling DRM Converted Status 54823216ca333dc411e6ce0829f777ca29992388443Roshan Pius const int statusCode = reply.readInt32(); 549d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein const off64_t offset = reply.readInt64(); 550d94a62ffdf0e7f282948109d05d96e682eb32eefRebecca Silberstein 551e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DrmBuffer* convertedData = NULL; 552e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (0 != reply.dataAvail()) { 553e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int bufferSize = reply.readInt32(); 55423216ca333dc411e6ce0829f777ca29992388443Roshan Pius char* data = NULL; 5558adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (0 < bufferSize) { 55623216ca333dc411e6ce0829f777ca29992388443Roshan Pius data = new char[bufferSize]; 55723216ca333dc411e6ce0829f777ca29992388443Roshan Pius reply.read(data, bufferSize); 55823216ca333dc411e6ce0829f777ca29992388443Roshan Pius } 55923216ca333dc411e6ce0829f777ca29992388443Roshan Pius convertedData = new DrmBuffer(data, bufferSize); 56023216ca333dc411e6ce0829f777ca29992388443Roshan Pius } 56123216ca333dc411e6ce0829f777ca29992388443Roshan Pius drmConvertedStatus = new DrmConvertedStatus(statusCode, convertedData, offset); 56223216ca333dc411e6ce0829f777ca29992388443Roshan Pius } 56323216ca333dc411e6ce0829f777ca29992388443Roshan Pius return drmConvertedStatus; 56423216ca333dc411e6ce0829f777ca29992388443Roshan Pius} 56523216ca333dc411e6ce0829f777ca29992388443Roshan Pius 56623216ca333dc411e6ce0829f777ca29992388443Roshan Piusstatus_t BpDrmManagerService::getAllSupportInfo( 56723216ca333dc411e6ce0829f777ca29992388443Roshan Pius int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) { 56823216ca333dc411e6ce0829f777ca29992388443Roshan Pius ALOGV("Get All Support Info"); 56923216ca333dc411e6ce0829f777ca29992388443Roshan Pius Parcel data, reply; 57023216ca333dc411e6ce0829f777ca29992388443Roshan Pius 5718adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 5728adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 5738adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5748adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(GET_ALL_SUPPORT_INFO, data, &reply); 5758adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5768adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills //Filling DRM Support Info 5778adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const int arraySize = reply.readInt32(); 5788adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (0 < arraySize) { 5798adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills *drmSupportInfoArray = new DrmSupportInfo[arraySize]; 5808adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5818adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills for (int index = 0; index < arraySize; ++index) { 5826c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein DrmSupportInfo drmSupportInfo; 58323216ca333dc411e6ce0829f777ca29992388443Roshan Pius 5846c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein const int fileSuffixVectorSize = reply.readInt32(); 585c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < fileSuffixVectorSize; ++i) { 586c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne drmSupportInfo.addFileSuffix(reply.readString8()); 587c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 5888adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 5898adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const int mimeTypeVectorSize = reply.readInt32(); 590e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde for (int i = 0; i < mimeTypeVectorSize; ++i) { 591e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde drmSupportInfo.addMimeType(reply.readString8()); 592e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 593e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 594e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde drmSupportInfo.setDescription(reply.readString8()); 595e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde (*drmSupportInfoArray)[index] = drmSupportInfo; 596e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 5978adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 598c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne *length = arraySize; 59956820e92fd4b1a0cee83f552905fc76fc8290146Mitchell Wills return reply.readInt32(); 6000ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills} 601720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills 60256820e92fd4b1a0cee83f552905fc76fc8290146Mitchell WillsDecryptHandle* BpDrmManagerService::openDecryptSession( 603720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills int uniqueId, int fd, off64_t offset, off64_t length, const char* mime) { 604720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills ALOGV("Entering BpDrmManagerService::openDecryptSession"); 605720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills Parcel data, reply; 606720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills 6070ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 6080ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills data.writeInt32(uniqueId); 6090ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills data.writeFileDescriptor(fd); 6100ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills data.writeInt64(offset); 6115751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.writeInt64(length); 6125751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills String8 mimeType; 6135751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills if (mime) { 6148adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills mimeType = mime; 6155751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills } 6165751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.writeString8(mimeType); 6175751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 6188adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(OPEN_DECRYPT_SESSION, data, &reply); 6198adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 6208adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DecryptHandle* handle = NULL; 6215751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills if (0 != reply.dataAvail()) { 6225751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills handle = new DecryptHandle(); 6235751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills readDecryptHandleFromParcelData(handle, reply); 6245751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills } 6255751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills return handle; 6265751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills} 6275751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 6285751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell WillsDecryptHandle* BpDrmManagerService::openDecryptSession( 6298adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills int uniqueId, const char* uri, const char* mime) { 6308adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 6318adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("Entering BpDrmManagerService::openDecryptSession: mime=%s", mime? mime: "NULL"); 63256820e92fd4b1a0cee83f552905fc76fc8290146Mitchell Wills Parcel data, reply; 6338adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 634c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 635c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne data.writeInt32(uniqueId); 6368adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeString8(String8(uri)); 6378adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills String8 mimeType; 6388adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (mime) { 6398adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills mimeType = mime; 6408adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 641e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde data.writeString8(mimeType); 642e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 643e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(OPEN_DECRYPT_SESSION_FROM_URI, data, &reply); 6448adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 6458adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DecryptHandle* handle = NULL; 6468adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (0 != reply.dataAvail()) { 6478adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills handle = new DecryptHandle(); 6488adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills readDecryptHandleFromParcelData(handle, reply); 6498adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } else { 6508adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("no decryptHandle is generated in service side"); 651e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 652e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return handle; 653e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 654e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 6558adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell WillsDecryptHandle* BpDrmManagerService::openDecryptSession( 6568adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills int uniqueId, const DrmBuffer& buf, const String8& mimeType) { 6578adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("Entering BpDrmManagerService::openDecryptSession"); 6588adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 6598adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 66048444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 66148444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills data.writeInt32(uniqueId); 66248444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills if (buf.data != NULL && buf.length > 0) { 66348444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills data.writeInt32(buf.length); 66448444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills data.write(buf.data, buf.length); 66548444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills } else { 66648444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills data.writeInt32(0); 66748444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills } 66848444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills data.writeString8(mimeType); 66948444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills 67048444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills remote()->transact(OPEN_DECRYPT_SESSION_FOR_STREAMING, data, &reply); 67148444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills 6728adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DecryptHandle* handle = NULL; 6738adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (0 != reply.dataAvail()) { 6745751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills handle = new DecryptHandle(); 67548444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills readDecryptHandleFromParcelData(handle, reply); 67648444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills } else { 67748444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills ALOGV("no decryptHandle is generated in service side"); 67848444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills } 67948444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills return handle; 68048444cb4214a48a3a0bf4bbb93945c2aa68c9980Mitchell Wills} 6818adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 682c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhnestatus_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) { 683c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne ALOGV("closeDecryptSession"); 684c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne Parcel data, reply; 6858adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 6868adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 6878adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 6888adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 689e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde writeDecryptHandleToParcelData(decryptHandle, &data); 690e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 691e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde remote()->transact(CLOSE_DECRYPT_SESSION, data, &reply); 6928adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 693c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return reply.readInt32(); 694c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne} 695c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 6968adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Willsstatus_t BpDrmManagerService::initializeDecryptUnit( 6978adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills int uniqueId, DecryptHandle* decryptHandle, 6988adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills int decryptUnitId, const DrmBuffer* headerInfo) { 6998adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("initializeDecryptUnit"); 7008adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 701c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills 7028adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 7038adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 704c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 705c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne writeDecryptHandleToParcelData(decryptHandle, &data); 7066c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein 7078adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(decryptUnitId); 7088adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7098adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(headerInfo->length); 7108adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.write(headerInfo->data, headerInfo->length); 7118adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7128adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills remote()->transact(INITIALIZE_DECRYPT_UNIT, data, &reply); 7138adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return reply.readInt32(); 7148adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills} 7158adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7168adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Willsstatus_t BpDrmManagerService::decrypt( 7175751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 7180ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) { 7198adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("decrypt"); 7208adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel data, reply; 7218adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7228adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 7238adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 7248adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7258adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills writeDecryptHandleToParcelData(decryptHandle, &data); 7268adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7278adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(decryptUnitId); 7288adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32((*decBuffer)->length); 7295751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7305751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.writeInt32(encBuffer->length); 7315751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.write(encBuffer->data, encBuffer->length); 7325751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7335751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills if (NULL != IV) { 7345751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.writeInt32(IV->length); 7355751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills data.write(IV->data, IV->length); 7365751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills } 7375751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7385751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills remote()->transact(DECRYPT, data, &reply); 7395751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7405751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills const status_t status = reply.readInt32(); 7415751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills ALOGV("Return value of decrypt() is %d", status); 7425751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7435751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills const int size = reply.readInt32(); 7445751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills (*decBuffer)->length = size; 7455751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills reply.read((void *)(*decBuffer)->data, size); 7465751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7475751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills return status; 7485751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills} 7495751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7505751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Willsstatus_t BpDrmManagerService::finalizeDecryptUnit( 7515751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) { 7525751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills ALOGV("finalizeDecryptUnit"); 7535751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills Parcel data, reply; 7548a9a103245ecfaf2c596603ccef884b870509566Ningyuan Wang 7558a9a103245ecfaf2c596603ccef884b870509566Ningyuan Wang data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 756ed70365e5a3a6e2b06c2d4d06603f97596f1124bMitchell Wills data.writeInt32(uniqueId); 757ed70365e5a3a6e2b06c2d4d06603f97596f1124bMitchell Wills 7586259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius writeDecryptHandleToParcelData(decryptHandle, &data); 7596259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius 7606259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius data.writeInt32(decryptUnitId); 7615751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills 7626259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius remote()->transact(FINALIZE_DECRYPT_UNIT, data, &reply); 7636259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius return reply.readInt32(); 7646259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius} 7656259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius 7665751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Willsssize_t BpDrmManagerService::pread( 7675751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills int uniqueId, DecryptHandle* decryptHandle, void* buffer, 7685751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills ssize_t numBytes, off64_t offset) { 7695751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills ALOGV("read"); 7705751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills Parcel data, reply; 7718adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills int result; 7728adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7738adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); 7748adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills data.writeInt32(uniqueId); 7758adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 77644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills writeDecryptHandleToParcelData(decryptHandle, &data); 777f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 778f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius data.writeInt32(numBytes); 77944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills data.writeInt64(offset); 78044f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 78144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills remote()->transact(PREAD, data, &reply); 78244f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills result = reply.readInt32(); 78344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills if (0 < result) { 78444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills reply.read(buffer, result); 78544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills } 78644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills return result; 7878adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills} 7888adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7898adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell WillsIMPLEMENT_META_INTERFACE(DrmManagerService, "drm.IDrmManagerService"); 7908adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7918adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Willsstatus_t BnDrmManagerService::onTransact( 7928adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills uint32_t code, const Parcel& data, 7938adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills Parcel* reply, uint32_t flags) { 7948adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("Entering BnDrmManagerService::onTransact with code %d", code); 7958adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 7968adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills switch (code) { 7978adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills case ADD_UNIQUEID: 7988adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills { 7998adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("BnDrmManagerService::onTransact :ADD_UNIQUEID"); 8008adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 80144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills int uniqueId = addUniqueId(data.readInt32()); 8028adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills reply->writeInt32(uniqueId); 8038adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return DRM_NO_ERROR; 8046259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius } 80544f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 80644f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills case REMOVE_UNIQUEID: 8076259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius { 8086259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius ALOGV("BnDrmManagerService::onTransact :REMOVE_UNIQUEID"); 8096259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 8106259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius removeUniqueId(data.readInt32()); 8116259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius return DRM_NO_ERROR; 8128adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 8138adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 81444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills case ADD_CLIENT: 8158adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills { 8168adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("BnDrmManagerService::onTransact :ADD_CLIENT"); 8178adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 8188adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills addClient(data.readInt32()); 8196259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius return DRM_NO_ERROR; 8206259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius } 8218adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8226259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius case REMOVE_CLIENT: 8236259b630ddb59b642729a2d2113d81ed8e33a0e3Roshan Pius { 8248adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("BnDrmManagerService::onTransact :REMOVE_CLIENT"); 8258adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 8268adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills removeClient(data.readInt32()); 8278adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return DRM_NO_ERROR; 8288adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 8298adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8308adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills case SET_DRM_SERVICE_LISTENER: 8315751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills { 8325751e82f645ab5b4366c63e0fbc561534c1cb3b8Mitchell Wills ALOGV("BnDrmManagerService::onTransact :SET_DRM_SERVICE_LISTENER"); 8338adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 83444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 8358adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const int uniqueId = data.readInt32(); 8368adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const sp<IDrmServiceListener> drmServiceListener 8378adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills = interface_cast<IDrmServiceListener> (data.readStrongBinder()); 8388adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8398adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills status_t status = setDrmServiceListener(uniqueId, drmServiceListener); 8408adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 841c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne reply->writeInt32(status); 842c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return DRM_NO_ERROR; 8438adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 8448adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8458adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills case INSTALL_DRM_ENGINE: 8468adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills { 8478adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills ALOGV("BnDrmManagerService::onTransact :INSTALL_DRM_ENGINE"); 8488adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 84944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 8508adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills const int uniqueId = data.readInt32(); 85144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 engineFile = data.readString8(); 85256820e92fd4b1a0cee83f552905fc76fc8290146Mitchell Wills status_t status = installDrmEngine(uniqueId, engineFile); 85356820e92fd4b1a0cee83f552905fc76fc8290146Mitchell Wills 85444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills reply->writeInt32(status); 8558adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return DRM_NO_ERROR; 8568adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 8578adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8588adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills case GET_CONSTRAINTS_FROM_CONTENT: 8598adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills { 860c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills ALOGV("BnDrmManagerService::onTransact :GET_CONSTRAINTS_FROM_CONTENT"); 86144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 8624e54617758f86acef751bc8588257a58ed985b0fMitchell Wills 86344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const int uniqueId = data.readInt32(); 86444f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills const String8 path = data.readString8(); 8658adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8668adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills DrmConstraints* drmConstraints 8671ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills = getConstraints(uniqueId, &path, data.readInt32()); 8681ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills 8691ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills if (NULL != drmConstraints) { 8701ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills //Filling DRM Constraints contents 8718adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills reply->writeInt32(drmConstraints->getCount()); 8728adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 8736c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein DrmConstraints::KeyIterator keyIt = drmConstraints->keyIterator(); 8746c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein while (keyIt.hasNext()) { 8756c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein const String8 key = keyIt.next(); 8766c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein reply->writeString8(key); 8776c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein const char* value = drmConstraints->getAsByteArray(&key); 8786c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein int bufferSize = 0; 8796c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein if (NULL != value) { 8808adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills bufferSize = strlen(value); 881c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 882c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne reply->writeInt32(bufferSize + 1); 883c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne reply->write(value, bufferSize + 1); 884c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 885c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 886c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne delete drmConstraints; drmConstraints = NULL; 887c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return DRM_NO_ERROR; 8881ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills } 88944f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 8904e54617758f86acef751bc8588257a58ed985b0fMitchell Wills case GET_METADATA_FROM_CONTENT: 8911ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills { 8921ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills ALOGV("BnDrmManagerService::onTransact :GET_METADATA_FROM_CONTENT"); 8938adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 89459298c7cfffdf856e32879ec967fe27c7e977a49Mitchell Wills 89559298c7cfffdf856e32879ec967fe27c7e977a49Mitchell Wills const int uniqueId = data.readInt32(); 8961ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills const String8 path = data.readString8(); 8978adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 89844f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills DrmMetadata* drmMetadata = getMetadata(uniqueId, &path); 8998adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills if (NULL != drmMetadata) { 9001ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills //Filling DRM Metadata contents 9011ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills reply->writeInt32(drmMetadata->getCount()); 9021ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills 9031ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills DrmMetadata::KeyIterator keyIt = drmMetadata->keyIterator(); 9041ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills while (keyIt.hasNext()) { 9051ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills const String8 key = keyIt.next(); 9061ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills reply->writeString8(key); 9071ba04405f98489f0fbd66b6566c64324be11111aMitchell Wills const char* value = drmMetadata->getAsByteArray(&key); 9086c11cd5d6ff04afdf1bbbc99a850025d46c7bdc9Rebecca Silberstein int bufferSize = 0; 90923216ca333dc411e6ce0829f777ca29992388443Roshan Pius if (NULL != value) { 91023216ca333dc411e6ce0829f777ca29992388443Roshan Pius bufferSize = strlen(value); 91123216ca333dc411e6ce0829f777ca29992388443Roshan Pius reply->writeInt32(bufferSize + 1); 91223216ca333dc411e6ce0829f777ca29992388443Roshan Pius reply->write(value, bufferSize + 1); 91323216ca333dc411e6ce0829f777ca29992388443Roshan Pius } else { 9148adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills reply->writeInt32(0); 915a049f83a308e7753b68c1a5036ab67d9806807ecRebecca Silberstein } 916a049f83a308e7753b68c1a5036ab67d9806807ecRebecca Silberstein } 91723216ca333dc411e6ce0829f777ca29992388443Roshan Pius } 918a049f83a308e7753b68c1a5036ab67d9806807ecRebecca Silberstein delete drmMetadata; drmMetadata = NULL; 9198adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return NO_ERROR; 9208adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills } 9218adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 922bb9016d1e5f7c2b27502e7d7db13b55460bca88bMichael Plass case CAN_HANDLE: 923e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 924e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("BnDrmManagerService::onTransact :CAN_HANDLE"); 925e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde CHECK_INTERFACE(IDrmManagerService, data, reply); 926b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 927e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 928f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius const String8 path = data.readString8(); 9291fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius const String8 mimeType = data.readString8(); 9308adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 931799f1c026941c9183657ffb99f0fb34ff643a0ddRoshan Pius bool result = canHandle(uniqueId, path, mimeType); 932e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 933e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->writeInt32(result); 934e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return DRM_NO_ERROR; 935e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 9368adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 937e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde case PROCESS_DRM_INFO: 938e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 939b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande ALOGV("BnDrmManagerService::onTransact :PROCESS_DRM_INFO"); 9408adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 941e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 942e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 943e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 944e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling DRM info 94519a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const int infoType = data.readInt32(); 946f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius const int bufferSize = data.readInt32(); 94780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius char* buffer = NULL; 94880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius if (0 < bufferSize) { 94919a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius buffer = (char *)data.readInplace(bufferSize); 950f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius } 95119a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const DrmBuffer drmBuffer(buffer, bufferSize); 95280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius DrmInfo* drmInfo = new DrmInfo(infoType, drmBuffer, data.readString8()); 95380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 954e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int size = data.readInt32(); 95563539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills for (int index = 0; index < size; ++index) { 95663539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills const String8 key(data.readString8()); 95763539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills const String8 value(data.readString8()); 95863539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills drmInfo->put(key, (value == String8("NULL")) ? String8("") : value); 95963539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills } 96063539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 96163539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills DrmInfoStatus* drmInfoStatus = processDrmInfo(uniqueId, drmInfo); 96263539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 96363539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills if (NULL != drmInfoStatus) { 96463539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills //Filling DRM Info Status contents 96563539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills reply->writeInt32(drmInfoStatus->statusCode); 96663539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills reply->writeInt32(drmInfoStatus->infoType); 96763539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills reply->writeString8(drmInfoStatus->mimeType); 96863539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills 96963539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills if (NULL != drmInfoStatus->drmBuffer) { 970b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande const DrmBuffer* drmBuffer = drmInfoStatus->drmBuffer; 971b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande const int bufferSize = drmBuffer->length; 972b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande reply->writeInt32(bufferSize); 973c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills if (0 < bufferSize) { 974297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->write(drmBuffer->data, bufferSize); 975c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills } 976e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde delete [] drmBuffer->data; 977e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde delete drmBuffer; drmBuffer = NULL; 978e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 979bb6942c6b6d129fd8904e341c9ce4a4118ed3e0bVinit Deshpande } 980297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills delete drmInfo; drmInfo = NULL; 98183a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande delete drmInfoStatus; drmInfoStatus = NULL; 982b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande return DRM_NO_ERROR; 983b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande } 984b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 985b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande case ACQUIRE_DRM_INFO: 986297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills { 987b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande ALOGV("BnDrmManagerService::onTransact :ACQUIRE_DRM_INFO"); 988b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande CHECK_INTERFACE(IDrmManagerService, data, reply); 989b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 990e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 991e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 992e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling DRM info Request 993716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe const int infoType = data.readInt32(); 99480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const String8 mimeType = data.readString8(); 995e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DrmInfoRequest* drmInfoRequest = new DrmInfoRequest(infoType, mimeType); 996a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius 997e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int size = data.readInt32(); 998e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde for (int index = 0; index < size; ++index) { 999e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const String8 key(data.readString8()); 1000e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const String8 value(data.readString8()); 10018adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills drmInfoRequest->put(key, (value == String8("NULL")) ? String8("") : value); 1002c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 10038adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 10049ec71f6499e0e3d6f52310a41ff4a59d2fa4f8b2Mitchell Wills DrmInfo* drmInfo = acquireDrmInfo(uniqueId, drmInfoRequest); 1005ee0ab818341d44614ffe56ae73ecc08b974c2cbbRoshan Pius 1006017307e0d7133f3b2523090136b919c6f494098eMitchell Wills if (NULL != drmInfo) { 10079ec71f6499e0e3d6f52310a41ff4a59d2fa4f8b2Mitchell Wills //Filling DRM Info 1008017307e0d7133f3b2523090136b919c6f494098eMitchell Wills const DrmBuffer drmBuffer = drmInfo->getData(); 1009985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills reply->writeInt32(drmInfo->getInfoType()); 1010017307e0d7133f3b2523090136b919c6f494098eMitchell Wills 101194bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills const int bufferSize = drmBuffer.length; 101294bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills reply->writeInt32(bufferSize); 1013297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (0 < bufferSize) { 1014297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->write(drmBuffer.data, bufferSize); 1015297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 1016e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->writeString8(drmInfo->getMimeType()); 10171b76ca405029249b41b38424a253a8c5fa72dab1Roshan Pius reply->writeInt32(drmInfo->getCount()); 10181b76ca405029249b41b38424a253a8c5fa72dab1Roshan Pius 10191b76ca405029249b41b38424a253a8c5fa72dab1Roshan Pius DrmInfo::KeyIterator keyIt = drmInfo->keyIterator(); 10201b76ca405029249b41b38424a253a8c5fa72dab1Roshan Pius while (keyIt.hasNext()) { 10211b76ca405029249b41b38424a253a8c5fa72dab1Roshan Pius const String8 key = keyIt.next(); 1022985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills reply->writeString8(key); 1023985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills const String8 value = drmInfo->get(key); 1024297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->writeString8((value == String8("")) ? String8("NULL") : value); 102594bd575cb4766ed0dfbaad0fc7719a9e9e85a260Mitchell Wills } 1026297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills delete [] drmBuffer.data; 1027297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 1028297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills delete drmInfoRequest; drmInfoRequest = NULL; 1029297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills delete drmInfo; drmInfo = NULL; 1030297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills return DRM_NO_ERROR; 1031297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 1032297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 1033e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde case SAVE_RIGHTS: 1034e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 1035e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("BnDrmManagerService::onTransact :SAVE_RIGHTS"); 103683a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande CHECK_INTERFACE(IDrmManagerService, data, reply); 103783a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande 103814aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann const int uniqueId = data.readInt32(); 1039daac2ad767f6047409987bb22812ab5f295e54dfVinit Deshpande 1040e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling DRM Rights 1041e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int bufferSize = data.readInt32(); 1042e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const DrmBuffer drmBuffer((char *)data.readInplace(bufferSize), bufferSize); 1043716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe 1044e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const String8 mimeType(data.readString8()); 1045e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const String8 accountId(data.readString8()); 1046f1daf9342b66bf134d13fa0a42e929a008f1ca62Vinit Deshapnde const String8 subscriptionId(data.readString8()); 1047716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe const String8 rightsPath(data.readString8()); 1048f1daf9342b66bf134d13fa0a42e929a008f1ca62Vinit Deshapnde const String8 contentPath(data.readString8()); 1049f1daf9342b66bf134d13fa0a42e929a008f1ca62Vinit Deshapnde 1050e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DrmRights drmRights(drmBuffer, 1051e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ((mimeType == String8("NULL")) ? String8("") : mimeType), 1052e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ((accountId == String8("NULL")) ? String8("") : accountId), 1053e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ((subscriptionId == String8("NULL")) ? String8("") : subscriptionId)); 1054e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1055e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const status_t status = saveRights(uniqueId, drmRights, 1056e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ((rightsPath == String8("NULL")) ? String8("") : rightsPath), 1057e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ((contentPath == String8("NULL")) ? String8("") : contentPath)); 1058e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1059e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->writeInt32(status); 1060e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return DRM_NO_ERROR; 1061e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 1062716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe 1063e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde case GET_ORIGINAL_MIMETYPE: 1064e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 1065e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("BnDrmManagerService::onTransact :GET_ORIGINAL_MIMETYPE"); 10661fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 106780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 106880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int uniqueId = data.readInt32(); 10691e806a7aac77f6f65ba299329e1fc452e0148b8dMitchell Wills const String8 path = data.readString8(); 10701fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius const String8 originalMimeType = getOriginalMimeType(uniqueId, path); 10711fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius 10721fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius reply->writeString8(originalMimeType); 1073e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return DRM_NO_ERROR; 1074e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 1075e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1076e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde case GET_DRM_OBJECT_TYPE: 1077297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills { 1078297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills ALOGV("BnDrmManagerService::onTransact :GET_DRM_OBJECT_TYPE"); 1079e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde CHECK_INTERFACE(IDrmManagerService, data, reply); 1080297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 10810ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills const int uniqueId = data.readInt32(); 1082c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const String8 path = data.readString8(); 10830ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills const String8 mimeType = data.readString8(); 1084720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills const int drmObjectType = getDrmObjectType(uniqueId, path, mimeType); 1085720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills 1086720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills reply->writeInt32(drmObjectType); 1087720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills return DRM_NO_ERROR; 1088720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills } 10890ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills 10900ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills case CHECK_RIGHTS_STATUS: 10910ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills { 10920ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills ALOGV("BnDrmManagerService::onTransact :CHECK_RIGHTS_STATUS"); 10930ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 109483a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande 109512836d34cc6c4497c1fa5adbb956684ecec7578eVinit Deshpande const int uniqueId = data.readInt32(); 109612836d34cc6c4497c1fa5adbb956684ecec7578eVinit Deshpande const String8 path = data.readString8(); 109712836d34cc6c4497c1fa5adbb956684ecec7578eVinit Deshpande const int action = data.readInt32(); 1098e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int result = checkRightsStatus(uniqueId, path, action); 10990ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills 1100e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->writeInt32(result); 11018adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills return DRM_NO_ERROR; 1102e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 110314aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann 1104297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills case CONSUME_RIGHTS: 110514aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann { 110614aadf3997f007f53f12e8bec3efaea1a66b44bdNavtej Singh Mann ALOGV("BnDrmManagerService::onTransact :CONSUME_RIGHTS"); 1107297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 1108297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 1109e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 1110297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 1111c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills DecryptHandle handle; 1112f1daf9342b66bf134d13fa0a42e929a008f1ca62Vinit Deshapnde readDecryptHandleFromParcelData(&handle, data); 1113297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills 1114297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills const int action = data.readInt32(); 1115297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills const bool reserve = static_cast<bool>(data.readInt32()); 111683a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande const status_t status 111763539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills = consumeRights(uniqueId, &handle, action, reserve); 11188adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills reply->writeInt32(status); 111980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 112080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius clearDecryptHandle(&handle); 112163539f1283899fbbf83ab90757961b4be51d5034Mitchell Wills return DRM_NO_ERROR; 1122e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 1123e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1124e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde case SET_PLAYBACK_STATUS: 1125e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 1126e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("BnDrmManagerService::onTransact :SET_PLAYBACK_STATUS"); 1127e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde CHECK_INTERFACE(IDrmManagerService, data, reply); 1128e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1129e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 1130b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 1131b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande DecryptHandle handle; 1132b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande readDecryptHandleFromParcelData(&handle, data); 1133716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe 1134b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande const int playbackStatus = data.readInt32(); 1135b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande const int64_t position = data.readInt64(); 1136b7cc309f06da8a18224057c21ba086f8550367d6Vinit Deshpande const status_t status 1137b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande = setPlaybackStatus(uniqueId, &handle, playbackStatus, position); 1138b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande reply->writeInt32(status); 1139b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 1140b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande clearDecryptHandle(&handle); 1141b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande return DRM_NO_ERROR; 1142b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande } 1143b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 1144b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande case VALIDATE_ACTION: 1145b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande { 1146b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande ALOGV("BnDrmManagerService::onTransact :VALIDATE_ACTION"); 1147b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande CHECK_INTERFACE(IDrmManagerService, data, reply); 1148b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 11491fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius const int uniqueId = data.readInt32(); 115080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const String8 path = data.readString8(); 11510ea5062316013cd4173faf16c2a0f3ecd1b9ed43Mitchell Wills const int action = data.readInt32(); 115280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int outputType = data.readInt32(); 115380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int configuration = data.readInt32(); 115480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius bool result = validateAction(uniqueId, path, action, 115580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius ActionDescription(outputType, configuration)); 115680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 115780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius reply->writeInt32(result); 115880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius return DRM_NO_ERROR; 115980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius } 116080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 116180640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius case REMOVE_RIGHTS: 116280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius { 116380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius ALOGV("BnDrmManagerService::onTransact :REMOVE_RIGHTS"); 116480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 116580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 116680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius int uniqueId = data.readInt32(); 116780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius String8 path = data.readString8(); 116880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const status_t status = removeRights(uniqueId, path); 116980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius reply->writeInt32(status); 117080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 117180640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius return DRM_NO_ERROR; 117280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius } 117380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 117480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius case REMOVE_ALL_RIGHTS: 117580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius { 117680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius ALOGV("BnDrmManagerService::onTransact :REMOVE_ALL_RIGHTS"); 117780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 117880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 117980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const status_t status = removeAllRights(data.readInt32()); 118080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius reply->writeInt32(status); 118180640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 118280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius return DRM_NO_ERROR; 118380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius } 118480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 118580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius case OPEN_CONVERT_SESSION: 118680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius { 118780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius ALOGV("BnDrmManagerService::onTransact :OPEN_CONVERT_SESSION"); 118880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 118980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 119080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int uniqueId = data.readInt32(); 119180640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const String8 mimeType = data.readString8(); 119280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int convertId = openConvertSession(uniqueId, mimeType); 119380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 119480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius reply->writeInt32(convertId); 119580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius return DRM_NO_ERROR; 119680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius } 119780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 119880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius case CONVERT_DATA: 119980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius { 120080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius ALOGV("BnDrmManagerService::onTransact :CONVERT_DATA"); 120144f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 1202f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 120380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int uniqueId = data.readInt32(); 120480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int convertId = data.readInt32(); 120580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 120680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius //Filling input data 1207f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius const int bufferSize = data.readInt32(); 120880640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius DrmBuffer* inputData = new DrmBuffer((char *)data.readInplace(bufferSize), bufferSize); 120980640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 121080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius DrmConvertedStatus* drmConvertedStatus = convertData(uniqueId, convertId, inputData); 121180640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 121280640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius if (NULL != drmConvertedStatus) { 121319a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius //Filling Drm Converted Ststus 12143040b86393a04bc939a5a94cda4169b0293dfac7Mitchell Wills reply->writeInt32(drmConvertedStatus->statusCode); 12153040b86393a04bc939a5a94cda4169b0293dfac7Mitchell Wills reply->writeInt64(drmConvertedStatus->offset); 12163040b86393a04bc939a5a94cda4169b0293dfac7Mitchell Wills 12173040b86393a04bc939a5a94cda4169b0293dfac7Mitchell Wills if (NULL != drmConvertedStatus->convertedData) { 121819a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const DrmBuffer* convertedData = drmConvertedStatus->convertedData; 1219f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius const int bufferSize = convertedData->length; 122019a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius reply->writeInt32(bufferSize); 1221985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills if (0 < bufferSize) { 1222985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills reply->write(convertedData->data, bufferSize); 122319a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 122419a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete [] convertedData->data; 122519a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete convertedData; convertedData = NULL; 122619a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 122719a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 122819a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete inputData; inputData = NULL; 122919a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete drmConvertedStatus; drmConvertedStatus = NULL; 123019a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius return DRM_NO_ERROR; 123119a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 123219a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius 123319a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius case CLOSE_CONVERT_SESSION: 123419a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius { 123519a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius ALOGV("BnDrmManagerService::onTransact :CLOSE_CONVERT_SESSION"); 12369e7f5e0a47a9a4aa519a50d9a0959547c1c604f1Mitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 123719a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius 123819a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const int uniqueId = data.readInt32(); 123919a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const int convertId = data.readInt32(); 124019a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius DrmConvertedStatus* drmConvertedStatus 124119a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius = closeConvertSession(uniqueId, convertId); 12429e7f5e0a47a9a4aa519a50d9a0959547c1c604f1Mitchell Wills 1243297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills if (NULL != drmConvertedStatus) { 124454e2c84547e22622ba4a08bddd1c632d1d937be3Mitchell Wills //Filling Drm Converted Ststus 1245297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->writeInt32(drmConvertedStatus->statusCode); 124619a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius reply->writeInt64(drmConvertedStatus->offset); 124719a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius 124819a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius if (NULL != drmConvertedStatus->convertedData) { 124919a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const DrmBuffer* convertedData = drmConvertedStatus->convertedData; 125019a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const int bufferSize = convertedData->length; 125119a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius reply->writeInt32(bufferSize); 125219a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius if (0 < bufferSize) { 125319a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius reply->write(convertedData->data, bufferSize); 125419a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 125519a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete [] convertedData->data; 125619a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete convertedData; convertedData = NULL; 125719a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 125819a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 125919a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius delete drmConvertedStatus; drmConvertedStatus = NULL; 126019a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius return DRM_NO_ERROR; 126119a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius } 126219a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius 126319a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius case GET_ALL_SUPPORT_INFO: 126419a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius { 126519a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius ALOGV("BnDrmManagerService::onTransact :GET_ALL_SUPPORT_INFO"); 126619a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 126719a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius 126819a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius const int uniqueId = data.readInt32(); 126919a7b07a44c1ce4cf2500d277ef31e3344868142Roshan Pius int length = 0; 127080640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius DrmSupportInfo* drmSupportInfoArray = NULL; 127180640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 1272f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius status_t status = getAllSupportInfo(uniqueId, &length, &drmSupportInfoArray); 127344f8fc30974fa61a5a64be81874f6002ca0368f3Mitchell Wills 127480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius reply->writeInt32(length); 127580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius for (int i = 0; i < length; ++i) { 127680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius DrmSupportInfo drmSupportInfo = drmSupportInfoArray[i]; 127780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 1278c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills reply->writeInt32(drmSupportInfo.getFileSuffixCount()); 1279f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius DrmSupportInfo::FileSuffixIterator fileSuffixIt 1280f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius = drmSupportInfo.getFileSuffixIterator(); 1281f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius while (fileSuffixIt.hasNext()) { 1282f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius reply->writeString8(fileSuffixIt.next()); 1283985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills } 1284c9e6069eb941d282af213dc20b171877db6b567bMitchell Wills 1285297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->writeInt32(drmSupportInfo.getMimeTypeCount()); 1286297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills DrmSupportInfo::MimeTypeIterator mimeTypeIt = drmSupportInfo.getMimeTypeIterator(); 1287297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills while (mimeTypeIt.hasNext()) { 1288297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->writeString8(mimeTypeIt.next()); 1289297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills } 1290297c3acabe7a85eb87240fe3ccf772e57ce6aef7Mitchell Wills reply->writeString8(drmSupportInfo.getDescription()); 1291f1daf9342b66bf134d13fa0a42e929a008f1ca62Vinit Deshapnde } 1292a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius delete [] drmSupportInfoArray; drmSupportInfoArray = NULL; 129380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius reply->writeInt32(status); 129480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius return DRM_NO_ERROR; 129580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius } 129680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 129780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius case OPEN_DECRYPT_SESSION: 1298909a6e58d5cb6222f329ac8b3f2083db2345eed7songjinshi { 1299909a6e58d5cb6222f329ac8b3f2083db2345eed7songjinshi ALOGV("BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION"); 1300909a6e58d5cb6222f329ac8b3f2083db2345eed7songjinshi CHECK_INTERFACE(IDrmManagerService, data, reply); 1301909a6e58d5cb6222f329ac8b3f2083db2345eed7songjinshi 1302c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const int uniqueId = data.readInt32(); 1303c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const int fd = data.readFileDescriptor(); 1304c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 1305c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const off64_t offset = data.readInt64(); 1306c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const off64_t length = data.readInt64(); 1307c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne const String8 mime = data.readString8(); 1308c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 1309c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne DecryptHandle* handle 1310c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne = openDecryptSession(uniqueId, fd, offset, length, mime.string()); 1311f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 1312f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius if (NULL != handle) { 1313f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius writeDecryptHandleToParcelData(handle, reply); 1314f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius clearDecryptHandle(handle); 131580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius delete handle; handle = NULL; 1316985df17909a5703a86f3e665abc9dd964d9623d9Mitchell Wills } 131780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius return DRM_NO_ERROR; 131859298c7cfffdf856e32879ec967fe27c7e977a49Mitchell Wills } 131959298c7cfffdf856e32879ec967fe27c7e977a49Mitchell Wills 1320c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius case OPEN_DECRYPT_SESSION_FROM_URI: 1321c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius { 1322c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius ALOGV("BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FROM_URI"); 132380640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 132480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius 132580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const int uniqueId = data.readInt32(); 132680640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const String8 uri = data.readString8(); 132780640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius const String8 mime = data.readString8(); 1328f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 1329f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius DecryptHandle* handle = openDecryptSession(uniqueId, uri.string(), mime.string()); 1330f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 1331a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius if (NULL != handle) { 13321fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius writeDecryptHandleToParcelData(handle, reply); 13331fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius 133480640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius clearDecryptHandle(handle); 133580640ff4d13e252f0a5637ec16ca2d626070e751Roshan Pius delete handle; handle = NULL; 1336e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } else { 1337e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("NULL decryptHandle is returned"); 1338c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1339c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius return DRM_NO_ERROR; 1340c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1341c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1342c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius case OPEN_DECRYPT_SESSION_FOR_STREAMING: 1343c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius { 1344c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius ALOGV("BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FOR_STREAMING"); 1345c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 1346c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1347c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int uniqueId = data.readInt32(); 1348c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int bufferSize = data.readInt32(); 1349c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DrmBuffer buf((bufferSize > 0) ? (char *)data.readInplace(bufferSize) : NULL, 1350c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius bufferSize); 135105d51a2d8eb67ea2eaf4cae43280d1cf9fe92645Ningyuan Wang const String8 mimeType(data.readString8()); 1352c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1353c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DecryptHandle* handle = openDecryptSession(uniqueId, buf, mimeType); 1354c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1355c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius if (handle != NULL) { 1356c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius writeDecryptHandleToParcelData(handle, reply); 1357c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius clearDecryptHandle(handle); 135805d51a2d8eb67ea2eaf4cae43280d1cf9fe92645Ningyuan Wang delete handle; 1359c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius handle = NULL; 1360c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } else { 1361c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius ALOGV("NULL decryptHandle is returned"); 1362c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1363c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius return DRM_NO_ERROR; 1364c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1365c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1366c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius case CLOSE_DECRYPT_SESSION: 1367e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 1368e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("BnDrmManagerService::onTransact :CLOSE_DECRYPT_SESSION"); 1369e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde CHECK_INTERFACE(IDrmManagerService, data, reply); 1370c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1371c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int uniqueId = data.readInt32(); 1372c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1373c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DecryptHandle* handle = new DecryptHandle(); 1374c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius readDecryptHandleFromParcelData(handle, data); 1375f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius 1376f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius const status_t status = closeDecryptSession(uniqueId, handle); 1377c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius reply->writeInt32(status); 1378c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius return DRM_NO_ERROR; 1379799f1c026941c9183657ffb99f0fb34ff643a0ddRoshan Pius } 1380c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1381e29b548574b1dac325038659834d0a8fd28da01fNingyuan Wang case INITIALIZE_DECRYPT_UNIT: 1382e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde { 1383e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde ALOGV("BnDrmManagerService::onTransact :INITIALIZE_DECRYPT_UNIT"); 13848adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills CHECK_INTERFACE(IDrmManagerService, data, reply); 1385e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1386e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 1387c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1388c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DecryptHandle handle; 1389c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius readDecryptHandleFromParcelData(&handle, data); 13908adb4e72f58e3e25918f33e0b2687e6acc14c47dMitchell Wills 1391e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int decryptUnitId = data.readInt32(); 1392e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1393e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde //Filling Header info 1394e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int bufferSize = data.readInt32(); 1395c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DrmBuffer* headerInfo = NULL; 1396f8f5cb07ca2ead74f7f8bb03621fe0157aeba373Roshan Pius headerInfo = new DrmBuffer((char *)data.readInplace(bufferSize), bufferSize); 1397c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1398d4762401ec14be6bdd2d27aff2478ddbf8d6ce2aVinit Deshpande const status_t status 1399d4762401ec14be6bdd2d27aff2478ddbf8d6ce2aVinit Deshpande = initializeDecryptUnit(uniqueId, &handle, decryptUnitId, headerInfo); 1400578f7a33d0085559485bccfe7d1e26f813dc081dMitchell Wills reply->writeInt32(status); 14019153bd67d51b305ffdd61355e0748e3c332c2cafRoshan Pius 14029153bd67d51b305ffdd61355e0748e3c332c2cafRoshan Pius clearDecryptHandle(&handle); 14039153bd67d51b305ffdd61355e0748e3c332c2cafRoshan Pius delete headerInfo; headerInfo = NULL; 14049153bd67d51b305ffdd61355e0748e3c332c2cafRoshan Pius return DRM_NO_ERROR; 14059153bd67d51b305ffdd61355e0748e3c332c2cafRoshan Pius } 1406063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius 1407063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius case DECRYPT: 1408063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius { 1409063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius ALOGV("BnDrmManagerService::onTransact :DECRYPT"); 1410063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 1411063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius 1412e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 1413e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1414e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DecryptHandle handle; 1415716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe readDecryptHandleFromParcelData(&handle, data); 1416e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1417a91494208927643d011b4fa62db2064d9e8228c1Roshan Pius const int decryptUnitId = data.readInt32(); 1418e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int decBufferSize = data.readInt32(); 1419e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1420e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int encBufferSize = data.readInt32(); 1421e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DrmBuffer* encBuffer 1422c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius = new DrmBuffer((char *)data.readInplace(encBufferSize), encBufferSize); 1423c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1424c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius char* buffer = NULL; 1425c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius buffer = new char[decBufferSize]; 1426c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DrmBuffer* decBuffer = new DrmBuffer(buffer, decBufferSize); 1427c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1428c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DrmBuffer* IV = NULL; 1429c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius if (0 != data.dataAvail()) { 1430c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int ivBufferlength = data.readInt32(); 1431c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius IV = new DrmBuffer((char *)data.readInplace(ivBufferlength), ivBufferlength); 1432c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1433c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1434c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const status_t status 1435c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius = decrypt(uniqueId, &handle, decryptUnitId, encBuffer, &decBuffer, IV); 1436063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius 1437e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->writeInt32(status); 1438e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1439e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int size = decBuffer->length; 1440e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->writeInt32(size); 1441e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde reply->write(decBuffer->data, size); 1442e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1443e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde clearDecryptHandle(&handle); 1444e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde delete encBuffer; encBuffer = NULL; 1445e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde delete decBuffer; decBuffer = NULL; 1446e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde delete [] buffer; buffer = NULL; 1447716921f71ceeda2dc00bdd997f54fe7010b3ed0axinhe delete IV; IV = NULL; 1448e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return DRM_NO_ERROR; 1449e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 1450e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 14511fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius case FINALIZE_DECRYPT_UNIT: 14521fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius { 14531fa40005d82db21b2cc1c7e06d249b09c674ab8bRoshan Pius ALOGV("BnDrmManagerService::onTransact :FINALIZE_DECRYPT_UNIT"); 1454e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde CHECK_INTERFACE(IDrmManagerService, data, reply); 1455e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1456e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const int uniqueId = data.readInt32(); 1457e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1458e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde DecryptHandle handle; 1459c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius readDecryptHandleFromParcelData(&handle, data); 1460c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1461c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const status_t status = finalizeDecryptUnit(uniqueId, &handle, data.readInt32()); 1462720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills reply->writeInt32(status); 1463720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills 1464720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills clearDecryptHandle(&handle); 1465720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills return DRM_NO_ERROR; 1466720aba804a5c7fa5e4cc92af60b129e3e0013666Mitchell Wills } 1467c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1468c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius case PREAD: 1469c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius { 1470c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius ALOGV("BnDrmManagerService::onTransact :READ"); 1471c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius CHECK_INTERFACE(IDrmManagerService, data, reply); 1472c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1473c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int uniqueId = data.readInt32(); 1474c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1475c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius DecryptHandle handle; 1476c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius readDecryptHandleFromParcelData(&handle, data); 1477c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1478c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius const int numBytes = data.readInt32(); 1479063cfc7e3eef78fcbda24a66f0c473828b39c854Roshan Pius char* buffer = new char[numBytes]; 1480e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1481e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde const off64_t offset = data.readInt64(); 1482e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1483c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius ssize_t result = pread(uniqueId, &handle, buffer, numBytes, offset); 1484c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius reply->writeInt32(result); 1485c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius if (0 < result) { 1486c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius reply->write(buffer, result); 1487c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1488c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 1489c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius clearDecryptHandle(&handle); 1490c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius delete [] buffer, buffer = NULL; 1491c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius return DRM_NO_ERROR; 1492c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius } 1493c343aec32e1d3fe320eb97c527b0bcfb2d334e45Roshan Pius 14940e4f6ab00e1f2bd64f17302dae279c77c4cf7d8eRoshan Pius default: 14950e4f6ab00e1f2bd64f17302dae279c77c4cf7d8eRoshan Pius return BBinder::onTransact(code, data, reply, flags); 14960e4f6ab00e1f2bd64f17302dae279c77c4cf7d8eRoshan Pius } 14970e4f6ab00e1f2bd64f17302dae279c77c4cf7d8eRoshan Pius} 14980e4f6ab00e1f2bd64f17302dae279c77c4cf7d8eRoshan Pius 14990e4f6ab00e1f2bd64f17302dae279c77c4cf7d8eRoshan Pius