--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatereferenceplugins/clayer/src/rfstatusswppolicy.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,156 @@
+// 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:
+//
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#include "rfstatusswppolicy.h"
+#include "ssmdebug.h"
+#include "clayerpanic.h"
+#include <ssm/ssmcommandlistresourcereader.h>
+#include <ssm/ssmpatchableconstants.h>
+#include <ssm/clayerswp.hrh>
+
+
+//Path for RF status SwP command list resource file
+_LIT(KRFStatusSwPCmdListPath, "z:\\private\\2000d75b\\rfstatusswpcmdlist\\");
+
+_LIT_SECURE_ID(KSsmSecureId , 0x2000D75B);
+
+EXPORT_C MSsmSwpPolicy* CRFStatusSwPPolicy ::NewL()
+ {
+ CRFStatusSwPPolicy * self = new (ELeave) CRFStatusSwPPolicy ;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CRFStatusSwPPolicy ::CRFStatusSwPPolicy ()
+ {
+ }
+
+CRFStatusSwPPolicy ::~CRFStatusSwPPolicy ()
+ {
+ iFs.Close();
+ delete iCommandListResourceReader;
+ }
+
+void CRFStatusSwPPolicy ::ConstructL()
+ {
+ User::LeaveIfError(iFs.Connect());
+ // create resource reader
+ iCommandListResourceReader = CSsmCommandListResourceReader::NewL(iFs, KRFStatusSwPCmdListPath(), *this);
+ }
+
+void CRFStatusSwPPolicy ::Initialize(TRequestStatus& aStatus)
+ {
+ __ASSERT_DEBUG(iCommandListResourceReader, CLAYER_PANIC(ECLayerInvalidResourceReader));
+
+ //Initialise the command list resource reader.
+ iCommandListResourceReader->Initialise(aStatus);
+ }
+
+void CRFStatusSwPPolicy ::InitializeCancel()
+ {
+ __ASSERT_DEBUG(iCommandListResourceReader, CLAYER_PANIC(ECLayerInvalidResourceReader));
+
+ iCommandListResourceReader->InitialiseCancel();
+ }
+
+void CRFStatusSwPPolicy ::Release()
+ {
+ delete this;
+ }
+
+MSsmSwpPolicy::TResponse CRFStatusSwPPolicy ::TransitionAllowed(const TSsmSwp& aSwp, const RMessagePtr2& aMessage)
+ {
+ MSsmSwpPolicy::TResponse isTransitionAllowed = ENotAllowed;
+ TBool hasCapability = aMessage.HasCapability(ECapabilityWriteDeviceData, ECapabilityPowerMgmt,
+ __PLATSEC_DIAGNOSTIC_STRING( "Platsec violation, RF status SwP transition" ));
+
+ if(hasCapability)
+ {
+ if (IsSsmGracefulOffline())
+ {
+ //RF ON/OFF is implemented as a substate in Normal instead of SwP for graceful offline notification.
+ //Hence the SwP RF OFF/RF ON is restricted for the request which has SSM SID. Only BtSap SwP transition is
+ //allowed to any client with appropriate capability.
+ if (aMessage.SecureId() == KSsmSecureId || aSwp.Value() == ESsmBtSap )
+ {
+ //Allow SwP change only if request has SsmSecureId or the SwP request for BtSap
+ isTransitionAllowed = EAllowed;
+ }
+ }
+ else
+ {
+ isTransitionAllowed = EAllowed;
+ }
+ }
+ return isTransitionAllowed;
+ }
+
+void CRFStatusSwPPolicy ::PrepareCommandList(const TSsmSwp& aSwp, TRequestStatus& aStatus)
+ {
+ __ASSERT_DEBUG(iCommandListResourceReader, CLAYER_PANIC(ECLayerInvalidResourceReader));
+
+ iCommandListResourceReader->PrepareCommandList(aSwp.Value(), aSwp, aStatus);
+ }
+
+void CRFStatusSwPPolicy ::PrepareCommandListCancel()
+ {
+ __ASSERT_DEBUG(iCommandListResourceReader, CLAYER_PANIC(ECLayerInvalidResourceReader));
+ iCommandListResourceReader->PrepareCommandListCancel();
+ }
+
+CSsmCommandList* CRFStatusSwPPolicy ::CommandList()
+ {
+ __ASSERT_DEBUG(iCommandListResourceReader, CLAYER_PANIC(ECLayerInvalidResourceReader));
+ return iCommandListResourceReader->GetCommandList();
+ }
+
+void CRFStatusSwPPolicy ::HandleCleReturnValue(const TSsmSwp& aSwp, TInt aError, TInt /*aSeverity*/, TRequestStatus& aStatus)
+ {
+ TRequestStatus* rs = &aStatus;
+ (void)aSwp;
+ (void)aError;
+
+#if defined(_DEBUG)
+ if(KErrNone != aError)
+ {
+ DEBUGPRINT3A("ERROR: Request SwP change for RF status (SwP key %d) completed with error %d", aSwp.Key(), aError);
+ }
+ //Complete the status with the error which inturn panics SSM server
+ User::RequestComplete(rs, aError);
+#else
+ //Completing the status with KErrNone to avoid panic in SSM server
+ User::RequestComplete(rs, KErrNone);
+#endif
+ }
+
+
+void CRFStatusSwPPolicy ::HandleCleReturnValueCancel()
+ {
+ // Nothing to do as HandleCleReturnValue always completes immediately
+ }
+
+TBool CRFStatusSwPPolicy ::ConditionalCommandAllowedL(CResourceFile& /*aResourceFile*/, TInt /*aResourceId*/)
+ {
+ __ASSERT_DEBUG(iCommandListResourceReader, CLAYER_PANIC(ECLayerConditionalInfoNotImplemented));
+ return EFalse;
+ }