blob: 1084839e09717beeee7c12165c68de0fcb4e4ad7 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
#ifndef CPM_INTERNAL_H_INCLUDED
#define CPM_INTERNAL_H_INCLUDED
#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
#ifndef OSCL_TYPES_H_INCLUDED
#include "oscl_types.h"
#endif
#ifndef PVLOGGER_H_INCLUDED
#include "pvlogger.h"
#endif
#ifndef PVMF_NODE_INTERFACE_H_INCLUDED
#include "pvmf_node_interface.h"
#endif
#ifndef PVMF_NODE_UTILS_H_INCLUDED
#include "pvmf_node_utils.h"
#endif
#ifndef OSCL_SCHEDULER_AO_H_INCLUDED
#include "oscl_scheduler_ao.h"
#endif
#ifndef PVMF_CPMPLUGIN_INTERFACE_H_INCLUDED
#include "pvmf_cpmplugin_interface.h"
#endif
#ifndef PVMF_CPMPLUGIN_AUTHORIZATION_INTERFACE_H_INCLUDED
#include "pvmf_cpmplugin_authorization_interface.h"
#endif
#ifndef PVMF_CPMPLUGIN_AUTHENTICATION_INTERFACE_H_INCLUDED
#include "pvmf_cpmplugin_authentication_interface.h"
#endif
#ifndef PVMF_CPMPLUGIN_ACCESS_INTERFACE_FACTORY_H_INCLUDED
#include "pvmf_cpmplugin_access_interface_factory.h"
#endif
#ifndef PVMF_DATA_SOURCE_INIT_EXTENSION_H_INCLUDED
#include "pvmf_data_source_init_extension.h"
#endif
#ifndef PVMF_CPMPLUGIN_LICENSE_INTERFACE_H_INCLUDED
#include "pvmf_cpmplugin_license_interface.h"
#endif
#ifndef PVMF_META_DATA_EXTENSION_H_INCLUDED
#include "pvmf_meta_data_extension.h"
#endif
#ifndef PVMI_CONFIG_AND_CAPABILITY_UTILS_H_INCLUDED
#include "pvmi_config_and_capability_utils.h"
#endif
#ifndef CPM_H_INCLUDED
#include "cpm.h"
#endif
#ifndef CPM_PLUGIN_REGISTRY_H
#include "cpm_plugin_registry.h"
#endif
#ifndef CPM_TYPES_H
#include "cpm_types.h"
#endif
#ifndef PVMI_KVP_INCLUDED
#include "pvmi_kvp.h"
#endif
#ifndef PVMI_KVP_UTIL_H_INCLUDED
#include "pvmi_kvp_util.h"
#endif
/**
* Macros for calling PVLogger
*/
#define PVMF_CPM_LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_ERR,m);
#define PVMF_CPM_LOGWARNING(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_WARNING,m);
#define PVMF_CPM_LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,iLogger,PVLOGMSG_INFO,m);
#define PVMF_CPM_LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,iLogger,PVLOGMSG_INFO,m);
#define PVMF_CPM_LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
#define PVMF_CPM_LOGINFO(m) PVMF_CPM_LOGINFOMED(m)
/*
* IDs for all of the asynchronous plugin commands.
*/
enum TPVMFCPMCommand
{
PVMF_CPM_QUERY_INTERFACE = PVMF_GENERIC_NODE_QUERYINTERFACE,
/* Starting value for command IDs */
PVMF_CPM_COMMAND_ID_START = 40000,
PVMF_CPM_INIT,
PVMF_CPM_OPEN_SESSION,
PVMF_CPM_REGISTER_CONTENT,
PVMF_CPM_APPROVE_USAGE,
PVMF_CPM_USAGE_COMPLETE,
PVMF_CPM_CLOSE_SESSION,
PVMF_CPM_RESET,
PVMF_CPM_GET_METADATA_KEYS,
PVMF_CPM_GET_METADATA_VALUES,
PVMF_CPM_GET_LICENSE_W,
PVMF_CPM_GET_LICENSE,
PVMF_CPM_CANCEL_GET_LICENSE,
PVMF_CPM_COMMAND_LAST
};
#define PVMF_CPM_INTERNAL_QUERY_UUID_CMD 1000
#define PVMF_CPM_INTERNAL_INIT_CMD 1001
#define PVMF_CPM_INTERNAL_QUERY_AUTHENTICATION_INTERFACE_CMD 1002
#define PVMF_CPM_INTERNAL_QUERY_AUTHORIZATION_INTERFACE_CMD 1003
#define PVMF_CPM_INTERNAL_QUERY_ACCESS_INTERFACE_FACTORY_CMD 1004
#define PVMF_CPM_INTERNAL_QUERY_METADATA_EXTENSION_INTERFACE_CMD 1005
#define PVMF_CPM_INTERNAL_AUTHENTICATE_CMD 1006
#define PVMF_CPM_INTERNAL_AUTHORIZE_CMD 1007
#define PVMF_CPM_INTERNAL_USAGE_COMPLETE_CMD 1008
#define PVMF_CPM_INTERNAL_RESET_CMD 1009
#define PVMF_CPM_INTERNAL_GET_PLUGIN_META_DATA_KEYS_CMD 1010
#define PVMF_CPM_INTERNAL_GET_PLUGIN_META_DATA_VALUES_CMD 1011
#define PVMF_CPM_INTERNAL_QUERY_LICENSE_INTERFACE_CMD 1012
#define PVMF_CPM_INTERNAL_GET_LICENSE_CMD 1013
#define PVMF_CPM_INTERNAL_QUERY_CAP_CONFIG_INTERFACE_CMD 1014
#define PVMF_CPM_INTERNAL_CANCEL_GET_LICENSE 1015
#define PVMF_CPM_INTERNAL_CMDQ_SIZE 10
#define PVMFCPMCommandBase PVMFGenericNodeCommand<OsclMemAllocator>
class PVMFCPMCommand : public PVMFCPMCommandBase
{
public:
void Construct(PVMFSessionId s,
int32 cmd,
OsclAny* aArg1,
OsclAny* aArg2,
OsclAny* aArg3,
OsclAny* aArg4,
const OsclAny* aContext)
{
PVMFCPMCommandBase::Construct(s, cmd, aContext);
iParam1 = aArg1;
iParam2 = aArg2;
iParam3 = aArg3;
iParam4 = aArg4;
};
void Parse(OsclAny*& aArg1,
OsclAny*& aArg2,
OsclAny*& aArg3,
OsclAny*& aArg4)
{
aArg1 = iParam1;
aArg2 = iParam2;
aArg3 = iParam3;
aArg4 = iParam4;
};
void Construct(PVMFSessionId s,
int32 cmd,
OsclAny* aArg1,
OsclAny* aArg2,
OsclAny* aArg3,
OsclAny* aArg4,
OsclAny* aArg5,
const OsclAny* aContext)
{
PVMFCPMCommandBase::Construct(s, cmd, aContext);
iParam1 = aArg1;
iParam2 = aArg2;
iParam3 = aArg3;
iParam4 = aArg4;
iParam5 = aArg5;
};
void Parse(OsclAny*& aArg1,
OsclAny*& aArg2,
OsclAny*& aArg3,
OsclAny*& aArg4,
OsclAny*& aArg5)
{
aArg1 = iParam1;
aArg2 = iParam2;
aArg3 = iParam3;
aArg4 = iParam4;
aArg5 = iParam5;
};
/* For Init and Reset */
void Construct(int32 aCmd, const OsclAny* aContext)
{
iSession = 0;
iCmd = aCmd;
iContext = aContext;
iParam1 = NULL;
iParam2 = NULL;
iParam3 = NULL;
iParam4 = NULL;
iParam5 = NULL;
};
/* For open session */
void Construct(int32 aCmd,
OsclAny* aArg1,
const OsclAny* aContext)
{
iSession = 0;
iCmd = aCmd;
iContext = aContext;
iParam1 = aArg1;
iParam2 = NULL;
iParam3 = NULL;
iParam4 = NULL;
iParam5 = NULL;
};
void Parse(OsclAny*& aArg1)
{
aArg1 = iParam1;
};
/* Constructor and parser for GetNodeMetadataKeys */
void Construct(PVMFSessionId s,
int32 cmd,
PVMFMetadataList& aKeyList,
int32 aStartingIndex,
int32 aMaxEntries,
char* aQueryKey,
const OsclAny* aContext)
{
PVMFCPMCommandBase::Construct(s, cmd, aContext);
iParam1 = (OsclAny*) & aKeyList;
iParam2 = (OsclAny*)aStartingIndex;
iParam3 = (OsclAny*)aMaxEntries;
if (aQueryKey)
{
/* allocate a copy of the query key string. */
Oscl_TAlloc<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> str;
iParam4 = str.alloc_and_construct(aQueryKey);
}
}
void Parse(PVMFMetadataList*& MetaDataListPtr,
int32 &aStartingIndex,
int32 &aMaxEntries,
char*& aQueryKey)
{
MetaDataListPtr = (PVMFMetadataList*)iParam1;
aStartingIndex = (int32)iParam2;
aMaxEntries = (int32)iParam3;
aQueryKey = NULL;
if (iParam4)
{
OSCL_HeapString<OsclMemAllocator>* keystring =
(OSCL_HeapString<OsclMemAllocator>*)iParam4;
aQueryKey = keystring->get_str();
}
}
/* Constructor and parser for GetNodeMetadataValue */
void Construct(PVMFSessionId s,
int32 cmd,
PVMFMetadataList& aKeyList,
Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
int32 aStartIndex,
int32 aMaxEntries,
const OsclAny* aContext)
{
PVMFCPMCommandBase::Construct(s, cmd, aContext);
iParam1 = (OsclAny*) & aKeyList;
iParam2 = (OsclAny*) & aValueList;
iParam3 = (OsclAny*)aStartIndex;
iParam4 = (OsclAny*)aMaxEntries;
}
void Parse(PVMFMetadataList* &aKeyList,
Oscl_Vector<PvmiKvp, OsclMemAllocator>* &aValueList,
int32 &aStartingIndex,
int32 &aMaxEntries)
{
aKeyList = (PVMFMetadataList*)iParam1;
aValueList = (Oscl_Vector<PvmiKvp, OsclMemAllocator>*)iParam2;
aStartingIndex = (int32)iParam3;
aMaxEntries = (int32)iParam4;
}
/* Constructor and parser for GetLicenseW */
void Construct(PVMFSessionId s,
int32 cmd,
OSCL_wString& aContentName,
OsclAny* aLicenseData,
uint32 aDataSize,
int32 aTimeoutMsec,
OsclAny* aContext)
{
PVMFCPMCommandBase::Construct(s, cmd, aContext);
iParam1 = (OsclAny*) & aContentName;
iParam2 = (OsclAny*)aLicenseData;
iParam3 = (OsclAny*)aDataSize;
iParam4 = (OsclAny*)aTimeoutMsec;
iParam5 = NULL;
}
void Parse(OSCL_wString*& aContentName,
OsclAny*& aLicenseData,
uint32& aDataSize,
int32& aTimeoutMsec)
{
aContentName = (OSCL_wString*)iParam1;
aLicenseData = (PVMFTimestamp*)iParam2;
aDataSize = (uint32)iParam3;
aTimeoutMsec = (int32)iParam4;
}
/* Constructor and parser for GetLicense */
void Construct(PVMFSessionId s,
int32 cmd,
OSCL_String& aContentName,
OsclAny* aLicenseData,
uint32 aDataSize,
int32 aTimeoutMsec,
OsclAny* aContext)
{
PVMFCPMCommandBase::Construct(s, cmd, aContext);
iParam1 = (OsclAny*) & aContentName;
iParam2 = (OsclAny*)aLicenseData;
iParam3 = (OsclAny*)aDataSize;
iParam4 = (OsclAny*)aTimeoutMsec;
iParam5 = NULL;
}
void Parse(OSCL_String*& aContentName,
OsclAny*& aLicenseData,
uint32& aDataSize,
int32& aTimeoutMsec)
{
aContentName = (OSCL_String*)iParam1;
aLicenseData = (PVMFTimestamp*)iParam2;
aDataSize = (uint32)iParam3;
aTimeoutMsec = (int32)iParam4;
}
};
typedef PVMFNodeCommandQueue<PVMFCPMCommand, OsclMemAllocator> PVMFCPMCommandCmdQ;
class CPMSessionInfo
{
public:
CPMSessionInfo()
{
iSessionId = 0;
iSourceFormatType = 0;
iSourceData = NULL;
iNumPlugInAunthenticateRequestsPending = 0;
iNumPlugInAunthenticateRequestsComplete = 0;
iNumPlugInAuthorizeInterfaceQueryRequestsPending = 0;
iNumPlugInAuthorizeInterfaceQueryRequestsComplete = 0;
iNumPlugInAccessInterfaceFactoryQueryRequestsPending = 0;
iNumPlugInAccessInterfaceFactoryQueryRequestsComplete = 0;
iNumPlugInLicenseAcquisitionInterfaceRequestsPending = 0;
iNumPlugInLicenseAcquisitionInterfaceRequestsComplete = 0;
iAccessPlugInID = 0xFFFFFFFF;
};
PVMFSessionId iSessionId;
OSCL_wHeapString<OsclMemAllocator> iSourceURL;
PVMFFormatType iSourceFormatType;
OsclAny* iSourceData;
uint32 iNumPlugInAunthenticateRequestsPending;
uint32 iNumPlugInAunthenticateRequestsComplete;
uint32 iNumPlugInAuthorizeInterfaceQueryRequestsPending;
uint32 iNumPlugInAuthorizeInterfaceQueryRequestsComplete;
uint32 iNumPlugInAccessInterfaceFactoryQueryRequestsPending;
uint32 iNumPlugInAccessInterfaceFactoryQueryRequestsComplete;
uint32 iNumPlugInLicenseAcquisitionInterfaceRequestsPending;
uint32 iNumPlugInLicenseAcquisitionInterfaceRequestsComplete;
uint32 iAccessPlugInID;
};
class CPMPlugInParams
{
public:
CPMPlugInParams()
{
iPlugInSessionID = 0;
iPlugInInterface = NULL;
iPlugInData = NULL;
iPlugInAuthenticationInterface = NULL;
iPlugInAuthorizationInterface = NULL;
iPlugInAccessInterfaceFactory = NULL;
iPlugInMetaDataExtensionInterface = NULL;
iPlugInLicenseInterface = NULL;
iPlugInCapConfigExtensionInterface = NULL;
iPlugInAuthenticationInterfacePVI = NULL;
iPlugInAuthorizationInterfacePVI = NULL;
iPlugInAccessInterfaceFactoryPVI = NULL;
iPlugInMetaDataExtensionInterfacePVI = NULL;
iPlugInLicenseInterfacePVI = NULL;
iPlugInCapConfigExtensionInterfacePVI = NULL;
iAuthorizationRequestTimeOut =
PVMF_CPM_DEFAULT_PLUGIN_AUTHORIZATION_TIMEOUT_IN_MS;
iConnected = false;
iAuthorized = false;
iNumMetaDataKeysAvailable = 0;
iGetMetaDataValuesComplete = false;
iNumMetaDataValuesAvailable = 0;
iMetaDataKeyStartIndex = 0;
iMetaDataKeyEndIndex = 0;
iMetaDataValueStartIndex = 0;
iMetaDataValueEndIndex = 0;
iGetMetaDataKeysComplete = false;
};
PVMFSessionId iPlugInSessionID;
uint32 iPlugInID;
OSCL_HeapString<OsclMemAllocator> iPlugInMimeType;
PVMFCPMPluginInterface* iPlugInInterface;
OsclAny* iPlugInData;
Oscl_Vector<PVUuid, OsclMemAllocator> iExtensionUuids;
PVMFCPMPluginAuthenticationInterface* iPlugInAuthenticationInterface;
PVMFCPMPluginAuthorizationInterface* iPlugInAuthorizationInterface;
PVMFCPMPluginAccessInterfaceFactory* iPlugInAccessInterfaceFactory;
PVMFMetadataExtensionInterface* iPlugInMetaDataExtensionInterface;
PVMFCPMPluginLicenseInterface* iPlugInLicenseInterface;
PvmiCapabilityAndConfig* iPlugInCapConfigExtensionInterface;
PVInterface* iPlugInAuthenticationInterfacePVI;
PVInterface* iPlugInAuthorizationInterfacePVI;
PVInterface* iPlugInAccessInterfaceFactoryPVI;
PVInterface* iPlugInMetaDataExtensionInterfacePVI;
PVInterface* iPlugInLicenseInterfacePVI;
PVInterface* iPlugInCapConfigExtensionInterfacePVI;
uint32 iAuthorizationRequestTimeOut;
bool iConnected;
bool iAuthorized;
uint32 iNumMetaDataKeysAvailable;
Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> iAvailableMetadataKeys;
bool iGetMetaDataValuesComplete;
uint32 iNumMetaDataValuesAvailable;
uint32 iMetaDataKeyStartIndex;
uint32 iMetaDataKeyEndIndex;
uint32 iMetaDataValueStartIndex;
uint32 iMetaDataValueEndIndex;
bool iGetMetaDataKeysComplete;
};
class CPMContentUsageContext
{
public:
CPMContentUsageContext()
{
iUsageID = 0;
iNumAuthorizeRequestsPending = 0;
iNumAuthorizeRequestsComplete = 0;
iNumUsageCompleteRequestsPending = 0;
iNumUsageCompleteRequestsComplete = 0;
};
PVMFCPMUsageID iUsageID;
uint32 iNumAuthorizeRequestsPending;
uint32 iNumAuthorizeRequestsComplete;
uint32 iNumUsageCompleteRequestsPending;
uint32 iNumUsageCompleteRequestsComplete;
};
typedef struct tagPVMFCPMCommandContext
{
tagPVMFCPMCommandContext()
{
parentCmd = 0;
cmd = 0;
oFree = true;
plugInID = 0;
sessionid = 0;
usageid = 0;
};
int32 parentCmd;
int32 cmd;
bool oFree;
uint32 plugInID;
PVMFSessionId sessionid;
PVMFCPMUsageID usageid;
} PVMFCPMCommandContext;
class PVMFCPMImpl : public OsclActiveObject,
public PVMFCPM,
public PVMFMetadataExtensionInterface,
public PvmiCapabilityAndConfig,
public PVMFCPMPluginCmdStatusObserver,
public PVMFCPMPluginLicenseInterface
{
public:
OSCL_IMPORT_REF PVMFCPMImpl(PVMFCPMStatusObserver& aObserver,
int32 aPriority = OsclActiveObject::EPriorityNominal);
~PVMFCPMImpl();
OSCL_IMPORT_REF void ThreadLogon();
OSCL_IMPORT_REF void ThreadLogoff();
OSCL_IMPORT_REF PVMFCommandId Init(const OsclAny* aContext = NULL);
OSCL_IMPORT_REF PVMFCommandId OpenSession(PVMFSessionId& aSessionId,
const OsclAny* aContext = NULL);
OSCL_IMPORT_REF PVMFCommandId RegisterContent(PVMFSessionId aSessionId,
OSCL_wString& aSourceURL,
PVMFFormatType& aSourceFormat,
OsclAny* aSourceData,
const OsclAny* aContext = NULL);
OSCL_IMPORT_REF PVMFCPMContentType GetCPMContentType(PVMFSessionId aSessionId);
OSCL_IMPORT_REF PVMFStatus GetCPMContentFilename(PVMFSessionId aSessionId, OSCL_wString& aFileName) ;
OSCL_IMPORT_REF PVMFStatus GetContentAccessFactory(PVMFSessionId aSessionId,
PVMFCPMPluginAccessInterfaceFactory*& aContentAccessFactory);
OSCL_IMPORT_REF PVMFCommandId ApproveUsage(PVMFSessionId aSessionId,
PvmiKvp& aRequestedUsage,
PvmiKvp& aApprovedUsage,
PvmiKvp& aAuthorizationData,
PVMFCPMUsageID& aUsageID,
const OsclAny* aContext = NULL);
OSCL_IMPORT_REF PVMFCommandId UsageComplete(PVMFSessionId aSessionId,
PVMFCPMUsageID& aUsageID,
OsclAny* aContext = NULL);
OSCL_IMPORT_REF PVMFCommandId CloseSession(PVMFSessionId& aSessionId,
const OsclAny* aContext = NULL);
OSCL_IMPORT_REF PVMFCommandId Reset(const OsclAny* aContext = NULL);
CPMPluginRegistry* GetPluginRegistry()
{
return iPluginRegistry;
}
OSCL_IMPORT_REF PVMFCommandId QueryInterface(PVMFSessionId aSessionId,
const PVUuid& aUuid,
PVInterface*& aInterfacePtr,
const OsclAny* aContext = NULL);
OSCL_IMPORT_REF void CPMPluginCommandCompleted(const PVMFCmdResp& aResponse);
/* From PVInterface */
OSCL_IMPORT_REF void addRef();
OSCL_IMPORT_REF void removeRef();
OSCL_IMPORT_REF bool queryInterface(const PVUuid& uuid, PVInterface*& iface);
/* From PVMFMetadataExtensionInterface */
OSCL_IMPORT_REF uint32 GetNumMetadataKeys(char* aQueryKeyString = NULL);
OSCL_IMPORT_REF uint32 GetNumMetadataValues(PVMFMetadataList& aKeyList);
OSCL_IMPORT_REF PVMFCommandId GetNodeMetadataKeys(PVMFSessionId aSessionId,
PVMFMetadataList& aKeyList,
uint32 aStartingKeyIndex,
int32 aMaxKeyEntries,
char* aQueryKeyString = NULL,
const OsclAny* aContextData = NULL);
OSCL_IMPORT_REF PVMFCommandId GetNodeMetadataValues(PVMFSessionId aSessionId,
PVMFMetadataList& aKeyList,
Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
uint32 aStartingValueIndex,
int32 aMaxValueEntries = -1,
const OsclAny* aContextData = NULL);
OSCL_IMPORT_REF PVMFStatus ReleaseNodeMetadataKeys(PVMFMetadataList& aKeyList,
uint32 aStartingKeyIndex,
uint32 aEndKeyIndex);
OSCL_IMPORT_REF PVMFStatus ReleaseNodeMetadataValues(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
uint32 aStartingValueIndex,
uint32 aEndValueIndex);
Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> iAvailableMetadataKeys;
/* From PVMFCPMPluginLicenseInterface */
PVMFStatus GetLicenseURL(PVMFSessionId aSessionId,
OSCL_wString& aContentName,
OSCL_wString& aLicenseURL)
{
OSCL_UNUSED_ARG(aSessionId);
OSCL_UNUSED_ARG(aContentName);
OSCL_UNUSED_ARG(aLicenseURL);
//must use Async method.
return PVMFErrNotSupported;
}
PVMFStatus GetLicenseURL(PVMFSessionId aSessionId,
OSCL_String& aContentName,
OSCL_String& aLicenseURL)
{
OSCL_UNUSED_ARG(aSessionId);
OSCL_UNUSED_ARG(aContentName);
OSCL_UNUSED_ARG(aLicenseURL);
//must use Async method.
return PVMFErrNotSupported;
}
PVMFCommandId GetLicense(PVMFSessionId aSessionId,
OSCL_wString& aContentName,
OsclAny* aData,
uint32 aDataSize,
int32 aTimeoutMsec,
OsclAny* aContextData) ;
PVMFCommandId GetLicense(PVMFSessionId aSessionId,
OSCL_String& aContentName,
OsclAny* aData,
uint32 aDataSize,
int32 aTimeoutMsec,
OsclAny* aContextData);
PVMFCommandId CancelGetLicense(PVMFSessionId aSessionId
, PVMFCommandId aCmdId
, OsclAny* aContextData);
PVMFStatus GetLicenseStatus(
PVMFCPMLicenseStatus& aStatus) ;
/* Implement pure virtuals from PvmiCapabilityAndConfig interface */
PVMFStatus getParametersSync(PvmiMIOSession aSession,
PvmiKeyType aIdentifier,
PvmiKvp*& aParameters,
int& num_parameter_elements,
PvmiCapabilityContext aContext);
PVMFStatus releaseParameters(PvmiMIOSession aSession,
PvmiKvp* aParameters,
int num_elements);
void setParametersSync(PvmiMIOSession aSession,
PvmiKvp* aParameters,
int num_elements,
PvmiKvp*& aRet_kvp);
PVMFStatus verifyParametersSync(PvmiMIOSession aSession,
PvmiKvp* aParameters,
int num_elements);
/* Unsupported PvmiCapabilityAndConfig methods */
void setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver)
{
OSCL_UNUSED_ARG(aObserver);
};
void createContext(PvmiMIOSession aSession, PvmiCapabilityContext& aContext)
{
OSCL_UNUSED_ARG(aSession);
OSCL_UNUSED_ARG(aContext);
};
void setContextParameters(PvmiMIOSession aSession,
PvmiCapabilityContext& aContext,
PvmiKvp* aParameters,
int num_parameter_elements)
{
OSCL_UNUSED_ARG(aSession);
OSCL_UNUSED_ARG(aContext);
OSCL_UNUSED_ARG(aParameters);
OSCL_UNUSED_ARG(num_parameter_elements);
};
void DeleteContext(PvmiMIOSession aSession, PvmiCapabilityContext& aContext)
{
OSCL_UNUSED_ARG(aSession);
OSCL_UNUSED_ARG(aContext);
};
PVMFCommandId setParametersAsync(PvmiMIOSession aSession,
PvmiKvp* aParameters,
int num_elements,
PvmiKvp*& aRet_kvp,
OsclAny* context = NULL)
{
OSCL_UNUSED_ARG(aRet_kvp);
OSCL_UNUSED_ARG(aSession);
OSCL_UNUSED_ARG(aParameters);
OSCL_UNUSED_ARG(num_elements);
OSCL_UNUSED_ARG(context);
return -1;
}
uint32 getCapabilityMetric(PvmiMIOSession aSession)
{
OSCL_UNUSED_ARG(aSession);
return 0;
}
private:
void Run();
PVMFCPMStatusObserver& iObserver;
/* Command processing */
PVMFCPMCommandContext iInternalCmdPool[PVMF_CPM_INTERNAL_CMDQ_SIZE];
PVMFCPMCommandCmdQ iInputCommands;
PVMFCPMCommandCmdQ iCurrentCommand;
PVMFCPMCommandCmdQ iCancelCommand;
PVMFCommandId QueueCommandL(PVMFCPMCommand&);
PVMFCPMCommandContext* RequestNewInternalCmd();
void MoveCmdToCurrentQueue(PVMFCPMCommand& aCmd);
void MoveCmdToCancelQueue(PVMFCPMCommand& aCmd);
bool ProcessCommand(PVMFCPMCommand&);
void CommandComplete(PVMFCPMCommandCmdQ&,
PVMFCPMCommand&,
PVMFStatus,
OsclAny* aData = NULL,
PVUuid* aEventUUID = NULL,
int32* aEventCode = NULL);
void CommandComplete(PVMFCPMCommandCmdQ& aCmdQ,
PVMFCPMCommand& aCmd,
PVMFStatus aStatus,
PVInterface* aErrorExtIntf);
void DoInit(PVMFCPMCommand&);
PVMFStatus InitRegisteredPlugIns();
PVMFStatus QueryForPlugInMetaDataExtensionInterface();
PVMFStatus QueryForPlugInAuthenticationInterface();
PVMFStatus QueryForPlugInCapConfigInterface();
void CompleteInitPlugIns();
void CompleteMetaDataExtInterfaceQueryFromPlugIns();
void CompleteCapConfigExtInterfaceQueryFromPlugIns();
void CompleteCPMInit();
void DoOpenSession(PVMFCPMCommand&);
PVMFStatus AuthenticateWithAllRegisteredPlugIns(PVMFSessionId);
void CompleteOpenSession(CPMSessionInfo*);
void DoRegisterContent(PVMFCPMCommand&);
PVMFStatus PopulateListOfActivePlugIns(CPMSessionInfo*);
PVMFStatus QueryForAuthorizationInterface(CPMSessionInfo*);
PVMFStatus QueryForAccessInterfaceFactory(CPMSessionInfo*);
PVMFStatus DetermineAccessPlugIn(CPMSessionInfo*);
PVMFStatus QueryForLicenseInterface(CPMSessionInfo*);
void CompleteRegisterContentPhase1(CPMSessionInfo*);
void CompleteRegisterContentPhase2(CPMSessionInfo*);
void CompleteRegisterContentPhase3(CPMSessionInfo*);
void DoApproveUsage(PVMFCPMCommand&);
PVMFStatus RequestApprovalFromActivePlugIns(PVMFCPMCommand& aCmd);
void CompleteApproveUsage(CPMContentUsageContext*);
bool CheckForMetaDataInterfaceAvailability();
PVMFStatus QueryForMetaDataKeys(PVMFCPMCommand& aParentCmd);
void CompleteGetMetaDataKeys(uint32);
bool CheckForGetMetaDataKeysCompletion();
void DoUsageComplete(PVMFCPMCommand&);
PVMFStatus SendUsageCompleteToRegisteredPlugIns(PVMFCPMUsageID);
void CompleteUsageComplete(CPMContentUsageContext*);
void DoCloseSession(PVMFCPMCommand&);
void DoReset(PVMFCPMCommand&);
PVMFStatus ResetRegisteredPlugIns();
void CompleteCPMReset();
PVMFStatus DoGetMetadataKeys(PVMFCPMCommand& aCmd);
void DoGetMetadataValues(PVMFCPMCommand& aCmd);
PVMFStatus CompleteDoGetMetadataKeys(PVMFCPMCommand& aCmd);
CPMPlugInParams* LookUpNextPlugInForGetMetaDataValues();
bool IsGetMetaDataValuesFromPlugInsComplete();
void SendGetMetaDataValuesToPlugIn(CPMPlugInParams*);
void CompleteGetMetaDataValues(PVMFCPMCommandContext*);
void DoQueryInterface(PVMFCPMCommand&);
PVMFStatus DoGetLicense(PVMFCPMCommand& aCmd,
bool aWideCharVersion = false);
void CompleteGetLicense();
void DoCancelGetLicense(PVMFCPMCommand& aCmd);
CPMSessionInfo* LookUpSessionInfo(PVMFSessionId);
CPMContentUsageContext* LookUpContentUsageContext(PVMFCPMUsageID);
CPMPlugInParams* LookUpPlugInParams(uint32);
CPMPlugInParams* LookUpPlugInParamsFromActiveList(uint32);
int32 PushKVPKey(OSCL_String& aString, PVMFMetadataList& aKeyList);
PVLogger* iLogger;
CPMPluginRegistry* iPluginRegistry;
Oscl_Vector<CPMPlugInParams, OsclMemAllocator> iPlugInParamsVec;
Oscl_Vector<CPMPlugInParams, OsclMemAllocator> iActivePlugInParamsVec;
Oscl_Vector<CPMContentUsageContext, OsclMemAllocator> iContentUsageContextVec;
Oscl_Vector<CPMSessionInfo, OsclMemAllocator> iListofActiveSessions;
uint32 iNumRegisteredPlugInInitPending;
uint32 iNumRegisteredPlugInInitComplete;
uint32 iNumQueryAuthenticationInterfacePending;
uint32 iNumQueryAuthenticationInterfaceComplete;
uint32 iNumQueryMetaDataExtensionInterfacePending;
uint32 iNumQueryMetaDataExtensionInterfaceComplete;
uint32 iNumQueryCapConfigExtensionInterfacePending;
uint32 iNumQueryCapConfigExtensionInterfaceComplete;
uint32 iNumRegisteredPlugInResetPending;
uint32 iNumRegisteredPlugInResetComplete;
bool iGetMetaDataKeysFromPlugInsDone;
bool iGetMetaDataKeysInProgress;
/* Metadata related */
uint32 iExtensionRefCount;
PVMFMetadataList* iKeyListPtr;
Oscl_Vector<PvmiKvp, OsclMemAllocator>* iValueListPtr;
int32 iGetMetaDataValuesStartingIndex;
int32 iGetMetaDataValuesMaxEntries;
/* License Acquire */
PVMFCPMPluginLicenseInterface* iLicenseInterface ;
PVMFCommandId iGetLicenseCmdId;
PVMFCommandId iCancelGetLicenseCmdId;
};
typedef OSCL_HeapString<OsclMemAllocator> string_key_type;
template<class Alloc>
struct CPMPluginMimeStringCompare
{
bool operator()(const string_key_type& x, const string_key_type& y) const
{
if ((oscl_CIstrcmp(x.get_str(), y.get_str())) < 0)
{
return true;
}
else
{
return false;
}
}
};
#ifndef CPM_PLUGIN_REGISTRY_H_INCLUDED
#include "cpm_plugin_registry.h"
#endif
#ifndef OSCL_MAP_H_INCLUDED
#include "oscl_map.h"
#endif
class OsclSharedLibraryList;
class CPMPluginRegistryImpl: public CPMPluginRegistry
{
public:
typedef CPMPluginMimeStringCompare<OsclMemAllocator> string_key_compare_class;
typedef Oscl_Map<string_key_type, CPMPluginContainer*, OsclMemAllocator, string_key_compare_class>::value_type value_type;
//From CPMPluginRegistry
OSCL_IMPORT_REF bool addPluginToRegistry(OSCL_String& aMimeType,
CPMPluginContainer& aPlugInContainer) ;
OSCL_IMPORT_REF void removePluginFromRegistry(OSCL_String& aMimeType) ;
OSCL_IMPORT_REF CPMPluginContainer* lookupPlugin(OSCL_String& aMimeType) ;
OSCL_IMPORT_REF uint32 GetNumPlugIns() ;
OSCL_IMPORT_REF bool GetPluginMimeType(uint32 aIndex, OSCL_String& aMimeType) ;
OsclSharedLibraryList*& AccessSharedLibraryList()
{
return iSharedLibList;
}
private:
friend class CPMPluginRegistryFactory;
OSCL_IMPORT_REF CPMPluginRegistryImpl();
OSCL_IMPORT_REF ~CPMPluginRegistryImpl();
Oscl_Map<string_key_type, CPMPluginContainer*, OsclMemAllocator, string_key_compare_class> iCPMPluginRegistry;
Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> iListofPlugInMimeTypes;
int32 iRefCount;
OsclSharedLibraryList* iSharedLibList;
};
#endif //CPM_INTERNAL_H_INCLUDED