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