diff -r 000000000000 -r 164170e6151a wim/WimServer/src/WimTrustSettingsHandler.cpp --- /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 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 pckg; + aMessage.ReadL( 0, pckg ); + + __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) ); + iCertInfo = CWimCertInfo::InternalizeL( pckg() ); + + RArray applications; + CleanupClosePushL( applications ); + + TPckgBuf 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 pckg; + aMessage.ReadL( 0, pckg ); + + __ASSERT_DEBUG( iCertInfo == NULL, User::Panic( KWimTrustSettPanic, KErrGeneral ) ); + iCertInfo = CWimCertInfo::InternalizeL( pckg() ); + + TPckgBuf 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 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 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 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