1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #ifndef __DRM_CONSTRAINTS_H__ 18*ec779b8eSAndroid Build Coastguard Worker #define __DRM_CONSTRAINTS_H__ 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard Worker #include "drm_framework_common.h" 21*ec779b8eSAndroid Build Coastguard Worker 22*ec779b8eSAndroid Build Coastguard Worker namespace android { 23*ec779b8eSAndroid Build Coastguard Worker 24*ec779b8eSAndroid Build Coastguard Worker /** 25*ec779b8eSAndroid Build Coastguard Worker * This is an utility class which contains the constraints information. 26*ec779b8eSAndroid Build Coastguard Worker * 27*ec779b8eSAndroid Build Coastguard Worker * As a result of DrmManagerClient::getConstraints(const String8*, const int) 28*ec779b8eSAndroid Build Coastguard Worker * an instance of DrmConstraints would be returned. 29*ec779b8eSAndroid Build Coastguard Worker * 30*ec779b8eSAndroid Build Coastguard Worker */ 31*ec779b8eSAndroid Build Coastguard Worker class DrmConstraints { 32*ec779b8eSAndroid Build Coastguard Worker public: 33*ec779b8eSAndroid Build Coastguard Worker /** 34*ec779b8eSAndroid Build Coastguard Worker * The following variables are replica of android.drm.DrmStore.ConstraintsColumns 35*ec779b8eSAndroid Build Coastguard Worker * Any changes should also be incorporated with Java Layer as well 36*ec779b8eSAndroid Build Coastguard Worker */ 37*ec779b8eSAndroid Build Coastguard Worker /** 38*ec779b8eSAndroid Build Coastguard Worker * The max repeat count 39*ec779b8eSAndroid Build Coastguard Worker */ 40*ec779b8eSAndroid Build Coastguard Worker static const String8 MAX_REPEAT_COUNT; 41*ec779b8eSAndroid Build Coastguard Worker /** 42*ec779b8eSAndroid Build Coastguard Worker * The remaining repeat count 43*ec779b8eSAndroid Build Coastguard Worker */ 44*ec779b8eSAndroid Build Coastguard Worker static const String8 REMAINING_REPEAT_COUNT; 45*ec779b8eSAndroid Build Coastguard Worker 46*ec779b8eSAndroid Build Coastguard Worker /** 47*ec779b8eSAndroid Build Coastguard Worker * The time before which the protected file can not be played/viewed 48*ec779b8eSAndroid Build Coastguard Worker */ 49*ec779b8eSAndroid Build Coastguard Worker static const String8 LICENSE_START_TIME; 50*ec779b8eSAndroid Build Coastguard Worker 51*ec779b8eSAndroid Build Coastguard Worker /** 52*ec779b8eSAndroid Build Coastguard Worker * The time after which the protected file can not be played/viewed 53*ec779b8eSAndroid Build Coastguard Worker */ 54*ec779b8eSAndroid Build Coastguard Worker static const String8 LICENSE_EXPIRY_TIME; 55*ec779b8eSAndroid Build Coastguard Worker 56*ec779b8eSAndroid Build Coastguard Worker /** 57*ec779b8eSAndroid Build Coastguard Worker * The available time for license 58*ec779b8eSAndroid Build Coastguard Worker */ 59*ec779b8eSAndroid Build Coastguard Worker static const String8 LICENSE_AVAILABLE_TIME; 60*ec779b8eSAndroid Build Coastguard Worker 61*ec779b8eSAndroid Build Coastguard Worker /** 62*ec779b8eSAndroid Build Coastguard Worker * The data stream for extended metadata 63*ec779b8eSAndroid Build Coastguard Worker */ 64*ec779b8eSAndroid Build Coastguard Worker static const String8 EXTENDED_METADATA; 65*ec779b8eSAndroid Build Coastguard Worker 66*ec779b8eSAndroid Build Coastguard Worker public: 67*ec779b8eSAndroid Build Coastguard Worker /** 68*ec779b8eSAndroid Build Coastguard Worker * Iterator for key 69*ec779b8eSAndroid Build Coastguard Worker */ 70*ec779b8eSAndroid Build Coastguard Worker class KeyIterator { 71*ec779b8eSAndroid Build Coastguard Worker friend class DrmConstraints; 72*ec779b8eSAndroid Build Coastguard Worker private: KeyIterator(DrmConstraints * drmConstraints)73*ec779b8eSAndroid Build Coastguard Worker explicit KeyIterator(DrmConstraints* drmConstraints) 74*ec779b8eSAndroid Build Coastguard Worker : mDrmConstraints(drmConstraints), mIndex(0) {} 75*ec779b8eSAndroid Build Coastguard Worker 76*ec779b8eSAndroid Build Coastguard Worker public: 77*ec779b8eSAndroid Build Coastguard Worker KeyIterator(const KeyIterator& keyIterator); 78*ec779b8eSAndroid Build Coastguard Worker KeyIterator& operator=(const KeyIterator& keyIterator); ~KeyIterator()79*ec779b8eSAndroid Build Coastguard Worker virtual ~KeyIterator() {} 80*ec779b8eSAndroid Build Coastguard Worker 81*ec779b8eSAndroid Build Coastguard Worker public: 82*ec779b8eSAndroid Build Coastguard Worker bool hasNext(); 83*ec779b8eSAndroid Build Coastguard Worker const String8& next(); 84*ec779b8eSAndroid Build Coastguard Worker 85*ec779b8eSAndroid Build Coastguard Worker private: 86*ec779b8eSAndroid Build Coastguard Worker DrmConstraints* mDrmConstraints; 87*ec779b8eSAndroid Build Coastguard Worker unsigned int mIndex; 88*ec779b8eSAndroid Build Coastguard Worker }; 89*ec779b8eSAndroid Build Coastguard Worker 90*ec779b8eSAndroid Build Coastguard Worker /** 91*ec779b8eSAndroid Build Coastguard Worker * Iterator for constraints 92*ec779b8eSAndroid Build Coastguard Worker */ 93*ec779b8eSAndroid Build Coastguard Worker class Iterator { 94*ec779b8eSAndroid Build Coastguard Worker friend class DrmConstraints; 95*ec779b8eSAndroid Build Coastguard Worker private: Iterator(DrmConstraints * drmConstraints)96*ec779b8eSAndroid Build Coastguard Worker explicit Iterator(DrmConstraints* drmConstraints) 97*ec779b8eSAndroid Build Coastguard Worker : mDrmConstraints(drmConstraints), mIndex(0) {} 98*ec779b8eSAndroid Build Coastguard Worker 99*ec779b8eSAndroid Build Coastguard Worker public: 100*ec779b8eSAndroid Build Coastguard Worker Iterator(const Iterator& iterator); 101*ec779b8eSAndroid Build Coastguard Worker Iterator& operator=(const Iterator& iterator); ~Iterator()102*ec779b8eSAndroid Build Coastguard Worker virtual ~Iterator() {} 103*ec779b8eSAndroid Build Coastguard Worker 104*ec779b8eSAndroid Build Coastguard Worker public: 105*ec779b8eSAndroid Build Coastguard Worker bool hasNext(); 106*ec779b8eSAndroid Build Coastguard Worker String8 next(); 107*ec779b8eSAndroid Build Coastguard Worker 108*ec779b8eSAndroid Build Coastguard Worker private: 109*ec779b8eSAndroid Build Coastguard Worker DrmConstraints* mDrmConstraints; 110*ec779b8eSAndroid Build Coastguard Worker unsigned int mIndex; 111*ec779b8eSAndroid Build Coastguard Worker }; 112*ec779b8eSAndroid Build Coastguard Worker 113*ec779b8eSAndroid Build Coastguard Worker public: DrmConstraints()114*ec779b8eSAndroid Build Coastguard Worker DrmConstraints() {} ~DrmConstraints()115*ec779b8eSAndroid Build Coastguard Worker virtual ~DrmConstraints() { 116*ec779b8eSAndroid Build Coastguard Worker DrmConstraints::KeyIterator keyIt = this->keyIterator(); 117*ec779b8eSAndroid Build Coastguard Worker 118*ec779b8eSAndroid Build Coastguard Worker while (keyIt.hasNext()) { 119*ec779b8eSAndroid Build Coastguard Worker String8 key = keyIt.next(); 120*ec779b8eSAndroid Build Coastguard Worker const char* value = this->getAsByteArray(&key); 121*ec779b8eSAndroid Build Coastguard Worker if (NULL != value) { 122*ec779b8eSAndroid Build Coastguard Worker delete[] value; 123*ec779b8eSAndroid Build Coastguard Worker value = NULL; 124*ec779b8eSAndroid Build Coastguard Worker } 125*ec779b8eSAndroid Build Coastguard Worker } 126*ec779b8eSAndroid Build Coastguard Worker mConstraintMap.clear(); 127*ec779b8eSAndroid Build Coastguard Worker } 128*ec779b8eSAndroid Build Coastguard Worker public: 129*ec779b8eSAndroid Build Coastguard Worker /** 130*ec779b8eSAndroid Build Coastguard Worker * Returns the number of constraints contained in this instance 131*ec779b8eSAndroid Build Coastguard Worker * 132*ec779b8eSAndroid Build Coastguard Worker * @return Number of constraints 133*ec779b8eSAndroid Build Coastguard Worker */ 134*ec779b8eSAndroid Build Coastguard Worker int getCount(void) const; 135*ec779b8eSAndroid Build Coastguard Worker 136*ec779b8eSAndroid Build Coastguard Worker /** 137*ec779b8eSAndroid Build Coastguard Worker * Adds constraint information as <key, value> pair to this instance 138*ec779b8eSAndroid Build Coastguard Worker * 139*ec779b8eSAndroid Build Coastguard Worker * @param[in] key Key to add 140*ec779b8eSAndroid Build Coastguard Worker * @param[in] value Value to add 141*ec779b8eSAndroid Build Coastguard Worker * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 142*ec779b8eSAndroid Build Coastguard Worker */ 143*ec779b8eSAndroid Build Coastguard Worker status_t put(const String8* key, const char* value); 144*ec779b8eSAndroid Build Coastguard Worker 145*ec779b8eSAndroid Build Coastguard Worker /** 146*ec779b8eSAndroid Build Coastguard Worker * Retrieves the value of given key 147*ec779b8eSAndroid Build Coastguard Worker * 148*ec779b8eSAndroid Build Coastguard Worker * @param key Key whose value to be retrieved 149*ec779b8eSAndroid Build Coastguard Worker * @return The value 150*ec779b8eSAndroid Build Coastguard Worker */ 151*ec779b8eSAndroid Build Coastguard Worker String8 get(const String8& key) const; 152*ec779b8eSAndroid Build Coastguard Worker 153*ec779b8eSAndroid Build Coastguard Worker /** 154*ec779b8eSAndroid Build Coastguard Worker * Retrieves the value as byte array of given key 155*ec779b8eSAndroid Build Coastguard Worker * @param key Key whose value to be retrieved as byte array 156*ec779b8eSAndroid Build Coastguard Worker * @return The byte array value 157*ec779b8eSAndroid Build Coastguard Worker */ 158*ec779b8eSAndroid Build Coastguard Worker const char* getAsByteArray(const String8* key) const; 159*ec779b8eSAndroid Build Coastguard Worker 160*ec779b8eSAndroid Build Coastguard Worker /** 161*ec779b8eSAndroid Build Coastguard Worker * Returns KeyIterator object to walk through the keys associated with this instance 162*ec779b8eSAndroid Build Coastguard Worker * 163*ec779b8eSAndroid Build Coastguard Worker * @return KeyIterator object 164*ec779b8eSAndroid Build Coastguard Worker */ 165*ec779b8eSAndroid Build Coastguard Worker KeyIterator keyIterator(); 166*ec779b8eSAndroid Build Coastguard Worker 167*ec779b8eSAndroid Build Coastguard Worker /** 168*ec779b8eSAndroid Build Coastguard Worker * Returns Iterator object to walk through the values associated with this instance 169*ec779b8eSAndroid Build Coastguard Worker * 170*ec779b8eSAndroid Build Coastguard Worker * @return Iterator object 171*ec779b8eSAndroid Build Coastguard Worker */ 172*ec779b8eSAndroid Build Coastguard Worker Iterator iterator(); 173*ec779b8eSAndroid Build Coastguard Worker private: 174*ec779b8eSAndroid Build Coastguard Worker const char* getValue(const String8* key) const; 175*ec779b8eSAndroid Build Coastguard Worker private: 176*ec779b8eSAndroid Build Coastguard Worker typedef KeyedVector<String8, const char*> DrmConstraintsMap; 177*ec779b8eSAndroid Build Coastguard Worker DrmConstraintsMap mConstraintMap; 178*ec779b8eSAndroid Build Coastguard Worker }; 179*ec779b8eSAndroid Build Coastguard Worker 180*ec779b8eSAndroid Build Coastguard Worker }; 181*ec779b8eSAndroid Build Coastguard Worker 182*ec779b8eSAndroid Build Coastguard Worker #endif /* __DRM_CONSTRAINTS_H__ */ 183*ec779b8eSAndroid Build Coastguard Worker 184