Home | History | Annotate | Download | only in include
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 #ifndef CPM_H_INCLUDED
     19 #define CPM_H_INCLUDED
     20 
     21 #ifndef OSCL_TYPES_H_INCLUDED
     22 #include "oscl_types.h"
     23 #endif
     24 #ifndef PVMF_EVENT_HANDLING_H_INCLUDED
     25 #include "pvmf_event_handling.h"
     26 #endif
     27 #ifndef PVMI_KVP_INCLUDED
     28 #include "pvmi_kvp.h"
     29 #endif
     30 #ifndef PVMF_FORMAT_TYPE_H_INCLUDED
     31 #include "pvmf_format_type.h"
     32 #endif
     33 #ifndef CPM_TYPES_H_INCLUDED
     34 #include "cpm_types.h"
     35 #endif
     36 #ifndef PVMF_CPMPLUGIN_ACCESS_INTERFACE_FACTORY_H_INCLUDED
     37 #include "pvmf_cpmplugin_access_interface_factory.h"
     38 #endif
     39 #ifndef PVMF_CPMPLUGIN_ACCESS_INTERFACE_H_INCLUDED
     40 #include "pvmf_cpmplugin_access_interface.h"
     41 #endif
     42 
     43 typedef int32 PVMFCPMUsageID;
     44 
     45 /* Forward declarations */
     46 class CPMPluginRegistry;
     47 
     48 /**
     49  * PVMFCPMStatusObserver Class
     50  *
     51  * PVMFCPMStatusObserver is the PVMF CPM Plugin observer class for
     52  * notifying the status of issued command messages. The API provides a mechanism
     53  * for the status of each command to be passed back along with context specific
     54  * information where applicable.
     55  * Applications using the module must have a class derived from
     56  * PVMFCPMStatusObserver and implement the pure virtual function in
     57  * order to receive event notifications from the plugin.
     58  **/
     59 class PVMFCPMStatusObserver
     60 {
     61     public:
     62         /**
     63          * Handle an event that has been generated.
     64          * @param "aResponse"   "The response to a previously issued command."
     65          */
     66         virtual void CPMCommandCompleted(const PVMFCmdResp& aResponse) = 0;
     67         virtual ~PVMFCPMStatusObserver() {}
     68 };
     69 
     70 class PVMFCPM : public PVInterface
     71 {
     72     public:
     73         /**
     74          * Establishes usage thread context.
     75          * CPM should do all thread-context-sensitive initialization in this
     76          * call.
     77          **/
     78         virtual void ThreadLogon() = 0;
     79         /**
     80          * Exits usage thread context.
     81          * CPM should do all thread-context-sensitive cleanup in this
     82          * call.
     83          **/
     84         virtual void ThreadLogoff() = 0;
     85 
     86         /**
     87          * Starts initialization of the content policy manager.  At the minimum,
     88          * CPM should be ready to establish a session after initialization is complete
     89          **/
     90         virtual PVMFCommandId Init(const OsclAny* aContext = NULL) = 0;
     91 
     92         /**
     93          * Creates a session based on interactions with all the
     94          * registered plugins.
     95          **/
     96         virtual PVMFCommandId OpenSession(PVMFSessionId& aSessionId,
     97                                           const OsclAny* aContext = NULL) = 0;
     98 
     99         virtual PVMFCommandId RegisterContent(PVMFSessionId aSessionId,
    100                                               OSCL_wString& aSourceURL,
    101                                               PVMFFormatType& aSourceFormat,
    102                                               OsclAny* aSourceData,
    103                                               const OsclAny* aContext = NULL) = 0;
    104 
    105         /**
    106          * Retrieves the CPM content type for a passed in source. This could
    107          * be types based on DRM version or content rating etc
    108          **/
    109         virtual PVMFCPMContentType GetCPMContentType(PVMFSessionId aSessionId) = 0;
    110 
    111 
    112         /**
    113          * Optional API to retrieve the original filename of a protected file.
    114          **/
    115         virtual PVMFStatus GetCPMContentFilename(PVMFSessionId aSessionId,
    116                 OSCL_wString& aFileName) = 0;
    117 
    118         /**
    119          * Retrieves the access interface factory to be used for all content
    120          * access. The usage of the access factory could sometimes depend on
    121          * a successful authorization.
    122          **/
    123         virtual PVMFStatus GetContentAccessFactory(PVMFSessionId aSessionId,
    124                 PVMFCPMPluginAccessInterfaceFactory*& aContentAccessFactory) = 0;
    125 
    126         /**
    127          * Approves the specified usage of the content, based on the
    128          * interactions with all the authenticated plugins.
    129          **/
    130         virtual PVMFCommandId ApproveUsage(PVMFSessionId aSessionId,
    131                                            PvmiKvp& aRequestedUsage,
    132                                            PvmiKvp& aApprovedUsage,
    133                                            PvmiKvp& aAuthorizationData,
    134                                            PVMFCPMUsageID& aUsageID,
    135                                            const OsclAny* aContext = NULL) = 0;
    136 
    137         /**
    138          * Called by the user once the content usage is complete.
    139          **/
    140         virtual PVMFCommandId UsageComplete(PVMFSessionId aSessionId,
    141                                             PVMFCPMUsageID& aUsageID,
    142                                             OsclAny* aContext = NULL) = 0;
    143 
    144         virtual PVMFCommandId CloseSession(PVMFSessionId& aSessionId,
    145                                            const OsclAny* aContext = NULL) = 0;
    146 
    147         /**
    148          * Resets the content policy manager.  The CPM should relinquish all resources
    149          * that is has acquired as part of the initialization process and should be
    150          * ready to be deleted when this completes.
    151          **/
    152         virtual PVMFCommandId Reset(const OsclAny* aContext = NULL) = 0;
    153 
    154         /**
    155          * Returns a pointer to the current plugin registry, for use in the
    156          * rare case where code needs to access plugins directly.
    157          **/
    158         virtual CPMPluginRegistry* GetPluginRegistry() = 0;
    159 
    160         /**
    161          * Provides a means to query extension interfaces either from the CPM
    162          * directly or from underlying plugins.
    163          * Example: Metadata, License Acquisition etc
    164          **/
    165         virtual PVMFCommandId QueryInterface(PVMFSessionId aSessionId,
    166                                              const PVUuid& aUuid,
    167                                              PVInterface*& aInterfacePtr,
    168                                              const OsclAny* aContext = NULL) = 0;
    169 
    170         virtual ~PVMFCPM() {}
    171 };
    172 
    173 class PVMFCPMFactory
    174 {
    175     public:
    176         /**
    177          * Creates an instance of a PVMFCPM.
    178          * If the creation fails, this function will leave.
    179          *
    180          * @param observer for PVMFCPM
    181          *
    182          * @returns A pointer to an instance of PVMFCPM
    183          * leaves if instantiation fails
    184          **/
    185         OSCL_IMPORT_REF static PVMFCPM* CreateContentPolicyManager(PVMFCPMStatusObserver& aObserver);
    186         /**
    187          * Deletes an instance of PVMFCPM
    188          * and reclaims all allocated resources.
    189          *
    190          * @param aNode The PVMFCPM instance to be deleted
    191          * @returns None
    192          **/
    193         OSCL_IMPORT_REF static void DestroyContentPolicyManager(PVMFCPM*);
    194 };
    195 
    196 #endif //CPM_H_INCLUDED
    197 
    198 
    199