ncdengine/provider/server/src/ncdproviderutils.cpp
changeset 0 ba25891c3a9e
child 18 3ba40be8e484
--- /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 <s32file.h>
+#include <bautils.h>
+#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 );
+        }
+    }
+    
+    
+