contentmgmt/contentaccessfwfordrm/source/caf/data.cpp
branchRCL_3
changeset 95 641f389e9157
parent 53 030c4fbc13d7
child 96 a71299154b21
--- a/contentmgmt/contentaccessfwfordrm/source/caf/data.cpp	Thu Aug 19 11:38:48 2010 +0300
+++ b/contentmgmt/contentaccessfwfordrm/source/caf/data.cpp	Tue Aug 31 17:00:08 2010 +0300
@@ -111,6 +111,47 @@
 	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()
 	{ 
@@ -250,6 +291,49 @@
 	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)
 	{
@@ -318,6 +402,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, 
 								TInt aLength, TRequestStatus& aStatus) const