diff -r 000000000000 -r ba25891c3a9e installationservices/swi/source/dataprovider/cafsisdataprovider.cpp --- /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 +#include +#include + +#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 + }