--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wmdrm/wmdrmengine/wmdrmagent/src/wmdrmagentdata.cpp Thu Dec 17 08:52:27 2009 +0200
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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: Implementation of the CAF Agent Data class
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <caf.h>
+#include <caf/caferr.h>
+#include <attribute.h>
+#include <e32test.h>
+#include "wmdrmagentdata.h"
+#include "wmdrmagentattributes.h"
+#include "asf.h"
+#include "logfn.h"
+
+using namespace ContentAccess;
+
+// LOCAL FUNCTION PROTOTYPES
+LOCAL_C TInt MapContentShareMode(TContentShareMode aMode);
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// MapContentShareMode
+// Maps the CAF specific file share mode to the RFs/RFile sharing mode
+// -----------------------------------------------------------------------------
+//
+TInt MapContentShareMode(TContentShareMode aMode)
+ {
+ TInt r = EFileRead | EFileShareAny;
+
+ switch (aMode)
+ {
+ case EContentShareReadOnly:
+ r = EFileRead | EFileShareReadersOnly;
+ break;
+ case EContentShareReadWrite:
+ r = EFileRead | EFileShareReadersOrWriters;
+ break;
+ case EContentShareExclusive:
+ r = EFileRead | EFileShareExclusive;
+ break;
+ }
+ return r;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::CWmDrmAgentData
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CWmDrmAgentData::CWmDrmAgentData():
+ iVirtualPath( KNullDesC ),
+ iAsf( NULL )
+ {
+ LOGFN( "CWmDrmAgentData::CWmDrmAgentData" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CWmDrmAgentData* CWmDrmAgentData::NewL(
+ const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode )
+ {
+ LOGFN( "CWmDrmAgentData::NewL" );
+ CWmDrmAgentData* self = new (ELeave) CWmDrmAgentData;
+ CleanupStack::PushL(self);
+ self->ConstructL(aVirtualPath, aShareMode);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::NewLC
+// -----------------------------------------------------------------------------
+//
+CWmDrmAgentData* CWmDrmAgentData::NewLC(
+ const TVirtualPathPtr& aVirtualPath,
+ TContentShareMode aShareMode)
+ {
+ LOGFN( "CWmDrmAgentData::NewLC" );
+ CWmDrmAgentData* self=new(ELeave) CWmDrmAgentData();
+ CleanupStack::PushL(self);
+ self->ConstructL(aVirtualPath, aShareMode);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::NewLC
+// -----------------------------------------------------------------------------
+//
+CWmDrmAgentData* CWmDrmAgentData::NewL(
+ RFile& aFile, const TDesC& aUniqueId )
+ {
+ LOGFN( "CWmDrmAgentData::NewL (2)" );
+ CWmDrmAgentData* self = new (ELeave) CWmDrmAgentData;
+ CleanupStack::PushL(self);
+ self->ConstructL(aFile, aUniqueId);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::NewLC
+// -----------------------------------------------------------------------------
+//
+CWmDrmAgentData* CWmDrmAgentData::NewLC(
+ RFile& aFile,
+ const TDesC& aUniqueId )
+ {
+ LOGFN( "CWmDrmAgentData::NewLC (2)" );
+ CWmDrmAgentData* self=new(ELeave) CWmDrmAgentData();
+ CleanupStack::PushL(self);
+ self->ConstructL(aFile, aUniqueId);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::~CWmDrmAgentData
+// -----------------------------------------------------------------------------
+//
+
+CWmDrmAgentData::~CWmDrmAgentData()
+ {
+ // Tidy up RFile and RFs
+ LOGFN( "CWmDrmAgentData::~CWmDrmAgentData" );
+ iFile.Close();
+ iFs.Close();
+ delete iAsf;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::ConstructL
+// The porting kit is not initialized here since it is time consuming. It is
+// initialized whenever needed and just allocated at this point.
+// -----------------------------------------------------------------------------
+//
+void CWmDrmAgentData::ConstructL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode)
+ {
+ LOGFN( "CWmDrmAgentData::ConstructL" );
+ User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError(iFile.Open(iFs, aVirtualPath.URI(),
+ MapContentShareMode(aShareMode)));
+ iAsf = CAsf::NewL(iFile);
+ iVirtualPath = aVirtualPath;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CWmDrmAgentData::ConstructL(RFile& aFile, const TDesC& /*aUniqueId*/)
+ {
+ TInt pos = 0;
+
+ LOGFN( "CWmDrmAgentData::ConstructL (2)" );
+ // When creating a CData from a file handle we must duplicate the file handle
+ // before doing anything
+ User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError(iFile.Duplicate(aFile));
+ User::LeaveIfError(iFile.Seek(ESeekStart, pos)); // reset to start of file
+ iAsf = CAsf::NewL(iFile);
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::DataSizeL
+// -----------------------------------------------------------------------------
+//
+void CWmDrmAgentData::DataSizeL(TInt &aSize)
+ {
+ LOGFN( "CWmDrmAgentData::DataSizeL" );
+ User::LeaveIfError(iFile.Size(aSize));
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::EvaluateIntent
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::EvaluateIntent(TIntent /*aIntent*/)
+ {
+ LOGFN( "CWmDrmAgentData::EvaluateIntent" );
+ return KErrCANotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::ExecuteIntent
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::ExecuteIntent(TIntent /*aIntent*/)
+ {
+ LOGFN( "CWmDrmAgentData::ExecuteIntent" );
+ return KErrCANotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::Read
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::Read(TDes8& aDes)
+ {
+ LOGFN( "CWmDrmAgentData::Read" );
+ return iFile.Read(aDes);
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::Read
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::Read(TDes8& aDes,TInt aLength)
+ {
+ LOGFN( "CWmDrmAgentData::Read (2)" );
+ return iFile.Read(aDes,aLength);
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::Read
+// -----------------------------------------------------------------------------
+//
+void CWmDrmAgentData::Read(TDes8& aDes,TRequestStatus& aStatus)
+ {
+ LOGFN( "CWmDrmAgentData::Read (3)" );
+ iFile.Read(aDes, aStatus);
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::Read
+// -----------------------------------------------------------------------------
+//
+void CWmDrmAgentData::Read(TDes8& aDes,
+ TInt aLength,
+ TRequestStatus& aStatus)
+ {
+ LOGFN( "CWmDrmAgentData::Read (4)" );
+ iFile.Read(aDes, aLength, aStatus);
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::Read
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::Read(TInt aPos, TDes8& aDes,
+ TInt aLength,
+ TRequestStatus& aStatus)
+ {
+ LOGFN( "CWmDrmAgentData::Read (5)" );
+ iFile.Read(aPos, aDes, aLength, aStatus);
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::Seek
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::Seek(TSeek aMode, TInt& aPos)
+ {
+ LOGFN( "CWmDrmAgentData::Seek" );
+ return iFile.Seek(aMode, aPos);
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::SetProperty
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::SetProperty(TAgentProperty /*aProperty*/, TInt /*aValue*/)
+ {
+ LOGFN( "CWmDrmAgentData::SetProperty" );
+ return KErrCANotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::GetAttribute
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::GetAttribute(TInt aAttribute, TInt& aValue)
+ {
+ TInt r = KErrNone;
+ TInt err = KErrNone;
+
+ LOGFN( "CWmDrmAgentData::GetAttribute" );
+ TRAP(err,r = TWmDrmAgentAttributes::GetAttributeL(iAsf,
+ aAttribute, aValue, iVirtualPath));
+ if (err != KErrNone)
+ {
+ return err;
+ }
+
+ return r;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::GetAttributeSet
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::GetAttributeSet(RAttributeSet& aAttributeSet)
+ {
+ TInt err = KErrNone;
+ TInt r = KErrNone;
+
+ LOGFN( "CWmDrmAgentData::GetAttributeS" );
+ TRAP(err, r = TWmDrmAgentAttributes::GetAttributeSetL(iAsf,
+ aAttributeSet, iVirtualPath) );
+ if (err != KErrNone)
+ {
+ return err;
+ }
+ return r;
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::GetStringAttribute
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::GetStringAttribute(TInt aAttribute, TDes& aValue)
+ {
+ TInt err = KErrNone;
+ TInt r = KErrNone;
+
+ LOGFN( "CWmDrmAgentData::GetStringAttribute" );
+ TRAP(err, r = TWmDrmAgentAttributes::GetStringAttributeL(iAsf,
+ aAttribute, aValue, iVirtualPath));
+ if (err != KErrNone)
+ {
+ return err;
+ }
+ return r;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWmDrmAgentData::GetStringAttributeSet
+// -----------------------------------------------------------------------------
+//
+TInt CWmDrmAgentData::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet)
+ {
+ TInt err = KErrNone;
+ TInt r = KErrNone;
+
+ LOGFN( "CWmDrmAgentData::GetStringAttributeSet" );
+ TRAP(err,r = TWmDrmAgentAttributes::GetStringAttributeSetL(iAsf,
+ aStringAttributeSet, iVirtualPath));
+ if (err != KErrNone)
+ {
+ return err;
+ }
+ return r;
+
+ }
+
+// End of File