contentmgmt/contentaccessfwfordrm/source/caf/data.cpp
changeset 15 da2ae96f639b
parent 8 35751d3474b7
child 45 030c4fbc13d7
--- 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,