networkcontrol/ipupsplugins/test/te_ipups/src/te_ipups_ups_step.cpp
branchRCL_3
changeset 21 abbed5a4b42a
parent 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkcontrol/ipupsplugins/test/te_ipups/src/te_ipups_ups_step.cpp	Tue Aug 31 16:45:15 2010 +0300
@@ -0,0 +1,613 @@
+// Copyright (c) 2008-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
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+#include "te_ipups_ups_step.h"  
+#include "upstestnotifierproperties.h"
+#include <s32mem.h> 
+
+static TInt ThreadFunction(TAny *)
+	{
+	return KErrNone;
+	}
+	
+CIpUpsStep::~CIpUpsStep()
+/**
+ * Destructor
+ */
+	{  	
+	} // End of function
+
+
+CIpUpsStep::CIpUpsStep()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KIpUpsClientStep);
+	} // End of function
+
+
+TVerdict CIpUpsStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	TSecurityPolicy nullPolicy(ECapability_None);
+    TInt err;
+    
+    //Properties modified to be returned to test harness from test notifier
+    err = RProperty::Define(KUidPSUPSTestNotifCategory, KUnNotifyCount, KUnCountKeyType, nullPolicy, nullPolicy);
+    if (err != KErrAlreadyExists && err != KErrNone)
+    	{
+    	User::LeaveIfError(err);
+    	}
+    
+    err = RProperty::Define(KUidPSUPSTestNotifCategory, KUnNotifyValues, KUnNotifyValuesKeyType, nullPolicy, nullPolicy);
+    if (err != KErrAlreadyExists && err != KErrNone)
+    	{
+    	User::LeaveIfError(err);
+    	}
+    
+    //Properties test notifier requires from test harness about the button press and delay
+    err = RProperty::Define(KUidPSUPSTestNotifCategory, KUtButtonPress, KUtButtonPressKeyType, nullPolicy, nullPolicy);
+    if (err != KErrAlreadyExists && err != KErrNone)
+    	{
+    	User::LeaveIfError(err);
+    	}
+    
+    err = RProperty::Define(KUidPSUPSTestNotifCategory, KUtButtonPressDelay, KUtButtonPressDelayKeyType, nullPolicy, nullPolicy);
+    if (err != KErrAlreadyExists && err != KErrNone)
+    	{
+    	User::LeaveIfError(err);
+    	}
+    
+    //Get the testNotifier working mode, filemode or P&S mode
+    User::LeaveIfError(RProperty::Get(KUidPSUPSTestNotifCategory, KUtFileOverride, iTestNotifierMode));
+    
+    //Set the property to override working of testNotifier in P&S mode instead of filemode
+    User::LeaveIfError(RProperty::Set(KUidPSUPSTestNotifCategory, KUtFileOverride, KFileOverride));
+    
+    //Initialise optional data iNoOfAuthoriseCalls (should be '1' minimum).
+    iNoOfAuthoriseCalls = 1;
+    
+    //Initialise optional data iPromptTriggerCount (Initialising with '-1' means no check if user not specfied in INI file).
+    iPromptTriggerCount = -1;
+    
+    //Read data from INI file
+	GetHexFromConfig(ConfigSection(), KIpUpsServiceId, iServiceUID);
+	GetStringFromConfig(ConfigSection(),KIpUpsDestination, iDestination);
+	GetStringFromConfig(ConfigSection(),KIpUpsOpaqueData, iOpaqueData);
+	GetStringFromConfig(ConfigSection(),KIpUpsDialogOptionSelection, iDialogOption);
+	GetBoolFromConfig(ConfigSection(),KIpUpsPlatSecPass, iPlatSecPass);	
+	GetStringFromConfig(ConfigSection(),KIpUpsExpectedDecision, iExpectedUpsDecision);	
+	GetIntFromConfig(ConfigSection(),KIpUpsPromptTriggerCount, iPromptTriggerCount);
+    GetIntFromConfig(ConfigSection(),KIpUpsNoOfAuthoriseCalls, iNoOfAuthoriseCalls);    
+    GetBoolFromConfig(ConfigSection(),KIpUpsCancelPromptCall, iCancelPromptCall);
+    
+    GetBoolFromConfig(ConfigSection(),KIpUpsAlwaysOpenNewSession, iAlwaysOpenNewSession);
+        
+    GetBoolFromConfig(ConfigSection(),KIpUpsUseSameSubSession, iUseSameSubSession);
+    GetBoolFromConfig(ConfigSection(),KIpUpsUseSameSubSessionAfterClose, iUseSameSubSessionAfterClose);
+    GetBoolFromConfig(ConfigSection(),KIpUpsAlwaysOpenNewSubSession, iAlwaysOpenNewSubSession);
+    
+    //Keep the initial count of the notifier recorded, should be '0'
+    User::LeaveIfError(RProperty::Get(KUidPSUPSTestNotifCategory, KUnNotifyCount, iNotifyCount));
+    
+	SetTestStepResult(EPass);	
+	return TestStepResult();
+	} // End of function.
+
+
+TVerdict CIpUpsStep::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{	
+	UserPromptService::RUpsSession 		upsSession;
+    UserPromptService::RUpsSubsession 	upsSubSession[KMaxNoOfAuthoriseCalls];
+        
+    RThread dummyThread[KMaxNoOfAuthoriseCalls];
+    TRequestStatus threadStatus; 	
+ 	
+ 	TInt notifyCountBeforeTest = iNotifyCount;
+ 	TInt notifyCountAfterTest = 0;
+	
+	TServiceId serviceId = TUid::Uid(iServiceUID);
+	
+	TInt subSessionCntr = 0;
+	
+	//Repeat call to Authorise as specified in INI file (through NoOfAuthoriseCalls data)
+    for (TInt cntr=0; cntr<iNoOfAuthoriseCalls && cntr<KMaxNoOfAuthoriseCalls; cntr++)
+    	{
+    	if (upsSession.Handle() == KNullHandle)
+    		{
+    		User::LeaveIfError(upsSession.Connect());
+    		INFO_PRINTF1(_L("UPS Session Started."));
+    		}
+    	
+    	if (upsSubSession[subSessionCntr].SubSessionHandle() == KNullHandle)
+    		{
+    		//Create dummy thread with different names
+    		TBuf<32> dummyThreadName;
+    		dummyThreadName.Copy(_L("DummyThread_0123456789"));
+    		
+    		User::LeaveIfError(dummyThread[subSessionCntr].Create(dummyThreadName.Right(dummyThreadName.Length()-subSessionCntr), ThreadFunction, 4096, 4096, 4096, 0, EOwnerThread));
+    		
+			dummyThread[subSessionCntr].Rendezvous(threadStatus);
+			dummyThread[subSessionCntr].Resume();
+ 			User::WaitForRequest(threadStatus);
+ 			
+    		upsSubSession[subSessionCntr] = UserPromptService::RUpsSubsession();
+    		User::LeaveIfError(upsSubSession[subSessionCntr].Initialise(upsSession, dummyThread[subSessionCntr]));
+    		INFO_PRINTF1(_L("UPS SubSession Initialised."));
+    		}
+		
+		//Get the dialog option for this iteration (specified in the INI file through 
+	    //DialogOptionSelection data, separated using KIniFileDelimeter).
+		TBuf<32> dialogOption;
+		GetValueAt(cntr, iDialogOption, KIniFileDelimeter, dialogOption);
+		
+	    UserPromptService::TPromptResult promptResult;
+	    promptResult.iSelected = ButtonToOption(dialogOption);
+	    
+		TPckg<UserPromptService::TPromptResult> resultPckg(promptResult);
+		
+		//Set the Dialog Option selection by user (specifies through DialogOptionSelection data value in INI file).
+	    User::LeaveIfError(RProperty::Set(KUidPSUPSTestNotifCategory, KUtButtonPress, resultPckg));
+		User::LeaveIfError(RProperty::Set(KUidPSUPSTestNotifCategory, KUtButtonPressDelay, iCancelPromptCall?1:0));
+		
+		INFO_PRINTF2(_L("Dialog Option Selection ( %S )."), &dialogOption);
+		
+		//Get the Notify Count BEFORE call to Authorise
+		User::LeaveIfError(RProperty::Get(KUidPSUPSTestNotifCategory, KUnNotifyCount, notifyCountBeforeTest));
+		
+	    TUpsDecision upsDecision;
+	    TRequestStatus status;
+	    
+	    if ( iOpaqueData.Length() > 0 )
+	    	{	    	
+	    	HBufC8* converter = HBufC8::NewLC(iOpaqueData.Length());
+	    	converter->Des().Copy(iOpaqueData);	             
+	       	iOpaqueDataStored = converter->Ptr();
+	       	CleanupStack::PopAndDestroy(); //converter
+	       	
+	       	INFO_PRINTF1(_L("Opaque data present."));
+	    	upsSubSession[subSessionCntr].Authorise(iPlatSecPass, serviceId, iDestination, iOpaqueDataStored, upsDecision, status);
+	    	}
+	    else
+	    	{
+	    	INFO_PRINTF1(_L("Opaque data NOT present."));
+	    	upsSubSession[subSessionCntr].Authorise(iPlatSecPass, serviceId, iDestination, upsDecision, status);
+	    	}
+	    
+
+	    if (iCancelPromptCall)
+	    	{
+	    	upsSubSession[subSessionCntr].CancelPrompt();
+	    	INFO_PRINTF1(_L("CancelPrompt called on UPS SubSession."));
+	    	}
+	    
+	    User::WaitForRequest(status);
+	    
+	    SetTestStepError(status.Int());
+	    User::LeaveIfError(status.Int());
+	    
+	    //Get the Notify Count AFTER call to Authorise
+	    User::LeaveIfError(RProperty::Get(KUidPSUPSTestNotifCategory, KUnNotifyCount, notifyCountAfterTest));
+	    
+	    INFO_PRINTF3(_L("NotifyCount Before Authorise ( %d ) <> NotifyCount After Authorise ( %d )"), notifyCountBeforeTest, notifyCountAfterTest);
+	    
+	    if ( iExpectedUpsDecision.Length() > 0 )
+	    	{
+	    	//Get the expected UPS decision for this iteration (specified in the INI file through 
+	    	//ExpectedUpsDecision data, separated using KIniFileDelimeter).
+	    	TBuf<32> expectedUpsDecision;
+	    	GetValueAt(cntr, iExpectedUpsDecision, KIniFileDelimeter, expectedUpsDecision);
+	    	
+	    	TPtrC upsDecisionString = TUpsDecisionToString(upsDecision);
+	    	
+	    	INFO_PRINTF3(_L("UPS Decision Expected ( %S ) <> UPS Decision Returned ( %S )"), &expectedUpsDecision, &upsDecisionString);
+	        
+	    	//Compare the expected and returned UPS decision
+	    	TEST( expectedUpsDecision.Compare(TUpsDecisionToString(upsDecision)) == 0);
+	    	}
+	    
+		VerifyAndPrintPromptDataL();
+		
+		//Check what user requested to do with SubSession for further iterations (if any).
+		if ( iUseSameSubSession )
+			{
+			INFO_PRINTF2(_L("Using UPS SubSession ( %d )."), subSessionCntr);
+			}
+		if ( iUseSameSubSessionAfterClose || iAlwaysOpenNewSession )
+			{
+			upsSubSession[subSessionCntr].Close();
+			INFO_PRINTF2(_L("UPS SubSession Closed ( %d )."), subSessionCntr);
+			dummyThread[subSessionCntr].Close();
+			}
+		else if ( iAlwaysOpenNewSubSession )
+			{
+			++subSessionCntr;
+			}
+			
+		if ( iAlwaysOpenNewSession  )
+			{
+			upsSession.Close();
+			INFO_PRINTF1(_L("UPS Session Closed."));
+			}
+	    } //End - for loop
+     
+    
+    //As with multiple clients , its better not to try to synchronize the calls which change the notify count.
+    //When all the concurrent calls are done , check the count finally through test step notifycount.
+    if (iPromptTriggerCount >= 0)
+    	{
+    	TEST( notifyCountAfterTest == (iNotifyCount+iPromptTriggerCount) );
+    	}    
+    
+    //Ensure all sub sessions are closed
+    for (TInt cntr=0; cntr<subSessionCntr; cntr++)
+    	{
+    	if ( upsSubSession[cntr].SubSessionHandle() != KNullHandle )
+    		{
+    		INFO_PRINTF2(_L("UPS SubSession Closed ( %d )."), cntr);
+    		upsSubSession[cntr].Close();
+    		dummyThread[cntr].Close();
+    		}
+    	}
+    
+    //Ensure session is closed
+    if ( upsSession.Handle() != KNullHandle )
+    	{
+    	upsSession.Close();
+		INFO_PRINTF1(_L("UPS Session Closed."));
+    	}    
+	
+	return TestStepResult();
+	}  // End of function
+
+
+TVerdict CIpUpsStep::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	//ReSet the property to specify working of testNotifier in P&S or filemode
+    User::LeaveIfError(RProperty::Set(KUidPSUPSTestNotifCategory, KUtFileOverride, iTestNotifierMode));
+    
+	return TestStepResult();
+	} // End of function.
+
+TBool CIpUpsStep::VerifyAndPrintPromptDataL()
+/**
+ * @return - TBool - ETrue of prompt data returned matched the data expected as specified in INI file, else EFalse.
+ * 
+ */
+	{
+	//Get the Prompt Information
+	const TInt KMaxPromptDataLenght = 512;
+    HBufC8* buf=HBufC8::NewLC(KMaxPromptDataLenght);
+    TPtr8 bufPtr(buf->Des());
+
+	User::LeaveIfError(RProperty::Get(KUidPSUPSTestNotifCategory, KUnNotifyValues, bufPtr));
+	
+	RDesReadStream promptDataStream(bufPtr);
+		
+	iPromptData = UserPromptService::CPromptData::NewL();
+	CleanupStack::PushL(iPromptData);
+	iPromptData->InternalizeL(promptDataStream);
+	
+	INFO_PRINTF2(_L("Client Name ( %S )"), &iPromptData->iClientName);
+	INFO_PRINTF2(_L("Vendor Name ( %S )"), &iPromptData->iVendorName);
+	INFO_PRINTF2(_L("Destination ( %S )"), &iPromptData->iDestination);	
+	INFO_PRINTF2(_L("ClientSid   ( %08x )"), iPromptData->iClientSid.iId);
+	INFO_PRINTF2(_L("ServerSid   ( %08x )"), iPromptData->iServerSid.iId);
+	INFO_PRINTF2(_L("ServiceId   ( %08x )"), iPromptData->iServiceId);
+	
+	TInt count = iPromptData->iDescriptions.Count();
+   	for (TInt cntr = 0; cntr < count; ++cntr)
+      {
+      INFO_PRINTF3(_L("Descriptions(%d) : %S "), cntr, iPromptData->iDescriptions[cntr]);
+      }	
+	
+	//Print Dialog Flags
+	TBuf<64> dialogFlags;
+	
+	if ( iPromptData->iFlags & UserPromptService::ETrustedClient )
+		{
+		dialogFlags.Append(_L(" TrustedClient "));
+		}
+	if ( iPromptData->iFlags & UserPromptService::EBuiltInApp )
+		{
+		dialogFlags.Append(_L(" BuiltInApp "));
+		}
+	INFO_PRINTF2(_L("DialogFlags Set to  ( %S )"), &dialogFlags);
+	
+	TPtrC expectedDialogOptions;
+	TBuf<64> bufOptions;
+	
+	GetStringFromConfig(ConfigSection(),KExpectedDialogOptions, iExpectedDialogOptions);
+	
+	if (iExpectedDialogOptions.Length() > 0)
+		{
+		INFO_PRINTF2(_L("Options Expected ( %S )"), &iExpectedDialogOptions);
+		
+		//Check if options presented are as expected		
+		TBool result = OptionsFlagToString(iPromptData->iOptions, bufOptions);		
+		TEST(result != EFalse);
+		}
+	else
+		{
+		OptionsFlagToString(iPromptData->iOptions, bufOptions, EFalse);
+		}
+	
+	INFO_PRINTF2(_L("Options Presented ( %S )"), &bufOptions);
+	
+	TEST(iPromptData->iServiceId.iUid == iServiceUID);
+	TEST(iPromptData->iDestination == iDestination);
+	
+	CleanupStack::PopAndDestroy(2); //buf, iPromptData
+	
+	return EFalse;
+	} // End of function.
+
+TBool CIpUpsStep::OptionsFlagToString(TUint aOptions, TDes& aOptionString, TBool aCheckAgainstExpectedOpt)
+/** OptionsFlagToString converts the dialog option(s) presented to string and check if the presented option
+ * 	is amongst the one which is expected(from INI file) or not if aCheckAgainstExpectedOpt is set to ETrue.
+ *
+ * @return - TBool - ETrue if presented options are the ones which are expected as specified in the INI file.
+ * 
+ */
+	{
+	_LIT(KOptionYes, "Yes");
+	_LIT(KOptionNo, "No");	
+	_LIT(KOptionSessionYes, "SessionYes");
+	_LIT(KOptionAlways, "Always");
+	_LIT(KOptionNever, "Never");
+	_LIT(KOptionSessionNo, "SessionNo");
+	
+	const TPtrC policyOptions[] = {KOptionYes(), KOptionNo(), KOptionSessionYes(), KOptionAlways(),
+									KOptionNever(), KOptionSessionNo()};
+		
+	TInt optionsCntr = 0;
+	TBool isOptionExpected = ETrue;
+		
+	aOptionString.Append(_L("-"));
+	
+	if (aOptions & UserPromptService::CPolicy::EYes)
+		{
+		aOptionString.Copy(policyOptions[optionsCntr]);
+		aOptionString.Append(_L("-"));
+		
+		if (aCheckAgainstExpectedOpt)
+			{
+			if (iExpectedDialogOptions.FindF(policyOptions[optionsCntr]) == KErrNotFound)
+				{
+				isOptionExpected = EFalse;
+				}
+			}
+		}
+	++optionsCntr;
+	
+	if (aOptions & UserPromptService::CPolicy::ENo)
+		{		
+		aOptionString.Append(policyOptions[optionsCntr]);
+		aOptionString.Append(_L("-"));
+		
+		if (aCheckAgainstExpectedOpt)
+			{
+			if (iExpectedDialogOptions.FindF(policyOptions[optionsCntr]) == KErrNotFound)
+				{
+				isOptionExpected = EFalse;
+				}
+			}
+		}
+	++optionsCntr;
+	
+	if (aOptions & UserPromptService::CPolicy::ESessionYes)
+		{		
+		aOptionString.Append(policyOptions[optionsCntr]);
+		aOptionString.Append(_L("-"));
+		
+		if (aCheckAgainstExpectedOpt)
+			{
+			if (iExpectedDialogOptions.FindF(policyOptions[optionsCntr]) == KErrNotFound)
+				{
+				isOptionExpected = EFalse;
+				}
+			}
+		}
+	++optionsCntr;
+	
+	if (aOptions & UserPromptService::CPolicy::EAlways)
+		{		
+		aOptionString.Append(policyOptions[optionsCntr]);
+		aOptionString.Append(_L("-"));
+		
+		if (aCheckAgainstExpectedOpt)
+			{
+			if (iExpectedDialogOptions.FindF(policyOptions[optionsCntr]) == KErrNotFound)
+				{
+				isOptionExpected = EFalse;
+				}
+			}
+		}
+	++optionsCntr;
+	
+	if (aOptions & UserPromptService::CPolicy::ENever)
+		{		
+		aOptionString.Append(policyOptions[optionsCntr]);
+		aOptionString.Append(_L("-"));
+		
+		if (aCheckAgainstExpectedOpt)
+			{
+			if (iExpectedDialogOptions.FindF(policyOptions[optionsCntr]) == KErrNotFound)
+				{
+				isOptionExpected = EFalse;
+				}
+			}
+		}
+	++optionsCntr;
+	
+	if (aOptions & UserPromptService::CPolicy::ESessionNo)
+		{		
+		aOptionString.Append(policyOptions[optionsCntr]);
+		aOptionString.Append(_L("-"));
+		
+		if (aCheckAgainstExpectedOpt)
+			{
+			if (iExpectedDialogOptions.FindF(policyOptions[optionsCntr]) == KErrNotFound)
+				{
+				isOptionExpected = EFalse;
+				}
+			}
+		}
+		
+	return isOptionExpected;
+	} // End of function.
+
+/** GetValueAt provides the value of data at a specific index (specified by aPos)
+*	String containing the values is specified thorugh aArrayString and multiple values 
+*	are separated by delimeter aDelimeter.
+*	aValue is returned. 
+*/
+void CIpUpsStep::GetValueAt(const TInt aPos, const TPtrC& aArrayString, const TChar aDelimeter, TDes& aValue)
+	{
+	TInt posCntr=0;	
+	TInt itemCntr = -1;	
+	
+	//Initialise it with blank string to avoid any previous copies
+	aValue.Copy(_L(""));
+	
+	while (posCntr < aArrayString.Length() && itemCntr != aPos)
+		{
+		if (aArrayString[posCntr] != aDelimeter)
+			{
+			aValue.Append(aArrayString[posCntr]);
+			}
+		else
+			{
+			++itemCntr;
+			//Is this the item we are looking for, if not, make space to next one
+			if (itemCntr != aPos)
+				{
+				aValue.Copy(_L(""));
+				}
+			}
+		++posCntr;
+		}	
+	}
+
+/* TUpsDecisionToString converts TUpsDecision to string.
+*/
+TPtrC CIpUpsStep::TUpsDecisionToString(TUpsDecision aDecision)
+	{
+	if(aDecision == EUpsDecYes)
+		{
+		return _L("Yes");
+		}
+	else if(aDecision == EUpsDecNo)
+		{
+		return _L("No");
+		}
+	else if(aDecision == EUpsDecSessionYes)
+		{
+		return _L("SessionYes");
+		}
+	else if(aDecision == EUpsDecSessionNo)
+		{
+		return _L("SessionNo");
+		}
+	else 
+		{
+		ERR_PRINTF1(_L("Invalid UPS Descision, returning No by default."));
+		return _L("No");
+		}
+	} // End of function.
+
+/* TUpsDecisionFromString converts string value to TUpsDecision.
+*/
+TUpsDecision CIpUpsStep::TUpsDecisionFromString(const TPtrC& aDecision)
+	{
+	if(aDecision.CompareF(_L("Yes"))==0)
+		{
+		return EUpsDecYes;
+		}
+	else if(aDecision.CompareF(_L("No"))==0)
+		{
+		return EUpsDecNo;
+		}
+	else if(aDecision.CompareF(_L("SessionYes"))==0)
+		{
+		return EUpsDecSessionYes;
+		}
+	else if(aDecision.CompareF(_L("SessionNo"))==0)
+		{
+		return EUpsDecSessionNo;
+		}
+	else 
+		{
+		ERR_PRINTF1(_L("Invalid UPS Descision, returning No by default."));
+		return EUpsDecNo;
+		}
+	} // End of function.
+
+/* ButtonToOption converts string value of button presented to CPolicy::TOptions.
+*/
+UserPromptService::CPolicy::TOptions CIpUpsStep::ButtonToOption(const TPtrC& aButton)
+	{
+	if(aButton.CompareF(_L("Yes"))==0)
+		{
+		return UserPromptService::CPolicy::EYes;
+		}
+	else if(aButton.CompareF(_L("No"))==0)
+		{
+		return UserPromptService::CPolicy::ENo;
+		}
+	else if(aButton.CompareF(_L("Session"))==0)
+		{
+		return UserPromptService::CPolicy::ESession;
+		}
+	else if(aButton.CompareF(_L("SessionYes"))==0)
+		{
+		return UserPromptService::CPolicy::ESessionYes;
+		}
+	else if(aButton.CompareF(_L("Always"))==0)
+		{
+		return UserPromptService::CPolicy::EAlways;
+		}	
+	else if(aButton.CompareF(_L("Never"))==0)
+		{
+		return UserPromptService::CPolicy::ENever;
+		}
+	else if(aButton.CompareF(_L("SessionNo"))==0)
+		{
+		return UserPromptService::CPolicy::ESessionNo;
+		}	
+	else 
+		{
+		ERR_PRINTF1(_L("Invalid Button Option, returning Policy Option No by default."));
+		return UserPromptService::CPolicy::ENo;
+		}				
+	}  // End of function.