sysstatemgmt/systemstateplugins/adptplugin/src/miscadaptationref.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstateplugins/adptplugin/src/miscadaptationref.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,405 @@
+// Copyright (c) 2007-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:
+//
+
+#include "miscadaptationref.h"
+#include <ssm/startupadaptationcommands.h>
+
+_LIT(KTestCmdSecurityCheckTestFile, "c:\\cmdsecuritychecktest\\pinchecksecuritycaseno.txt");
+
+/**
+ Function to create new Misc Adaptation Plugin. Used for a collection of activities.
+
+ @return	new instance of MEmergencyCallRfAdaptation for Miscellaneous Adaptations.
+
+ @internalComponent
+ @released
+*/
+EXPORT_C MMiscAdaptation* CreateMiscAdaptationRefL()
+	{
+	CMiscAdaptationRef* miscAdaptationRef = CMiscAdaptationRef::NewL();
+	return (static_cast<MMiscAdaptation*>(miscAdaptationRef));
+	}
+
+CMiscAdaptationRef* CMiscAdaptationRef::NewL()
+	{
+	CMiscAdaptationRef* self = new(ELeave) CMiscAdaptationRef;
+	self->ConstructL();
+	return self;
+	}
+
+CMiscAdaptationRef::~CMiscAdaptationRef()
+	{
+	iFs.Close();
+	}
+
+CMiscAdaptationRef::CMiscAdaptationRef()
+	{
+	}
+
+void CMiscAdaptationRef::ConstructL()
+	{
+	iTestCaseNum = 1;
+	User::LeaveIfError(iFs.Connect());
+	}
+
+/** 
+ Deletes and frees memory allocated.
+*/
+void CMiscAdaptationRef::Release()
+	{
+	delete this;
+	}
+
+/**
+ Get the start-up mode from the Cooperating System.
+ Reference implementation completes with KErrNone as a cooperating system does not exist on Techview/H4 hrp.
+
+ @param aModePckg should contain start-up of the Cooperating System on completion
+ @param aStatus to complete when the operation has finished
+
+ @see TRequestStatus
+*/
+void CMiscAdaptationRef::GetGlobalStartupMode(TDes8& /*aModePckg*/, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+/**
+ Prepare language codes stored in the SIM in preferred language lists. The next call should be GetSimLanguagesL()
+ Reference implementation completes with KErrNotSupported as SIM support is not available on Techview/H4 hrp.
+
+ @param aPriority priority for which the language lists need to be prepared
+ @param aSizePckg on return contains the size of the buffer, which a client should allocate and pass as one of the parameters (TInt aCount) to GetSimLanguagesL()
+ @param aStatus to complete when the operation has finished
+
+ @see TSsmLanguageListPriority
+ @see TRequestStatus
+ @see GetSimLanguagesL
+*/
+void CMiscAdaptationRef::PrepareSimLanguages(TSsmLanguageListPriority /*aPriority*/, TDes8& /*aSizePckg*/, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	TRequestStatus* status = &aStatus;
+	// No support for SIM on H4hrp/Techview.
+	User::RequestComplete(status, KErrNotSupported);
+	}
+
+/**
+ Get language codes stored in the SIM in preferred language lists. PrepareSimLanguages() call should precede this call.
+ Reference implementation completes with KErrNotSupported as SIM support is not available on Techview/H4 hrp.
+
+ @param aBuf should contain the language lists on completion
+ @param aCount to contain the count of the languages
+
+ @see PrepareSimLanguages
+*/
+void CMiscAdaptationRef::GetSimLanguagesL(CBufBase* /*aBuf*/, TInt /*aCount*/)
+	{
+	User::Leave(KErrNotSupported);
+	}
+
+void CMiscAdaptationRef::GetHiddenReset(TDes8& /*aHiddenResetPckg*/, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	TRequestStatus* status = &aStatus;
+	// No support for Reset in HRP/Techview.
+	User::RequestComplete(status, KErrNotSupported);
+	}
+
+
+/**
+  Cancel the outstanding request. Reference implementation completes the requests immediately so there is nothing to Cancel.
+  On a device, Cancel() needs an implementation as the Request might be outstanding and it needs to be cancelled.
+*/
+void CMiscAdaptationRef::Cancel()
+	{
+	}
+
+/**
+ Request the next security state.
+ Techview/H4hrp does not support SIM operations so a reference implementation would always return 'KErrNotSupported'.
+ The function is modified to suit testing needs for PinCheck Security Command.
+ A real implementation is intended to differ a lot based on the runtime changes/events on the device.
+ 
+ Each switch case represents a PIN Check security plug-in functionality in different status are as follows..
+ 
+ EPINCHECK01 : SIM present and PIN1 required.
+ EPINCHECK02 : SIM present and rejected
+ EPINCHECK03 : SIM blocked PUK required
+ EPINCHECK04 : SIM locked security code required.
+ EPINCHECK05 : SIM locked security code required when sim lockRestrictionOn
+ EPINCHECK06 : SIM blocked and UPUK.
+ EPINCHECK07 : SIM blocked security code required when sim lockRestrictionOn
+ EPINCHECK08 : SIM present and PIN1 required and SimLock status is wrong
+ iTestCaseNum will be reset to 1 at EPINCHECK08 to test all above scenarios for wrong entered pin
+ 
+ @param aState next security state
+ @param aResponsePckg response to state change request on completion
+ @param aStatus to complete when the operation has finished
+
+ @see TRequestStatus
+*/
+void CMiscAdaptationRef::SecurityStateChange(TInt aState, TDes8& aResponsePckg, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	TRequestStatus* status = &aStatus;
+	StartupAdaptation::TSecurityStateInfo info = StartupAdaptation::EYes;
+	
+	//Read Test case number from the file 
+	TInt err = iFile.Open(iFs, KTestCmdSecurityCheckTestFile, EFileRead);
+	if (err == KErrNone)
+		{
+		TRAP(err,iTestCaseNum = iFile.ReadInt32L());
+		iFile.Close();
+		if(err)
+			{
+			RDebug::Printf("Error while reading tst case number from the file pinchecksecuritycaseno.txt");
+			User::RequestComplete(status, err);
+			return;
+			}
+		}	
+	switch(iTestCaseNum)
+		{
+		case EPINCHECK01:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::EPINRequired:
+				info = StartupAdaptation::EPIN1Required;
+				break;
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockOk;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;
+				break;	
+			default:
+				break;
+			}
+			break;
+		case EPINCHECK02:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::EYes;
+				break;
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;
+				break;	
+			default:
+			break;
+			}
+			break;
+		case EPINCHECK03:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::EPUK1Required;
+				break;	
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockOk;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;
+				break;	
+			default:
+				break;
+			}
+			break;
+		case EPINCHECK04:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::EPUK1Required;
+				break;	
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockOk;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;
+				break;	
+			default:
+				break;
+			}	
+			break;
+		case EPINCHECK05:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::EUPUKRequired;
+				break;	
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockRestrictionOn;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;
+				break;	
+			default:
+				break;	
+			}	
+			break;
+		case EPINCHECK06:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::EUPUKRequired;
+				break;	
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockRestrictionPending;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;	
+				break;	
+			default:
+				break;	
+			}
+			break;
+		case EPINCHECK07:
+			switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+            case StartupAdaptation::ESIMInvalid:
+                info = StartupAdaptation::ENo;
+                break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::EUPUKRequired;
+				break;	
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockRestricted;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;	
+				break;	
+			default:
+				break;	
+			}
+			break;
+		case EPINCHECK08:
+		switch(aState)
+			{
+			case StartupAdaptation::ESIMPresent:
+				info = StartupAdaptation::EYes;
+				break;
+			case StartupAdaptation::ESIMInvalid:
+			    info = StartupAdaptation::ENo;
+			    break;
+			case StartupAdaptation::ESIMRejected:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::ESIMBlocked:
+				info = StartupAdaptation::ENo;
+				break;
+			case StartupAdaptation::EPINRequired:
+				info = StartupAdaptation::EPIN1Required;
+				break;
+			case StartupAdaptation::ESIMLock:
+				info = StartupAdaptation::ESimLockOk;
+				break;
+			case StartupAdaptation::ESecurityCheckOK:
+				info = StartupAdaptation::EYes;	
+				break;	
+			case StartupAdaptation::ESecurityCheckFailed:
+				info = StartupAdaptation::EYes;	
+				break;	
+			default:
+				break;
+			}	
+			break;	
+		default:
+			break;
+		}
+	TPckgBuf<StartupAdaptation::TSecurityStateInfo> securityStateInfoResult(info);
+	aResponsePckg = securityStateInfoResult;	
+	User::RequestComplete(status, KErrNone);
+	}
+