--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/dataprovider/cafsisdataprovider.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2007-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:
+* Implementation of the CCafSisDataProvider
+*
+*/
+
+
+#include <caf/caf.h>
+#include <caf/content.h>
+#include <caf/data.h>
+
+#include "cafsisdataprovider.h"
+
+using namespace Swi;
+
+EXPORT_C CCafSisDataProvider* CCafSisDataProvider::NewL(const TFileName& aFileName)
+ {
+ CCafSisDataProvider* self=CCafSisDataProvider::NewLC(aFileName);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+EXPORT_C CCafSisDataProvider* CCafSisDataProvider::NewLC(const TFileName& aFileName)
+ {
+ CCafSisDataProvider* self=new(ELeave) CCafSisDataProvider();
+ CleanupStack::PushL(self);
+ self->ConstructL(aFileName);
+ return self;
+ }
+
+EXPORT_C CCafSisDataProvider* CCafSisDataProvider::NewL(RFile& aFileHandle)
+ {
+ CCafSisDataProvider* self=CCafSisDataProvider::NewLC(aFileHandle);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+EXPORT_C CCafSisDataProvider* CCafSisDataProvider::NewLC(RFile& aFileHandle)
+ {
+ CCafSisDataProvider* self=new(ELeave) CCafSisDataProvider();
+ CleanupStack::PushL(self);
+ self->ConstructL(aFileHandle);
+ return self;
+ }
+
+CCafSisDataProvider::CCafSisDataProvider()
+ {
+ }
+
+void CCafSisDataProvider::ConstructL(const TFileName& aFileName)
+ {
+ // Create a CContent object
+ // CAF will figure out the appropriate agent
+ iContent = ContentAccess::CContent::NewL(aFileName);
+ }
+
+void CCafSisDataProvider::ConstructL(RFile& aFileHandle)
+ {
+ // Create a CContent object
+ // CAF will figure out the appropriate agent
+ iContent = ContentAccess::CContent::NewL(aFileHandle);
+ }
+
+EXPORT_C CCafSisDataProvider::~CCafSisDataProvider()
+ {
+ delete iData;
+ delete iContent;
+ }
+
+ContentAccess::CData& CCafSisDataProvider::Data() const
+ {
+ __ASSERT_DEBUG(iData, User::Panic(_L("CCafSisDataProvider::DataL"),0));
+ return *iData;
+ }
+
+// From MSisDataProvider
+
+EXPORT_C TInt CCafSisDataProvider::Read(TDes8& aDes)
+ {
+ return Data().Read(aDes);
+ }
+
+EXPORT_C TInt CCafSisDataProvider::Read(TDes8& aDes, TInt aLength)
+ {
+ return Data().Read(aDes, aLength);
+ }
+
+EXPORT_C TInt CCafSisDataProvider::Seek(TSeek aMode, TInt64& aPos)
+ {
+ if (aPos < TInt64(KMinTInt32) || TInt64(KMaxTInt32) < aPos)
+ {
+ return KErrNotSupported;
+ }
+
+ TInt pos = I64INT(aPos);
+ TInt32 err = Data().Seek(aMode, pos);
+ aPos = pos;
+ return err;
+ }
+
+EXPORT_C void CCafSisDataProvider::OpenDrmContentL(ContentAccess::TIntent aIntent)
+ {
+ if(iData)
+ {
+ delete iData;
+ iData = NULL;
+ }
+
+ // Create a CData object to read the content
+ // At this stage we do not know how the content will be used.
+ iData = iContent->OpenContentL(aIntent);
+ User::LeaveIfError(Data().EvaluateIntent(aIntent));
+ }
+
+EXPORT_C TInt CCafSisDataProvider::ExecuteDrmIntent(ContentAccess::TIntent aIntent)
+ {
+ return Data().ExecuteIntent(aIntent);
+ }
+
+// Methods says whether the content object is protected or not.
+EXPORT_C TBool CCafSisDataProvider::IsContentProtected()
+ {
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+ TInt value = 0;
+ TInt err = iContent->GetAttribute(ContentAccess::EIsProtected, value);
+ return err == KErrNone && value;
+#else
+ __ASSERT_ALWAYS(EFalse, User::Invariant());
+ return EFalse;
+#endif
+ }