installationservices/swi/source/dataprovider/cafsisdataprovider.cpp
changeset 0 ba25891c3a9e
--- /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	
+	}