contentmgmt/referencedrmagent/TestAgent/testagentdata.cpp
changeset 15 da2ae96f639b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/TestAgent/testagentdata.cpp	Mon Oct 12 10:17:04 2009 +0300
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* testagentconsumer.cpp
+* implements some of OMA DRM for testing purposes
+*
+*/
+
+
+
+#include <caf/caf.h>
+#include "testagentdata.h"
+#include "testagentattributes.h"
+#include "TestAgentFile.h"
+#include "TestAgentDrmContent.h"
+
+using namespace ContentAccess;
+
+CTestAgentData* CTestAgentData::NewL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode)
+	{
+	CTestAgentData* self = NewLC(aVirtualPath, aShareMode);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestAgentData* CTestAgentData::NewLC(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode)
+	{
+	CTestAgentData* self=new(ELeave) CTestAgentData();
+	CleanupStack::PushL(self);
+	self->ConstructL(aVirtualPath, aShareMode);
+	return self;
+	}
+
+CTestAgentData* CTestAgentData::NewL(RFile& aFile, const TDesC& aUniqueId)
+	{	
+	CTestAgentData* self = NewLC(aFile, aUniqueId);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestAgentData* CTestAgentData::NewLC(RFile& aFile, const TDesC& aUniqueId)
+	{
+	CTestAgentData* self=new(ELeave) CTestAgentData();
+	CleanupStack::PushL(self);
+	self->ConstructL(aFile, aUniqueId);
+	return self;
+	}
+
+CTestAgentData::CTestAgentData()
+	{
+	}
+
+CTestAgentData::~CTestAgentData()
+	{
+	delete iVirtualPath;
+	delete iTestFileObject;
+
+	iFile.Close();
+	iFs.Close();
+	}
+  
+void CTestAgentData::ConstructL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode)
+	{
+	// It is at this point that the agent can open the target content
+	// and cache the size. Evaluation of intent will be left until the
+	// CData object is created.
+
+	// default share mode of EFileShareReadersOnly
+	TUint mode = EFileStream | EFileRead;
+
+	if(aShareMode == EContentShareReadWrite)
+		{
+		mode |= EFileShareReadersOrWriters;
+		}
+	else if (aShareMode == EContentShareExclusive)
+		{
+		mode |= EFileShareExclusive;
+		}
+	else
+		{
+		mode |= EFileShareReadersOnly;
+		}
+
+	TFileName dummyFileName;
+	TTestAgentAttributes::GetDummyFileName(aVirtualPath.URI(), dummyFileName);
+	
+	// open the file with the correct mode
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFs.ShareAuto());
+	User::LeaveIfError(iFile.Open(iFs, dummyFileName, mode));
+
+	// remember the location of the file
+	iVirtualPath = CVirtualPath::NewL(dummyFileName, aVirtualPath.UniqueId());
+
+	// Parse the structure of the DCF file if asked to open default content
+	if(aVirtualPath.UniqueId().Length() == 0)
+		{
+		iTestFileObject = CTestAgentFile::NewL(iFile);
+		}
+	else
+		{
+		iTestFileObject = CTestAgentDrmContent::NewL(iFile);
+		}
+
+	// seek to start of data in the file, ready to "read"
+	TInt Pos = 0;
+	Seek(ESeekStart, Pos);
+	}
+
+
+void CTestAgentData::ConstructL(RFile& aFile, const TDesC& aUniqueId)
+	{
+	User::LeaveIfError(iFile.Duplicate(aFile));
+
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFs.ShareAuto());	
+	
+	// only parse the drm content if requested to open it
+	if(aUniqueId.Length() == 0)
+		{
+		iTestFileObject = CTestAgentFile::NewL(iFile);
+		}
+	else
+		{
+		iTestFileObject = CTestAgentDrmContent::NewL(iFile);
+		}
+		
+
+	// seek to start of data in the file, ready to "read"
+	TInt Pos = 0;
+	Seek(ESeekStart, Pos);
+	}
+
+void CTestAgentData::DataSizeL(TInt &aSize)
+	{
+	iTestFileObject->DataSizeL(aSize);
+	}
+
+TInt CTestAgentData::EvaluateIntent(TIntent /*aIntent*/)
+	{
+	return KErrNone;
+	}
+
+TInt CTestAgentData::ExecuteIntent(TIntent /*aIntent*/)
+	{
+	return KErrNone;
+	}
+
+TInt CTestAgentData::Read(TDes8& aDes) 
+	{
+	return iTestFileObject->Read(aDes,aDes.MaxLength());
+	}
+
+TInt CTestAgentData::Read(TDes8& aDes,TInt aLength) 
+	{
+	return iTestFileObject->Read(aDes,aLength);
+	}
+
+void CTestAgentData::Read(TDes8& aDes,TRequestStatus& aStatus) 
+	{
+	iTestFileObject->Read(aDes, aDes.MaxLength(), aStatus);
+	}
+
+void CTestAgentData::Read(TDes8& aDes, TInt aLength, TRequestStatus& aStatus) 
+	{
+	iTestFileObject->Read(aDes, aLength, aStatus);
+	}
+
+TInt CTestAgentData::Read(TInt aPos, TDes8& aDes, TInt aLength, TRequestStatus& aStatus) 
+	{
+	iTestFileObject->Read(aPos, aDes, aLength, aStatus);
+	return KErrNone;
+	}
+	
+void CTestAgentData::ReadCancel(TRequestStatus& aStatus)
+{
+	iTestFileObject->ReadCancel(aStatus);
+}		
+	
+TInt CTestAgentData::Seek(TSeek aMode, TInt& aPos) 
+	{
+	return iTestFileObject->Seek(aMode, aPos);
+	}
+
+TInt CTestAgentData::SetProperty(TAgentProperty /*aProperty*/, TInt /*aValue*/)
+	{
+	return KErrCANotSupported;
+	}
+
+TInt CTestAgentData::GetAttribute(TInt aAttribute, TInt& aValue)
+	{
+	return iTestFileObject->GetAttribute(aAttribute, aValue);
+	}
+
+TInt CTestAgentData::GetAttributeSet(RAttributeSet& aAttributeSet)
+	{
+	return TTestAgentAttributes::GetAttributeSet(*iTestFileObject, aAttributeSet);
+	}
+
+TInt CTestAgentData::GetStringAttribute(TInt aAttribute, TDes& aValue)
+	{
+	return iTestFileObject->GetStringAttribute(aAttribute, aValue);
+	}
+
+TInt CTestAgentData::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet)
+	{
+	return TTestAgentAttributes::GetStringAttributeSet(*iTestFileObject, aStringAttributeSet);
+	}
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+TInt CTestAgentData::Read64(TInt64 /* aPos */, TDes8& /* aDes */, TInt /* aLength */, TRequestStatus& /* aStatus */)
+	{
+	return KErrCANotSupported;
+	}
+
+void CTestAgentData::DataSize64L(TInt64& /*aSize*/)
+	{
+	User::Leave(KErrCANotSupported);
+	}
+
+TInt CTestAgentData::Seek64(TSeek /*aMode*/, TInt64& /*aPos*/)
+	{
+	return KErrCANotSupported;
+	}
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+