sysstatemgmt/ssmmapperutility/src/ssmmapperutility.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/ssmmapperutility/src/ssmmapperutility.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,328 @@
+/*
+* Copyright (c) 2009 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:
+* Implementation of CSsmMapperUtility class.
+*
+*/
+
+#include <e32property.h>
+#include <featdiscovery.h>
+#include <centralrepository.h>
+#include <ssm/ssmdomaindefs.h>
+#include <ssm/ssmstateawaresession.h>
+#include "ssmmapperutility.h"
+#include "trace.h"
+
+typedef CSsmMapperUtility* (*CreateMapperUtilExtL)();
+
+_LIT_SECURE_ID( KStifTestServerSid, 0x102073E4 );
+_LIT_SECURE_ID( KStifConsoleUiSid, 0x102073DA );
+_LIT_SECURE_ID( KStifGuiSid, 0x102073DC );
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSsmMapperUtility* CSsmMapperUtility::NewL()
+    {
+    FUNC_LOG;
+
+    CSsmMapperUtility* self = new ( ELeave ) CSsmMapperUtility;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::~CSsmMapperUtility
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSsmMapperUtility::~CSsmMapperUtility()
+    {
+    FUNC_LOG;
+
+    delete iExtension;
+    iExtensionLib.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::PsUid
+// ---------------------------------------------------------------------------
+//
+TUid CSsmMapperUtility::PsUid( const TUid& aUid )
+    {
+    FUNC_LOG;
+
+    TUid uid( aUid );
+    if ( iExtension )
+        {
+        uid = iExtension->PsUid( aUid );
+        INFO_2( "PS Uid 0x%08x mapped to 0x%08x", aUid.iUid, uid.iUid );
+        }
+
+    return uid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::CrUid
+// ---------------------------------------------------------------------------
+//
+TUid CSsmMapperUtility::CrUid( const TUid& aUid )
+    {
+    FUNC_LOG;
+
+    TUid uid( aUid );
+    if ( iExtension )
+        {
+        uid = iExtension->CrUid( aUid );
+        INFO_2( "CR Uid 0x%08x mapped to 0x%08x", aUid.iUid, uid.iUid );
+        }
+
+    return uid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::FeatureUid
+// ---------------------------------------------------------------------------
+//
+TUid CSsmMapperUtility::FeatureUid( const TUid& aUid )
+    {
+    FUNC_LOG;
+
+    TUid uid( aUid );
+    if ( iExtension )
+        {
+        uid = iExtension->FeatureUid( aUid );
+        INFO_2( "Feature Uid 0x%08x mapped to 0x%08x", aUid.iUid, uid.iUid );
+        }
+
+    return uid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::GetCurrentState
+// ---------------------------------------------------------------------------
+//
+TInt CSsmMapperUtility::GetCurrentState( TSsmState& aState ) const
+    {
+    FUNC_LOG;
+
+    TInt err( KErrNone );
+
+    if ( iExtension )
+        {
+        err = iExtension->GetCurrentState( aState );
+        ERROR( err, "Error getting state" );
+        }
+    else
+        {
+        RSsmStateAwareSession sas;
+
+        err = sas.Connect( KUIFrameworkDomain3 );
+        ERROR( err, "Error connecting RSsmStateAwareSession" );
+        if ( err == KErrNone )
+            {
+            aState = sas.State();
+            sas.Close();
+            }
+        }
+
+    INFO_2( "Current state is %04x.%04x", aState.MainState(), aState.SubState() );
+
+    return err;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::FeatureStatus
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSsmMapperUtility::FeatureStatus( const TUid& aUid )
+    {
+    FUNC_LOG;
+
+    TBool status( EFalse );
+    CFeatureDiscovery* feat = NULL;
+    TRAPD( err, feat = CFeatureDiscovery::NewL() );
+    ERROR( err, "Error creating CFeatureDiscovery" );
+
+    if ( err == KErrNone )
+        {
+        TUid uid( FeatureUid( aUid ) );
+        status = feat->IsSupported( uid );
+        INFO_2( "Feature 0x%08x status is %d", uid.iUid, status );
+        delete feat;
+        }
+
+    return status;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::CrValue
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CSsmMapperUtility::CrValue( const TUid& aUid, TUint32 aKey, TInt& aValue )
+    {
+    FUNC_LOG;
+
+    TUid uid( CrUid( aUid ) );
+    TInt err( KErrNone );
+    CRepository* repository = NULL;
+
+    TRAP( err, repository = CRepository::NewL( uid ) );
+    ERROR_1( err, "Error opening repository 0x%08x", uid.iUid );
+
+    if ( err == KErrNone )
+        {
+        err = repository->Get( aKey, aValue );
+        ERROR_1( err, "Failed to read value of key 0x%08x", aKey );
+        delete repository;
+        }
+
+    INFO_3( "CR 0x%08x::0x%08x value is %d", uid.iUid, aKey, aValue );
+
+    return err;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::CrValue
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CSsmMapperUtility::CrValue( const TUid& aUid, TUint32 aKey, TDes& aValue )
+    {
+    FUNC_LOG;
+
+    TUid uid( CrUid( aUid ) );
+    TInt err( KErrNone );
+    CRepository* repository = NULL;
+
+    TRAP( err, repository = CRepository::NewL( uid ) );
+    ERROR_1( err, "Error opening repository 0x%08x", uid.iUid );
+
+    if ( err == KErrNone )
+        {
+        err = repository->Get( aKey, aValue );
+        ERROR_1( err, "Failed to read value of key 0x%08x", aKey );
+        delete repository;
+        }
+
+    INFO_3( "CR 0x%08x::0x%08x value is '%S'", uid.iUid, aKey, &aValue );
+
+    return err;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::GetCommandListPath
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSsmMapperUtility::GetCommandListPath( TDes& aCmdListPath )
+    {
+    FUNC_LOG;
+
+    if ( iExtension )
+        {
+        iExtension->GetCommandListPath( aCmdListPath );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::CrValue
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSsmMapperUtility::CheckCaps( const RMessagePtr2& aMessage )
+    {
+    FUNC_LOG;
+
+    TBool ret( EFalse );
+
+    if ( iExtension )
+        {
+        ret = ETrue;
+        }
+    else if ( aMessage.HasCapability( ECapabilityPowerMgmt ) )
+        {
+        ret = ETrue;
+        }
+    else
+        {
+        INFO( "Client missing the PowerMgmt capability" );
+        }
+
+    return ret;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::CSsmMapperUtility
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSsmMapperUtility::CSsmMapperUtility()
+    {
+    FUNC_LOG;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSsmMapperUtility::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CSsmMapperUtility::ConstructL()
+    {
+    FUNC_LOG;
+
+    TSecureId sid = User::CreatorSecureId();
+
+    if ( sid.iId == KStifTestServerSid.iId ||
+         sid.iId == KStifConsoleUiSid.iId ||
+         sid.iId == KStifGuiSid.iId )
+        {
+        INFO( "Loading mapper utility stub" );
+        // If the loading process is STIF, load the stub library dynamically.
+        // Errors loading library are not treated worth leaving. With this
+        // approach better coverage for mapper utility can be achieved.
+        _LIT( KSsmMapperUtilityStubLib, "ssmmapperutilstub.dll" );
+
+        TInt err( iExtensionLib.Load( KSsmMapperUtilityStubLib ) );
+        ERROR( err, "Failed to load stub library!" );
+        User::LeaveIfError( err );
+
+        // Function at ordinal 1 creates derived CSsmMapperUtility instance
+        TLibraryFunction entry = iExtensionLib.Lookup( 1 );
+
+        if ( entry )
+            {
+            CreateMapperUtilExtL newL =
+                reinterpret_cast<CreateMapperUtilExtL >( entry );
+            iExtension = ( *newL )();
+            }
+        else
+            {
+            ERROR( KErrNotFound, "Entry not found!" );
+            User::Leave( KErrNotFound );
+            }
+        }
+    }