diff -r afc583cfa176 -r da2ae96f639b contentmgmt/referencedrmagent/TestAgent/testagentdata.cpp --- /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 +#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 +