--- 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,