diff -r afc583cfa176 -r da2ae96f639b contentmgmt/contentaccessfwfordrm/source/caf/data.cpp --- a/contentmgmt/contentaccessfwfordrm/source/caf/data.cpp Fri Oct 02 13:15:59 2009 +0300 +++ b/contentmgmt/contentaccessfwfordrm/source/caf/data.cpp Mon Oct 12 10:17:04 2009 +0300 @@ -111,6 +111,48 @@ return self; } +#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT + +EXPORT_C CData* CData::NewL(const TDesC8& aHeaderData) + { + CData* self = CData::NewLC(aHeaderData); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CData* CData::NewL(const TDesC8& aHeaderData, TIntent aIntent) + { + CData* self = CData::NewLC(aHeaderData, aIntent); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CData* CData::NewLC(const TDesC8& aHeaderData) + { + CData* self = new (ELeave) CData(); + CleanupStack::PushL(self); + self->ConstructL(aHeaderData); + return self; + } + +EXPORT_C CData* CData::NewLC(const TDesC8& aHeaderData, TIntent aIntent) + { + CData* self = new (ELeave) CData(); + CleanupStack::PushL(self); + self->ConstructL(aHeaderData, aIntent); + return self; + } + +CData* CData::NewLC(TUid aAgentUid, const TDesC8& aHeaderData, TIntent aIntent) + { + CData* self = new (ELeave) CData(); + CleanupStack::PushL(self); + self->ConstructL(aAgentUid, aHeaderData, aIntent); + return self; + } + +#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT + CData::CData() { } @@ -247,10 +289,52 @@ // Create an instance of the agent's CAgentData // The agent must make a duplicate of the file handle iAgentData = iAgentFactory->CreateDataConsumerL(aFile, aUniqueId); - + } + +#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT + +void CData::ConstructL(const TDesC8& aHeaderData) + { + // Find the agent who handles the file + CAgentResolver* resolver = CAgentResolver::NewLC(EFalse); + CAgentInfo& agentInfo = resolver->ResolveFileL(aHeaderData); + + // Figure out the Uid of the agent + TUid agentUid = agentInfo.Agent().ImplementationUid(); + CData::ConstructL(agentUid, aHeaderData); + + // Cleanup resolver after creating CData to unnecessary + // unloading and loading of agent plug-ins + CleanupStack::PopAndDestroy(resolver); } +void CData::ConstructL(const TDesC8& aHeaderData, TIntent aIntent) + { + CData::ConstructL(aHeaderData); + + // Ensure that client's intent is possible + User::LeaveIfError(iAgentData->EvaluateIntent(aIntent)); + } + +void CData::ConstructL(TUid aAgentUid, const TDesC8& aHeaderData) + { + iAgentUid = aAgentUid; + + iAgentFactory = CAgentFactory::NewL(iAgentUid); + // create an instance of agent's CAgentStreamData. + iAgentData = iAgentFactory->CreateDataConsumerL(aHeaderData); + } +void CData::ConstructL(TUid aUid, const TDesC8& aHeaderData, TIntent aIntent) + { + CData::ConstructL(aUid, aHeaderData); + + // Ensure that client's intent is possible + User::LeaveIfError(iAgentData->EvaluateIntent(aIntent)); + } + +#endif //#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT + EXPORT_C void CData::DataSizeL(TInt& aSize) { // ask the agent for the data size of the current content object @@ -317,6 +401,20 @@ { iAgentData->ReadCancel(aStatus); } + +#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT + +EXPORT_C TInt CData::Read(const TDesC8& aEncryptedInputDataPacket, TDes8& aDecryptedOutputPacket) const + { + return iAgentData->Read(aEncryptedInputDataPacket, aDecryptedOutputPacket); + } + +EXPORT_C void CData::Read(const TDesC8& aEncryptedInputDataPacket, TDes8& aDecryptedOutputPacket, TRequestStatus& aStatus) const + { + iAgentData->Read(aEncryptedInputDataPacket, aDecryptedOutputPacket, aStatus); + } + +#endif //#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API EXPORT_C TInt CData::Read_Unused(TInt aPos, TDes8& aDes,