1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/* 2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copyright (C) 2010 The Android Open Source Project 3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * you may not use this file except in compliance with the License. 6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * You may obtain a copy of the License at 7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Unless required by applicable law or agreed to in writing, software 11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * See the License for the specific language governing permissions and 14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * limitations under the License. 15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 17d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#ifndef __DRM_INFO_H__ 18d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#define __DRM_INFO_H__ 19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#include "drm_framework_common.h" 21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshinamespace android { 23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This is an utility class in which necessary information required to transact 26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * between device and online DRM server is described. DRM Framework achieves 27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * server registration, license acquisition and any other server related transaction 28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * by passing an instance of this class to DrmManagerClient::processDrmInfo(const DrmInfo*). 29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * The Caller can retrieve the DrmInfo instance by using 31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DrmManagerClient::acquireDrmInfo(const DrmInfoRequest*) by passing DrmInfoRequest instance. 32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmInfo { 35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Constructor for DrmInfo 38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] infoType Type of information 40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] drmBuffer Trigger data 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] mimeType MIME type 42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmInfo(int infoType, const DrmBuffer& drmBuffer, const String8& mimeType); 44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Destructor for DrmInfo 47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~DrmInfo() {} 49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Iterator for key 53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi class KeyIterator { 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi friend class DrmInfo; 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi KeyIterator(const DrmInfo* drmInfo) 59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi : mDrmInfo(const_cast <DrmInfo*> (drmInfo)), mIndex(0) {} 60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi KeyIterator(const KeyIterator& keyIterator); 63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi KeyIterator& operator=(const KeyIterator& keyIterator); 64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~KeyIterator() {} 65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool hasNext(); 68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi const String8& next(); 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmInfo* mDrmInfo; 72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi unsigned int mIndex; 73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi }; 74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Iterator 77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi class Iterator { 79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi friend class DrmInfo; 80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Iterator(const DrmInfo* drmInfo) 83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi : mDrmInfo(const_cast <DrmInfo*> (drmInfo)), mIndex(0) {} 84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Iterator(const Iterator& iterator); 87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Iterator& operator=(const Iterator& iterator); 88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~Iterator() {} 89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool hasNext(); 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8& next(); 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmInfo* mDrmInfo; 96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi unsigned int mIndex; 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi }; 98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns information type associated with this instance 102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Information type 104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int getInfoType(void) const; 106d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns MIME type associated with this instance 109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return MIME type 111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8 getMimeType(void) const; 113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns the trigger data associated with this instance 116d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Trigger data 118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi const DrmBuffer& getData(void) const; 120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns the number of attributes contained in this instance 123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Number of attributes 125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int getCount(void) const; 127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 128d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 129d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Adds optional information as <key, value> pair to this instance 130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] key Key to add 132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] value Value to add 133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Returns the error code 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t put(const String8& key, const String8& value); 136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves the value of given key 139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param key Key whose value to be retrieved 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return The value 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8 get(const String8& key) const; 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns KeyIterator object to walk through the keys associated with this instance 147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return KeyIterator object 149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi KeyIterator keyIterator() const; 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns Iterator object to walk through the values associated with this instance 154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Iterator object 156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 157d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Iterator iterator() const; 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns index of the given key 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return index 163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 164d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int indexOfKey(const String8& key) const; 165d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 166d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiprotected: 167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int mInfoType; 168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmBuffer mData; 169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8 mMimeType; 170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi KeyedVector<String8, String8> mAttributes; 171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}; 172d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 173d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}; 174d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 175d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#endif /* __DRM_INFO_H__ */ 176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 177