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_INFO_H__ 18*ec779b8eSAndroid Build Coastguard Worker #define __DRM_INFO_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 in which necessary information required to transact 26*ec779b8eSAndroid Build Coastguard Worker * between device and online DRM server is described. DRM Framework achieves 27*ec779b8eSAndroid Build Coastguard Worker * server registration, license acquisition and any other server related transaction 28*ec779b8eSAndroid Build Coastguard Worker * by passing an instance of this class to DrmManagerClient::processDrmInfo(const DrmInfo*). 29*ec779b8eSAndroid Build Coastguard Worker * 30*ec779b8eSAndroid Build Coastguard Worker * The Caller can retrieve the DrmInfo instance by using 31*ec779b8eSAndroid Build Coastguard Worker * DrmManagerClient::acquireDrmInfo(const DrmInfoRequest*) by passing DrmInfoRequest instance. 32*ec779b8eSAndroid Build Coastguard Worker * 33*ec779b8eSAndroid Build Coastguard Worker */ 34*ec779b8eSAndroid Build Coastguard Worker class DrmInfo { 35*ec779b8eSAndroid Build Coastguard Worker public: 36*ec779b8eSAndroid Build Coastguard Worker /** 37*ec779b8eSAndroid Build Coastguard Worker * Constructor for DrmInfo 38*ec779b8eSAndroid Build Coastguard Worker * 39*ec779b8eSAndroid Build Coastguard Worker * @param[in] infoType Type of information 40*ec779b8eSAndroid Build Coastguard Worker * @param[in] drmBuffer Trigger data 41*ec779b8eSAndroid Build Coastguard Worker * @param[in] mimeType MIME type 42*ec779b8eSAndroid Build Coastguard Worker */ 43*ec779b8eSAndroid Build Coastguard Worker DrmInfo(int infoType, const DrmBuffer& drmBuffer, const String8& mimeType); 44*ec779b8eSAndroid Build Coastguard Worker 45*ec779b8eSAndroid Build Coastguard Worker /** 46*ec779b8eSAndroid Build Coastguard Worker * Destructor for DrmInfo 47*ec779b8eSAndroid Build Coastguard Worker */ ~DrmInfo()48*ec779b8eSAndroid Build Coastguard Worker virtual ~DrmInfo() {} 49*ec779b8eSAndroid Build Coastguard Worker 50*ec779b8eSAndroid Build Coastguard Worker public: 51*ec779b8eSAndroid Build Coastguard Worker /** 52*ec779b8eSAndroid Build Coastguard Worker * Iterator for key 53*ec779b8eSAndroid Build Coastguard Worker */ 54*ec779b8eSAndroid Build Coastguard Worker class KeyIterator { 55*ec779b8eSAndroid Build Coastguard Worker friend class DrmInfo; 56*ec779b8eSAndroid Build Coastguard Worker 57*ec779b8eSAndroid Build Coastguard Worker private: KeyIterator(const DrmInfo * drmInfo)58*ec779b8eSAndroid Build Coastguard Worker explicit KeyIterator(const DrmInfo* drmInfo) 59*ec779b8eSAndroid Build Coastguard Worker : mDrmInfo(const_cast <DrmInfo*> (drmInfo)), mIndex(0) {} 60*ec779b8eSAndroid Build Coastguard Worker 61*ec779b8eSAndroid Build Coastguard Worker public: 62*ec779b8eSAndroid Build Coastguard Worker KeyIterator(const KeyIterator& keyIterator); 63*ec779b8eSAndroid Build Coastguard Worker KeyIterator& operator=(const KeyIterator& keyIterator); ~KeyIterator()64*ec779b8eSAndroid Build Coastguard Worker virtual ~KeyIterator() {} 65*ec779b8eSAndroid Build Coastguard Worker 66*ec779b8eSAndroid Build Coastguard Worker public: 67*ec779b8eSAndroid Build Coastguard Worker bool hasNext(); 68*ec779b8eSAndroid Build Coastguard Worker const String8& next(); 69*ec779b8eSAndroid Build Coastguard Worker 70*ec779b8eSAndroid Build Coastguard Worker private: 71*ec779b8eSAndroid Build Coastguard Worker DrmInfo* mDrmInfo; 72*ec779b8eSAndroid Build Coastguard Worker unsigned int mIndex; 73*ec779b8eSAndroid Build Coastguard Worker }; 74*ec779b8eSAndroid Build Coastguard Worker 75*ec779b8eSAndroid Build Coastguard Worker /** 76*ec779b8eSAndroid Build Coastguard Worker * Iterator 77*ec779b8eSAndroid Build Coastguard Worker */ 78*ec779b8eSAndroid Build Coastguard Worker class Iterator { 79*ec779b8eSAndroid Build Coastguard Worker friend class DrmInfo; 80*ec779b8eSAndroid Build Coastguard Worker 81*ec779b8eSAndroid Build Coastguard Worker private: Iterator(const DrmInfo * drmInfo)82*ec779b8eSAndroid Build Coastguard Worker explicit Iterator(const DrmInfo* drmInfo) 83*ec779b8eSAndroid Build Coastguard Worker : mDrmInfo(const_cast <DrmInfo*> (drmInfo)), mIndex(0) {} 84*ec779b8eSAndroid Build Coastguard Worker 85*ec779b8eSAndroid Build Coastguard Worker public: 86*ec779b8eSAndroid Build Coastguard Worker Iterator(const Iterator& iterator); 87*ec779b8eSAndroid Build Coastguard Worker Iterator& operator=(const Iterator& iterator); ~Iterator()88*ec779b8eSAndroid Build Coastguard Worker virtual ~Iterator() {} 89*ec779b8eSAndroid Build Coastguard Worker 90*ec779b8eSAndroid Build Coastguard Worker public: 91*ec779b8eSAndroid Build Coastguard Worker bool hasNext(); 92*ec779b8eSAndroid Build Coastguard Worker String8& next(); 93*ec779b8eSAndroid Build Coastguard Worker 94*ec779b8eSAndroid Build Coastguard Worker private: 95*ec779b8eSAndroid Build Coastguard Worker DrmInfo* mDrmInfo; 96*ec779b8eSAndroid Build Coastguard Worker unsigned int mIndex; 97*ec779b8eSAndroid Build Coastguard Worker }; 98*ec779b8eSAndroid Build Coastguard Worker 99*ec779b8eSAndroid Build Coastguard Worker public: 100*ec779b8eSAndroid Build Coastguard Worker /** 101*ec779b8eSAndroid Build Coastguard Worker * Returns information type associated with this instance 102*ec779b8eSAndroid Build Coastguard Worker * 103*ec779b8eSAndroid Build Coastguard Worker * @return Information type 104*ec779b8eSAndroid Build Coastguard Worker */ 105*ec779b8eSAndroid Build Coastguard Worker int getInfoType(void) const; 106*ec779b8eSAndroid Build Coastguard Worker 107*ec779b8eSAndroid Build Coastguard Worker /** 108*ec779b8eSAndroid Build Coastguard Worker * Returns MIME type associated with this instance 109*ec779b8eSAndroid Build Coastguard Worker * 110*ec779b8eSAndroid Build Coastguard Worker * @return MIME type 111*ec779b8eSAndroid Build Coastguard Worker */ 112*ec779b8eSAndroid Build Coastguard Worker String8 getMimeType(void) const; 113*ec779b8eSAndroid Build Coastguard Worker 114*ec779b8eSAndroid Build Coastguard Worker /** 115*ec779b8eSAndroid Build Coastguard Worker * Returns the trigger data associated with this instance 116*ec779b8eSAndroid Build Coastguard Worker * 117*ec779b8eSAndroid Build Coastguard Worker * @return Trigger data 118*ec779b8eSAndroid Build Coastguard Worker */ 119*ec779b8eSAndroid Build Coastguard Worker const DrmBuffer& getData(void) const; 120*ec779b8eSAndroid Build Coastguard Worker 121*ec779b8eSAndroid Build Coastguard Worker /** 122*ec779b8eSAndroid Build Coastguard Worker * Returns the number of attributes contained in this instance 123*ec779b8eSAndroid Build Coastguard Worker * 124*ec779b8eSAndroid Build Coastguard Worker * @return Number of attributes 125*ec779b8eSAndroid Build Coastguard Worker */ 126*ec779b8eSAndroid Build Coastguard Worker int getCount(void) const; 127*ec779b8eSAndroid Build Coastguard Worker 128*ec779b8eSAndroid Build Coastguard Worker /** 129*ec779b8eSAndroid Build Coastguard Worker * Adds optional information as <key, value> pair to this instance 130*ec779b8eSAndroid Build Coastguard Worker * 131*ec779b8eSAndroid Build Coastguard Worker * @param[in] key Key to add 132*ec779b8eSAndroid Build Coastguard Worker * @param[in] value Value to add 133*ec779b8eSAndroid Build Coastguard Worker * @return Returns the error code 134*ec779b8eSAndroid Build Coastguard Worker */ 135*ec779b8eSAndroid Build Coastguard Worker status_t put(const String8& key, const String8& value); 136*ec779b8eSAndroid Build Coastguard Worker 137*ec779b8eSAndroid Build Coastguard Worker /** 138*ec779b8eSAndroid Build Coastguard Worker * Retrieves the value of given key 139*ec779b8eSAndroid Build Coastguard Worker * 140*ec779b8eSAndroid Build Coastguard Worker * @param key Key whose value to be retrieved 141*ec779b8eSAndroid Build Coastguard Worker * @return The value 142*ec779b8eSAndroid Build Coastguard Worker */ 143*ec779b8eSAndroid Build Coastguard Worker String8 get(const String8& key) const; 144*ec779b8eSAndroid Build Coastguard Worker 145*ec779b8eSAndroid Build Coastguard Worker /** 146*ec779b8eSAndroid Build Coastguard Worker * Returns KeyIterator object to walk through the keys associated with this instance 147*ec779b8eSAndroid Build Coastguard Worker * 148*ec779b8eSAndroid Build Coastguard Worker * @return KeyIterator object 149*ec779b8eSAndroid Build Coastguard Worker */ 150*ec779b8eSAndroid Build Coastguard Worker KeyIterator keyIterator() const; 151*ec779b8eSAndroid Build Coastguard Worker 152*ec779b8eSAndroid Build Coastguard Worker /** 153*ec779b8eSAndroid Build Coastguard Worker * Returns Iterator object to walk through the values associated with this instance 154*ec779b8eSAndroid Build Coastguard Worker * 155*ec779b8eSAndroid Build Coastguard Worker * @return Iterator object 156*ec779b8eSAndroid Build Coastguard Worker */ 157*ec779b8eSAndroid Build Coastguard Worker Iterator iterator() const; 158*ec779b8eSAndroid Build Coastguard Worker 159*ec779b8eSAndroid Build Coastguard Worker /** 160*ec779b8eSAndroid Build Coastguard Worker * Returns index of the given key 161*ec779b8eSAndroid Build Coastguard Worker * 162*ec779b8eSAndroid Build Coastguard Worker * @return index 163*ec779b8eSAndroid Build Coastguard Worker */ 164*ec779b8eSAndroid Build Coastguard Worker int indexOfKey(const String8& key) const; 165*ec779b8eSAndroid Build Coastguard Worker 166*ec779b8eSAndroid Build Coastguard Worker protected: 167*ec779b8eSAndroid Build Coastguard Worker int mInfoType; 168*ec779b8eSAndroid Build Coastguard Worker DrmBuffer mData; 169*ec779b8eSAndroid Build Coastguard Worker String8 mMimeType; 170*ec779b8eSAndroid Build Coastguard Worker KeyedVector<String8, String8> mAttributes; 171*ec779b8eSAndroid Build Coastguard Worker }; 172*ec779b8eSAndroid Build Coastguard Worker 173*ec779b8eSAndroid Build Coastguard Worker }; 174*ec779b8eSAndroid Build Coastguard Worker 175*ec779b8eSAndroid Build Coastguard Worker #endif /* __DRM_INFO_H__ */ 176*ec779b8eSAndroid Build Coastguard Worker 177