diff -r 000000000000 -r b497e44ab2fc policymanagement/policyengine/centreptoolclient/src/CentRepToolClient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/policymanagement/policyengine/centreptoolclient/src/CentRepToolClient.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,269 @@ +/* +* 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 policymanagement components +* +*/ +/* PolicyEngineClient.cpp +*/ + +#include +#include +#include + +#include "CentRepToolClientServer.h" +#include "CentRepToolClient.h" + + +#include "debug.h" + + +// Standard server startup code +// +static TInt StartServer() + { + RDEBUG("CentRepToolServer: Starting server..."); + + const TUidType serverUid(KNullUid,KNullUid,KCentRepToolServerUid); + + // EPOC and EKA 2 is easy, we just create a new server process. Simultaneous + // launching of two such processes should be detected when the second one + // attempts to create the server object, failing with KErrAlreadyExists. + RProcess server; + //TInt r=server.Create(KHelloWorldServerImg,KNullDesC,serverUid); + TInt r=server.Create(KCentRepToolServerImg,KNullDesC); + + if (r!=KErrNone) + { + RDEBUG_2("CenrRepToolClient: server start failed %d",r); + return r; + } + TRequestStatus stat; + server.Rendezvous(stat); + if (stat!=KRequestPending) + server.Kill(0); // abort startup + else + server.Resume(); // logon OK - start the server + RDEBUG("CentRepToolClient: Started"); + User::WaitForRequest(stat); // wait for start or death + // we can't use the 'exit reason' if the server panicked as this + // is the panic 'reason' and may be '0' which cannot be distinguished + // from KErrNone + r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int(); + server.Close(); + return r; + } + + +// This is the standard retry pattern for server connection +EXPORT_C TInt RCentRepTool::Connect() + { + TRAPD( err, FeatureManager::InitializeLibL() ); + if( err != KErrNone ) + { + return err; + } + + TBool iSupported = FeatureManager::FeatureSupported( KFeatureIdSapPolicyManagement); + FeatureManager::UnInitializeLib(); + + if( !iSupported ) + { + return KErrNotSupported; + } + + TInt retry=2; + for (;;) + { + TInt r=CreateSession(KCentRepToolServerName,TVersion(0,0,0),1); + if (r!=KErrNotFound && r!=KErrServerTerminated) + return r; + if (--retry==0) + return r; + r=StartServer(); + if (r!=KErrNone && r!=KErrAlreadyExists) + return r; + } + } + +EXPORT_C void RCentRepTool::Close() + { + RSessionBase::Close(); //basecall + } + +EXPORT_C TInt RCentRepTool::CheckCommitState() +{ + return SendReceive( ECheckCommitState, TIpcArgs()); +} + +EXPORT_C TInt RCentRepTool::PerformRFS() +{ + return SendReceive( EPerformCentRepToolRFS); +} + + +EXPORT_C RSettingManagement::RSettingManagement() + : iConnected( EFalse) +{ +} + +EXPORT_C TInt RSettingManagement::Open( TUid aRepositoryId, RCentRepTool &aServer) +{ + TPckg uidPack( aRepositoryId); + TInt err = CreateSubSession( aServer, ECreateRepositorySubSession, TIpcArgs( &uidPack, NULL)); + + if ( err == KErrNone ) + { + iConnected = ETrue; + } + + return err; +} + +EXPORT_C void RSettingManagement::Close() +{ + RSubSessionBase::CloseSubSession(ECloseRepositorySubSession); +} + +EXPORT_C void RSettingManagement::InitSession( TRequestStatus& iRequestStatus) +{ + SendReceive( EInitRepositorySession, iRequestStatus); +} + + + +EXPORT_C TInt RSettingManagement::SetSIDWRForSetting( TUint32 aSettingId, TUid aSecurityId) +{ + TPckg settingPack( aSettingId); + TPckg securityIdPack( aSecurityId); + return SendReceive( ESetSIDWRForSetting, TIpcArgs(&settingPack, &securityIdPack)); +} + +EXPORT_C TInt RSettingManagement::SetSIDWRForMask( TUint32 aCompareValue, TUint32 aMask, TUid aSecurityId) +{ + TPckg comparePack( aCompareValue); + TPckg maskPack( aMask); + TPckg securityIdPack( aSecurityId); + return SendReceive( ESetSIDWRForMask, TIpcArgs(&comparePack, &maskPack, &securityIdPack)); +} + +EXPORT_C TInt RSettingManagement::RestoreSetting( TUint32 aSettingId) +{ + TPckg settingPack( aSettingId); + return SendReceive( ERestoreSetting, TIpcArgs(&settingPack)); +} + +EXPORT_C TInt RSettingManagement::RestoreMask( TUint32 aCompareValue, TUint32 aMask) +{ + TPckg comparePack( aCompareValue); + TPckg maskPack( aMask);; + return SendReceive( ERestoreMask, TIpcArgs(&comparePack, &maskPack)); +} + +EXPORT_C TInt RSettingManagement::AddSIDWRForDefaults( TUid aSecurityId) +{ + TPckg securityIdPack( aSecurityId); + return SendReceive( EAddSIDWRForDefaults, TIpcArgs(&securityIdPack)); +} + +EXPORT_C TInt RSettingManagement::RestoreDefaults() +{ + return SendReceive( ERestoreDefaults, TIpcArgs()); +} + +EXPORT_C TInt RSettingManagement::Flush() +{ + return SendReceive( EFlushRepository, TIpcArgs()); +} + + +EXPORT_C TInt RSettingManagement::SetSIDWRForRange( TUint32 aRangeStart, TUint32 aRangeEnd, TUid aSecurityId) +{ + TPckg rangeStartPack( aRangeStart); + TPckg rangeEndPack( aRangeEnd); + TPckg securityIdPack( aSecurityId); + return SendReceive( ESetSIDWRForRange, TIpcArgs(& rangeStartPack, &rangeEndPack, &securityIdPack)); +} + + +EXPORT_C TInt RSettingManagement::RestoreRange( TUint32 aRangeStart, TUint32 aRangeEnd) +{ + TPckg rangeStartPack( aRangeStart); + TPckg rangeEndPack( aRangeEnd); + return SendReceive( ERestoreRange, TIpcArgs(& rangeStartPack, &rangeEndPack)); +} + + +EXPORT_C TInt RSettingManagement::RemoveBackupFlagForMask( TUint32 aCompareValue, TUint32 aMask) +{ + TPckg comparePack( aCompareValue); + TPckg maskPack( aMask);; + return SendReceive( ERemoveBackupFlagForMask, TIpcArgs(&comparePack, &maskPack)); +} + +EXPORT_C TInt RSettingManagement::RestoreBackupFlagForMask( TUint32 aCompareValue, TUint32 aMask) +{ + TPckg comparePack( aCompareValue); + TPckg maskPack( aMask);; + return SendReceive( ERestoreBackupFlagForMask, TIpcArgs(&comparePack, &maskPack)); +} + +EXPORT_C TInt RSettingManagement::RemoveBackupFlagForRange( TUint32 aRangeStart, TUint32 aRangeEnd) +{ + TPckg rangeStartPack( aRangeStart); + TPckg rangeEndPack( aRangeEnd); + return SendReceive( ERemoveBackupFlagForRange, TIpcArgs( &rangeStartPack, &rangeEndPack)); +} + +EXPORT_C TInt RSettingManagement::RestoreBackupFlagForRange( TUint32 aRangeStart, TUint32 aRangeEnd) +{ + TPckg rangeStartPack( aRangeStart); + TPckg rangeEndPack( aRangeEnd); + return SendReceive( ERestoreBackupFlagForRange, TIpcArgs( &rangeStartPack, &rangeEndPack)); +} + + +EXPORT_C TInt RSettingManagement::RemoveBackupFlagForDefaults() +{ + return SendReceive( ERemoveBackupFlagForDefaults, TIpcArgs()); +} + +EXPORT_C TInt RSettingManagement::RestoreBackupFlagForDefaults() +{ + return SendReceive( ERestoreBackupFlagForDefaults, TIpcArgs()); +} + +EXPORT_C TInt RAccessCheck::Open( TUid aRepositoryId, RCentRepTool &aServer) +{ + TPckg uidPack( aRepositoryId); + TInt err = CreateSubSession( aServer, ECreateCheckAccessSession, TIpcArgs( &uidPack, NULL)); + + return err; +} + +EXPORT_C void RAccessCheck::Close() +{ + RSubSessionBase::CloseSubSession(ECloseCheckAcceessSession); +} + + +EXPORT_C TInt RAccessCheck::CheckAccess( TUint32 aSettingId, TAccessType aAccessType, TBool& aAccessValue) +{ + TPckg idPack( aSettingId); + TPckg atPack( aAccessType); + TPckg boolPack( aAccessValue); + + return SendReceive( ECheckAccess, TIpcArgs( &idPack, &atPack, &boolPack)); +} + +