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#ifndef __DRM_INFO_REQUEST_H__
1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __DRM_INFO_REQUEST_H__
1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "drm_framework_common.h"
2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android {
2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is an utility class used to pass required parameters to get
2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * the necessary information to communicate with online DRM server
2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * An instance of this class is passed to
2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * DrmManagerClient::acquireDrmInfo(const DrmInfoRequest*) to get the
3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * instance of DrmInfo.
3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmInfoRequest {
3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    // Changes in following constants should be in sync with DrmInfoRequest.java
3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    static const int TYPE_REGISTRATION_INFO = 1;
3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    static const int TYPE_UNREGISTRATION_INFO = 2;
3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    static const int TYPE_RIGHTS_ACQUISITION_INFO = 3;
3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    static const int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4;
4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Key to pass the unique id for the account or the user
4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    static const String8 ACCOUNT_ID;
4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Key to pass the subscription id
4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    static const String8 SUBSCRIPTION_ID;
4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Constructor for DrmInfoRequest
5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] infoType Type of information
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] mimeType MIME type
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DrmInfoRequest(int infoType, const String8& mimeType);
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Destructor for DrmInfoRequest
6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ~DrmInfoRequest() {}
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Iterator for key
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    class KeyIterator {
6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        friend class DrmInfoRequest;
7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        KeyIterator(const DrmInfoRequest* drmInfoRequest)
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            : mDrmInfoRequest(const_cast <DrmInfoRequest*> (drmInfoRequest)), mIndex(0) {}
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        KeyIterator(const KeyIterator& keyIterator);
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        KeyIterator& operator=(const KeyIterator& keyIterator);
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        virtual ~KeyIterator() {}
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        bool hasNext();
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        const String8& next();
8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DrmInfoRequest* mDrmInfoRequest;
8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        unsigned int mIndex;
8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Iterator
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    class Iterator {
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        friend class DrmInfoRequest;
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        Iterator(const DrmInfoRequest* drmInfoRequest)
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            : mDrmInfoRequest(const_cast <DrmInfoRequest*> (drmInfoRequest)), mIndex(0) {}
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        Iterator(const Iterator& iterator);
10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        Iterator& operator=(const Iterator& iterator);
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        virtual ~Iterator() {}
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        bool hasNext();
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        String8& next();
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DrmInfoRequest* mDrmInfoRequest;
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        unsigned int mIndex;
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns information type associated with this instance
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Information type
11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int getInfoType(void) const;
12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns MIME type associated with this instance
12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return MIME type
12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8 getMimeType(void) const;
12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns the number of entries in DrmRequestInfoMap
13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Number of entries
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int getCount(void) const;
13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Adds optional information as <key, value> pair to this instance
13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] key Key to add
13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] value Value to add
14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Returns the error code
14127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
14227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    status_t put(const String8& key, const String8& value);
14327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
14527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Retrieves the value of given key
14627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param key Key whose value to be retrieved
14827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return The value
14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8 get(const String8& key) const;
15127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns KeyIterator object to walk through the keys associated with this instance
15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return KeyIterator object
15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    KeyIterator keyIterator() const;
15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns Iterator object to walk through the values associated with this instance
16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Iterator object
16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    Iterator iterator() const;
16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate:
16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int mInfoType;
16827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8 mMimeType;
16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    typedef KeyedVector<String8, String8> DrmRequestInfoMap;
17127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DrmRequestInfoMap mRequestInformationMap;
17227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
17327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
17527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __DRM_INFO_REQUEST_H__ */
17727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
178