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