DrmConstraints.cpp revision 27ed8ad2db653f6ac07dcf8bcc05e2409c8bb024
127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/* 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License. 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License. 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <drm/DrmConstraints.h> 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiusing namespace android; 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8 DrmConstraints::MAX_REPEAT_COUNT("max_repeat_count"); 2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8 DrmConstraints::REMAINING_REPEAT_COUNT("remaining_repeat_count"); 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8 DrmConstraints::LICENSE_START_TIME("license_start_time"); 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8 DrmConstraints::LICENSE_EXPIRY_TIME("license_expiry_time"); 2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8 DrmConstraints::LICENSE_AVAILABLE_TIME("license_available_time"); 2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8 DrmConstraints::EXTENDED_METADATA("extended_metadata"); 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmConstraints::getCount(void) const { 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return mConstraintMap.size(); 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmConstraints::put(const String8* key, const char* value) { 3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int length = strlen(value); 3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi char* charValue = new char[length + 1]; 3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi if (NULL != charValue) { 3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi strncpy(charValue, value, length); 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi charValue[length] = '\0'; 3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mConstraintMap.add(*key, charValue); 3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return DRM_NO_ERROR; 4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8 DrmConstraints::get(const String8& key) const { 4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi if (NULL != getValue(&key)) { 4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return String8(getValue(&key)); 4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return String8(""); 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst char* DrmConstraints::getValue(const String8* key) const { 5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi if (NAME_NOT_FOUND != mConstraintMap.indexOfKey(*key)) { 5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return mConstraintMap.valueFor(*key); 5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return NULL; 5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst char* DrmConstraints::getAsByteArray(const String8* key) const { 5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return getValue(key); 5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmConstraints::KeyIterator::hasNext() { 6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return mIndex < mDrmConstraints->mConstraintMap.size(); 6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8& DrmConstraints::KeyIterator::next() { 6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const String8& key = mDrmConstraints->mConstraintMap.keyAt(mIndex); 6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mIndex++; 6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return key; 6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints::KeyIterator DrmConstraints::keyIterator() { 7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return KeyIterator(this); 7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints::KeyIterator::KeyIterator(const DrmConstraints::KeyIterator& keyIterator) 7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi : mDrmConstraints(keyIterator.mDrmConstraints), 7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mIndex(keyIterator.mIndex) { 7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi LOGV("DrmConstraints::KeyIterator::KeyIterator"); 7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints::KeyIterator& DrmConstraints::KeyIterator::operator=( 8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const DrmConstraints::KeyIterator& keyIterator) { 8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi LOGV("DrmConstraints::KeyIterator::operator="); 8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mDrmConstraints = keyIterator.mDrmConstraints; 8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mIndex = keyIterator.mIndex; 8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return *this; 8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints::Iterator DrmConstraints::iterator() { 9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return Iterator(this); 9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints::Iterator::Iterator(const DrmConstraints::Iterator& iterator) : 9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mDrmConstraints(iterator.mDrmConstraints), 9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mIndex(iterator.mIndex) { 9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi LOGV("DrmConstraints::Iterator::Iterator"); 9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmConstraints::Iterator& DrmConstraints::Iterator::operator=( 10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const DrmConstraints::Iterator& iterator) { 10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi LOGV("DrmConstraints::Iterator::operator="); 10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mDrmConstraints = iterator.mDrmConstraints; 10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mIndex = iterator.mIndex; 10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return *this; 10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmConstraints::Iterator::hasNext() { 10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return mIndex < mDrmConstraints->mConstraintMap.size(); 11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8 DrmConstraints::Iterator::next() { 11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi String8 value = String8(mDrmConstraints->mConstraintMap.editValueAt(mIndex)); 11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi mIndex++; 11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return value; 11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 118