diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdproviderutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncdproviderutils.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,365 @@ +/* +* Copyright (c) 2006 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: CNcdProviderUtils implementation +* +*/ + + +#include +#include +#include "ncdproviderutils.h" +#include "catalogsdebug.h" +#include "ncdengineconfigurationimpl.h" +#include "ncddeviceinteractionfactory.h" +#include "ncddeviceserviceimpl.h" +#include "ncdinstallationserviceimpl.h" +#include "catalogsutils.h" +#include "ncdproviderdefines.h" +#include "catalogsstringmanager.h" +#include "ncdhttputils.h" + +#ifdef CATALOGS_BUILD_CONFIG_DEBUG + #include "ncdtestconfig.h" + _LIT( KTestConfigFile, "c:\\data\\others\\ncdtestnetwork.cfg" ); +#endif + + +RFs CNcdProviderUtils::iFs; +CNcdEngineConfiguration* CNcdProviderUtils::iConfig = NULL; +MNcdDeviceService* CNcdProviderUtils::iDeviceService = NULL; +MNcdInstallationService* CNcdProviderUtils::iInstallationService = NULL; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CNcdProviderUtils* CNcdProviderUtils::NewL( const TDesC& aFilename ) + { + CNcdProviderUtils* self = new( ELeave ) CNcdProviderUtils(); + CleanupStack::PushL( self ); + self->ConstructL( aFilename ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CNcdProviderUtils::~CNcdProviderUtils() + { + delete iConfig; + delete iDeviceService; + delete iInstallationService; + iFs.Close(); + CCatalogsStringManager::Delete(); + } + + +// --------------------------------------------------------------------------- +// File session getter +// --------------------------------------------------------------------------- +// +RFs& CNcdProviderUtils::FileSession() + { + return iFs; + } + + +// --------------------------------------------------------------------------- +// Engine configuration getter +// --------------------------------------------------------------------------- +// +MNcdEngineConfiguration& CNcdProviderUtils::EngineConfig() + { + DASSERT( iConfig ); + return *iConfig; + } + + +// --------------------------------------------------------------------------- +// Installation service getter +// --------------------------------------------------------------------------- +// +MNcdInstallationService& CNcdProviderUtils::InstallationServiceL() + { + if ( !iInstallationService ) + { + iInstallationService = + NcdDeviceInteractionFactory::CreateInstallationServiceL(); + } + return *iInstallationService; + } + + +// --------------------------------------------------------------------------- +// Device service getter +// --------------------------------------------------------------------------- +// +MNcdDeviceService& CNcdProviderUtils::DeviceService() + { + DASSERT( iDeviceService ); + return *iDeviceService; + } + + + +// --------------------------------------------------------------------------- +// Temp path getter +// --------------------------------------------------------------------------- +// +HBufC* CNcdProviderUtils::TempPathLC( const TDesC& aClientId ) + { + DASSERT( iConfig ); + return iConfig->ClientDataPathLC( aClientId, ETrue ); + } + + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CNcdProviderUtils::ReadDatabaseVersionsL( + const TDesC& aRootPath, + TUint32& aGeneralVersion, + TUint32& aPurchaseHistoryVersion ) + { + DLTRACEIN(("")); + + RBuf path; + AppendPathsLC( + path, + aRootPath, + NcdProviderDefines::KNcdDatabaseVersionFile ); + + + RFileReadStream stream; + CleanupClosePushL( stream ); + User::LeaveIfError( stream.Open( FileSession(), + path, EFileRead ) ); + aGeneralVersion = stream.ReadUint32L(); + aPurchaseHistoryVersion = stream.ReadUint32L(); + CleanupStack::PopAndDestroy( 2, &path ); // stream, path + DLTRACEOUT(("Versions, general: %d, purchase history: %d", + aGeneralVersion, aPurchaseHistoryVersion )); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CNcdProviderUtils::WriteDatabaseVersionsL( + const TDesC& aRootPath, + TUint32 aGeneralVersion, + TUint32 aPurchaseHistoryVersion ) + { + DLTRACEIN(("Writing versions, general: %d, purchase history: %d", + aGeneralVersion, aPurchaseHistoryVersion )); + + RBuf path; + + AppendPathsLC( + path, + aRootPath, + NcdProviderDefines::KNcdDatabaseVersionFile ); + + RFileWriteStream stream; + CleanupClosePushL( stream ); + User::LeaveIfError( stream.Replace( FileSession(), + path, EFileWrite ) ); + stream.WriteUint32L( aGeneralVersion ); + stream.WriteUint32L( aPurchaseHistoryVersion ); + CleanupStack::PopAndDestroy( 2, &path ); + DLTRACEOUT(("Versions successfully written")); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CNcdProviderUtils::UpdateShutdownFileL( + const TDesC& aRootPath ) + { + DLTRACEIN(("")); + + RBuf path; + + AppendPathsLC( + path, + aRootPath, + NcdProviderDefines::KNcdProviderShutdownFile ); + + BaflUtils::EnsurePathExistsL( FileSession(), aRootPath ); + + // Try to read the value from the file if it exists, otherwise create a + // new file. + RFile file; + CleanupClosePushL( file ); + TInt previousStartups = 0; + + TInt err = file.Open( FileSession(), path, EFileWrite ); + if ( err == KErrNone ) + { + HBufC8* data = ReadFileL( file ); + if ( data->Length() ) + { + previousStartups = Des8ToInt( *data ); + DLTRACE(("Previous startups without good shutdown: %d", + previousStartups )); + } + delete data; + data = NULL; + User::LeaveIfError( file.Seek( ESeekStart, err ) ); + } + else + { + DLTRACE(("No shutdown file, creating")); + User::LeaveIfError( file.Replace( FileSession(), path, EFileWrite ) ); + } + + // Update new count to the file + previousStartups++; + HBufC8* newData = IntToDes8LC( previousStartups ); + User::LeaveIfError( file.Write( *newData ) ); + + CleanupStack::PopAndDestroy( 3, &path ); // newData, file, path + DLTRACEOUT(("Wrote previousStartups as: %d", previousStartups)); + return previousStartups; + } + + +// --------------------------------------------------------------------------- +// Removes the shutdown file +// --------------------------------------------------------------------------- +// +void CNcdProviderUtils::RemoveShutdownFileL( const TDesC& aRootPath ) + { + DLTRACEIN(("")); + + RBuf path; + AppendPathsLC( + path, + aRootPath, + NcdProviderDefines::KNcdProviderShutdownFile() ); + + User::LeaveIfError( BaflUtils::DeleteFile( FileSession(), path ) ); + CleanupStack::PopAndDestroy( &path ); + } + + + +// --------------------------------------------------------------------------- +// Checks if the application with the given uid is installed +// --------------------------------------------------------------------------- +// +TNcdApplicationStatus CNcdProviderUtils::IsApplicationInstalledL( + const TUid& aUid, const TDesC& aVersion ) + { + DLTRACEIN(( _L("Uid: %x, version: %S"), aUid.iUid, &aVersion )); + + TCatalogsVersion version; + TRAPD( err, TCatalogsVersion::ConvertL( version, aVersion ) ); + LeaveIfNotErrorL( err, KErrArgument, KErrGeneral ); + + return InstallationServiceL().IsApplicationInstalledL( aUid, version ); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CNcdProviderUtils::CompareVersionsL( + const TDesC& aLeft, + const TDesC& aRight ) + { + DLTRACEIN(( _L("Left: %S, right: %S"), &aLeft, &aRight )); + + TCatalogsVersion leftVersion; + TCatalogsVersion::ConvertL( leftVersion, aLeft ); + + TCatalogsVersion rightVersion; + TCatalogsVersion::ConvertL( rightVersion, aRight ); + + if ( leftVersion > rightVersion ) + { + return 1; + } + else if ( leftVersion == rightVersion ) + { + return 0; + } + return -1; + } + + + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CNcdProviderUtils::CNcdProviderUtils() + { + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CNcdProviderUtils::ConstructL( const TDesC& aFilename ) + { + DLTRACEIN(("")); + User::LeaveIfError( iFs.Connect() ); + + // This creates the string manager to its own static variable + CCatalogsStringManager::SetStringManager( + CCatalogsStringManager::NewL() ); + + iDeviceService = NcdDeviceInteractionFactory::CreateDeviceServiceL(); + + // Read test configuration for device service + #ifdef CATALOGS_BUILD_CONFIG_DEBUG + + TRAP_IGNORE( + { + // Leaves if the parsing fails for any reason + CNcdTestConfig* testConfig = CNcdTestConfig::NewL( + FileSession(), KTestConfigFile() ); + + DLINFO(("Setting test network config")); + // Ownership is transferred + iDeviceService->SetTestConfig( testConfig ); + }); + + #endif // CATALOGS_BUILD_CONFIG_DEBUG + + + iConfig = CNcdEngineConfiguration::NewL( *iDeviceService ); + + TRAPD( err, + iConfig->ReadConfigurationL( aFilename ) ); + if ( err != KErrNone && err != KErrNotFound ) + { + User::Leave( err ); + } + } + + +