wim/WimServer/src/WimTrustSettingsHandler.cpp
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/WimServer/src/WimTrustSettingsHandler.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2004-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:  Handler class for Trust Settings Store calls from WimClient
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "WimTrustSettingsHandler.h"
+#include    "WimTrustSettingsStore.h"
+#include    "WimClsv.h"
+#include    "WimCertInfo.h"
+#include    "WimTrace.h"
+
+#ifdef _DEBUG
+_LIT( KWimTrustSettPanic, "WimTrustSett" );
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::CWimTrustSettingsHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CWimTrustSettingsHandler::CWimTrustSettingsHandler( 
+    CWimTrustSettingsStore* aWimTrustSettingsStore )
+    : CActive( EPriorityStandard ),
+      iWimTrustSettingsStore( aWimTrustSettingsStore )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::CWimTrustSettingsHandler | Begin"));
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::ConstructL()
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::ConstructL | Begin"));
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CWimTrustSettingsHandler* CWimTrustSettingsHandler::NewL( 
+    CWimTrustSettingsStore* aWimTrustSettingsStore ) 
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::NewL | Begin"));
+    CWimTrustSettingsHandler* self = new( ELeave ) CWimTrustSettingsHandler( 
+    aWimTrustSettingsStore );
+ 
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+    
+// Destructor
+CWimTrustSettingsHandler::~CWimTrustSettingsHandler()
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::~CWimTrustSettingsHandler | Begin"));
+    iApplications.Close();
+    delete iCertInfo;
+    iWimTrustSettingsStore = NULL;  // not owned
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::GetTrustSettingsL
+// Fetches trust settings for given certificate. 
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::GetTrustSettingsL( const RMessage2& aMessage )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::GetTrustSettingsL | Begin"));
+
+    TPckgBuf<TWimCertInfoPckg> pckg;
+
+    aMessage.ReadL( 0, pckg );
+
+    __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) );
+    iCertInfo = CWimCertInfo::InternalizeL( pckg() );
+
+    iStatus = KRequestPending;
+    iMessage = aMessage;
+    iPhase = EGetTrustSettings;
+    SetActive();
+    iWimTrustSettingsStore->GetTrustSettings( *iCertInfo,
+                                              iTrusted,
+                                              iApplications, 
+                                              iStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::SetApplicabilityL
+// Set applicability for given certificate. New certificate entry is set if
+// one not found from database (trust flag is set to EFalse).
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::SetApplicabilityL( const RMessage2& aMessage )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::SetApplicabilityL | Begin"));
+
+    TPckgBuf<TWimCertInfoPckg> pckg;
+    aMessage.ReadL( 0, pckg );
+
+    __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) );
+    iCertInfo = CWimCertInfo::InternalizeL( pckg() );
+
+    RArray<TUid> applications;
+    CleanupClosePushL( applications );
+
+    TPckgBuf<TTrustSettings> trustSettingsPckg;
+
+    aMessage.ReadL( 1, trustSettingsPckg );
+
+    TInt applicationCount = trustSettingsPckg().iApplicationCount;
+
+    for ( TInt i = 0; i < applicationCount; i++ )
+        {
+        TUid uid;
+        uid.iUid = trustSettingsPckg().iUids[i];
+        applications.Append( uid );
+        }
+
+    iStatus = KRequestPending;
+    iMessage = aMessage;
+    iPhase = ESetApplicability;
+    SetActive();
+    iWimTrustSettingsStore->SetApplicability( *iCertInfo,
+                                              applications,
+                                              iStatus );
+
+    CleanupStack::PopAndDestroy( &applications );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::SetTrustL
+// Set trust flag for given certificate. New certificate entry is set if
+// one not found from database.
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::SetTrustL( const RMessage2& aMessage )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::SetTrustL | Begin"));
+
+    TPckgBuf<TWimCertInfoPckg> pckg;
+    aMessage.ReadL( 0, pckg );
+
+    __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) );
+    iCertInfo = CWimCertInfo::InternalizeL( pckg() );
+
+    TPckgBuf<TTrustSettings> trustSettingsPckg;
+
+    aMessage.ReadL( 1, trustSettingsPckg );
+
+    TBool trusted = trustSettingsPckg().iTrusted;
+
+    iStatus = KRequestPending;
+    iMessage = aMessage;
+    iPhase = ESetTrust;
+
+    SetActive();
+
+    iWimTrustSettingsStore->SetTrust( *iCertInfo,
+                                      trusted,
+                                      iStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::SetDefaultTrustSettingsL
+// Set default trust settings for given certificate. If certificate not
+// found from database new entry is inserted.
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::SetDefaultTrustSettingsL( 
+    const RMessage2& aMessage )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::SetDefaultTrustSettingsL | Begin"));
+
+    TPckgBuf<TWimCertInfoPckg> pckg;
+    aMessage.ReadL( 0, pckg );
+   
+    TBool addApps = aMessage.Int1();
+
+    __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) );
+    iCertInfo = CWimCertInfo::InternalizeL( pckg() );
+
+    iStatus = KRequestPending;
+    iMessage = aMessage;
+    iPhase = ESetDefaultTrustSettings;
+    SetActive();
+    iWimTrustSettingsStore->SetDefaultTrustSettings( *iCertInfo,
+                                                     addApps, 
+                                                     iStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::RemoveTrustSettingsL
+// Remove trust settings of given certificate. If certificate
+// is not found, return with status.Int() = KErrNotFound
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::RemoveTrustSettingsL( const RMessage2& aMessage )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::RemoveTrustSettingsL | Begin"));
+
+    TPckgBuf<TWimCertInfoPckg> pckg;
+    aMessage.ReadL( 0, pckg );
+
+    __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) );
+    iCertInfo = CWimCertInfo::InternalizeL( pckg() );
+
+    iStatus = KRequestPending;
+    iMessage = aMessage;
+    iPhase = ERemoveTrustSettings;
+    SetActive();
+    iWimTrustSettingsStore->RemoveTrustSettings( *iCertInfo,
+                                                 iStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::CancelDoing
+// Cancel ongoing TrustSettingsStore operation
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::CancelDoing()
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::CancelDoing | Begin"));
+
+    iWimTrustSettingsStore->CancelDoing();
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::RunL
+// Complete asynchronous call
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::RunL()
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::RunL | Begin"));
+
+    delete iCertInfo;
+    iCertInfo = NULL;
+    
+    switch ( iPhase )
+        {
+        case EGetTrustSettings:
+            {
+            TInt applicationCount = iApplications.Count();
+
+            // Check that there is no more apps than allocated in array for
+            // If there is more applications than there is space in array
+            // complete message and return
+            if ( applicationCount > KMaxApplicationCount )
+                {
+                iMessage.Complete( KErrOverflow );
+                iApplications.Close();
+                return;
+                }
+
+            TPckgBuf<TTrustSettings> trustSettings;
+            iMessage.ReadL( 1, trustSettings );
+            trustSettings().iTrusted = iTrusted;
+            trustSettings().iApplicationCount = iApplications.Count();
+
+            for ( TInt i = 0; i < iApplications.Count(); i++ )
+                {
+                trustSettings().iUids[i] = iApplications[i].iUid;
+                }
+
+            iApplications.Close();
+            iMessage.WriteL( 1, trustSettings );
+            break;
+            }
+
+        case ESetDefaultTrustSettings:  // Flow through
+        case ESetApplicability:         // Flow through
+        case ESetTrust:                 // Flow through
+        case ERemoveTrustSettings:
+            {
+            break;
+            }
+
+        default:
+            {
+            break;
+            }
+        }
+
+    iMessage.Complete( iStatus.Int() );
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::DoCancel
+// 
+// -----------------------------------------------------------------------------
+//
+void CWimTrustSettingsHandler::DoCancel()
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::DoCancel | Begin"));
+    }
+
+// -----------------------------------------------------------------------------
+// CWimTrustSettingsHandler::RunError
+// Handle trapped leave in RunL. Complete message with leave error code and
+// close open resources that need be freed.
+// -----------------------------------------------------------------------------
+//
+TInt CWimTrustSettingsHandler::RunError( TInt aError )
+    {
+    _WIMTRACE(_L("WIM | WIMServer | CWimTrustSettingsHandler::RunError | Begin"));
+
+    iMessage.Complete( aError );
+    iApplications.Close();
+    return KErrNone;
+    }
+
+//  End of File