securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp
changeset 0 164170e6151a
child 1 d5423fbb4f29
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,2249 @@
+/*
+* Copyright (c) 2002 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:  Provides api for handling security events.
+*
+*
+*/
+
+
+#include <aknnotedialog.h>
+#include <etelmm.h>
+#include <SecUi.rsg>
+#include <exterror.h>
+#include <textresolver.h>
+
+#ifdef __COVER_DISPLAY
+#include <aknmediatorfacade.h>
+#include <secondarydisplay/SecondaryDisplayStartupAPI.h>
+#endif //__COVER_DISPLAY
+
+#include <centralrepository.h> 
+#include <starterclient.h>     //used for RemoveSplashScreen
+#include <e32property.h>
+#include <PSVariables.h>   // Property values
+#include <coreapplicationuisdomainpskeys.h>
+#include <startupdomainpskeys.h>
+#include <uikon/eiksrvui.h>
+#include <settingsinternalcrkeys.h>
+#include <securityuisprivatepskeys.h>
+#include <AknNotiferAppServerApplication.h>
+
+#include <SCPClient.h>
+#include <securitynotification.h>
+#include "secui.hrh"
+#include "secuisecurityhandler.h"
+#include "secuicodequerydialog.h"
+#include "secuisecuritysettings.h"
+#include "SecUiWait.h"
+#include "SecUiLockObserver.h"
+#ifdef RD_REMOTELOCK
+#include <RemoteLockSettings.h>
+#endif // RD_REMOTELOCK
+#include <StringLoader.h>
+#include <featmgr.h>
+//  LOCAL CONSTANTS AND MACROS
+const TInt KMaxNumberOfPUKAttempts(10);
+const TInt KMaxNumberOfPINAttempts(3);
+const TInt KLastRemainingInputAttempt(1);
+
+const TInt KTriesToConnectServer( 2 );
+const TInt KTimeBeforeRetryingRequest( 50000 );
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ----------------------------------------------------------
+// CSecurityHandler::CSecurityHandler()
+// C++ constructor
+// ----------------------------------------------------------
+//
+EXPORT_C CSecurityHandler::CSecurityHandler(RMobilePhone& aPhone):
+        iPhone(aPhone), iQueryCanceled(ETrue), iSecurityDlg(NULL), iNoteDlg(NULL) 
+    {
+        TInt result = iCustomPhone.Open(aPhone);
+        TRAP_IGNORE( FeatureManager::InitializeLibL() ); //Shouldn't this panic if FM does not initialise??
+    }
+
+//
+// ----------------------------------------------------------
+// CSecurityHandler::~CSecurityHandler()
+// Destructor
+// ----------------------------------------------------------
+//
+EXPORT_C CSecurityHandler::~CSecurityHandler()
+    {
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityHandler::~CSecurityHandler()"));
+    #endif
+    if ( iDestroyedPtr )
+        {
+        *iDestroyedPtr = ETrue;
+        iDestroyedPtr = NULL;
+        }
+    CancelSecCodeQuery();
+    iCustomPhone.Close();
+    FeatureManager::UnInitializeLib();
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::HandleEventL()
+// Handles different security events
+// ----------------------------------------------------------
+//
+EXPORT_C void CSecurityHandler::HandleEventL(
+    RMobilePhone::TMobilePhoneSecurityEvent aEvent )
+    {
+    TInt result = KErrNone;
+    HandleEventL( aEvent, result );
+    }
+
+//
+// ----------------------------------------------------------
+// CSecurityHandler::HandleEventL()
+// Handles different security events
+// ----------------------------------------------------------
+//
+EXPORT_C void CSecurityHandler::HandleEventL(
+    RMobilePhone::TMobilePhoneSecurityEvent aEvent,
+    TBool aStartup, TInt& aResult )
+    {
+    iStartup = aStartup;
+    HandleEventL( aEvent, aResult );
+    }
+    
+//
+// ----------------------------------------------------------
+// CSecurityHandler::HandleEventL()
+// Handles different security events
+// ----------------------------------------------------------
+//
+EXPORT_C void CSecurityHandler::HandleEventL(
+    RMobilePhone::TMobilePhoneSecurityEvent aEvent, TInt& aResult )
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL()"));
+    RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL() EVENT: %d"), aEvent);
+    #endif
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+ 
+    switch(aEvent)
+            {
+            case RMobilePhone::EPin1Required:
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL() Pin1Required"));
+                #endif
+                aResult = Pin1RequiredL();
+                break;
+            case RMobilePhone::EPuk1Required:
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL() PUK1Required"));
+                #endif
+                ((CAknNotifierAppServerAppUi*)(CEikonEnv::Static())->EikAppUi())->SuppressAppSwitching(ETrue);
+                TRAPD(err,aResult = Puk1RequiredL());
+                ((CAknNotifierAppServerAppUi*)(CEikonEnv::Static())->EikAppUi())->SuppressAppSwitching(EFalse);
+                User::LeaveIfError(err);
+                break;
+            case RMobilePhone::EPin2Required:
+                Pin2RequiredL();
+                break;
+            case RMobilePhone::EPuk2Required:
+                Puk2RequiredL();        
+                break;
+            case RMobilePhone::EUniversalPinRequired:
+                if(wcdmaSupported || upinSupported)
+                   {
+                       aResult = UPinRequiredL();
+                   }
+                else
+                    aResult = KErrNotSupported;
+                break;
+            case RMobilePhone::EUniversalPukRequired:
+                if(wcdmaSupported || upinSupported)
+                   {
+                       aResult = UPukRequiredL();
+                   }
+                else
+                    aResult = KErrNotSupported;
+                break;
+            case RMobilePhone::EPhonePasswordRequired:
+                aResult = PassPhraseRequiredL();
+                break;
+            case RMobilePhone::EICCTerminated:
+                SimLockEventL();
+                break;
+            default:
+                break;
+            }
+    #if defined(_DEBUG)
+    RDebug::Print( _L( "CSecurityHandler::HandleEventL() returning %d." ), aResult );
+    #endif
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::AskSecCodeL()
+// For asking security code e.g in settings
+// ----------------------------------------------------------
+//
+EXPORT_C TBool CSecurityHandler::AskSecCodeL()
+    {        
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeL()"));
+    #endif
+    // Destructor sets thisDestroyed to ETrue
+    TBool thisDestroyed( EFalse );
+    iDestroyedPtr = &thisDestroyed;
+    
+    iQueryCanceled = EFalse;
+    RMobilePhone::TMobilePassword password;
+    RMobilePhone::TMobilePassword required_fourth;
+        
+    TInt ret = KErrNone;
+    TInt err = KErrNone;
+    TInt status = KErrNone;
+    if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    		FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+    {
+        // Connect to the SCP server, and request the code query
+        RSCPClient scpClient;
+        User::LeaveIfError( scpClient.Connect() );
+        CleanupClosePushL( scpClient );      
+        status = scpClient.SecCodeQuery( password, 
+                                      RSCPClient::SCP_OK_CANCEL,
+                                      EFalse,
+                                      0 );         
+                                              
+        if ( status != KErrCancel )
+            {
+            // Set this "true" to indicate that the input wasn't cancelled
+            ret = ETrue;
+            }
+        else
+            {
+            ret = EFalse;
+            }
+        
+        CleanupStack::PopAndDestroy(); //scpClient                       
+  }
+  else
+  {
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+    #ifdef __COVER_DISPLAY
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode);// adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY
+	    CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+		CleanupStack::PushL(deviceLockStatusObserver);
+		err =KErrNone;
+	    TRAP(err,ret = iSecurityDlg->ExecuteLD(R_SECURITY_QUERY));
+		CleanupStack::PopAndDestroy(deviceLockStatusObserver);
+  }
+    
+    // check if CSecurityHandler has been "killed"
+    if ( thisDestroyed )
+        {
+        return EFalse;
+        }
+
+    iDestroyedPtr = NULL;
+    iSecurityDlg = NULL;
+
+    if (err != KErrNone)
+        {
+        User::Leave(err);
+        }
+
+    if (ret)
+        {
+        while (!iQueryCanceled)
+            {
+	           if (!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+		           {           
+		                RMobilePhone::TMobilePhoneSecurityCode secCodeType;
+		                secCodeType = RMobilePhone::ESecurityCodePhonePassword;
+		                CWait* wait = CWait::NewL();
+		                iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
+		                status = wait->WaitForRequestL();
+		                delete wait;
+		
+		           }
+            
+            switch(status)
+                {        
+                case KErrNone:
+                    {
+                    if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    										!(FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements)))
+    								{
+                        RSCPClient scpClient;
+                        User::LeaveIfError( scpClient.Connect() );
+                        CleanupClosePushL( scpClient );
+
+                        TSCPSecCode newCode;
+                        newCode.Copy( password );
+                        scpClient.StoreCode( newCode );
+
+                        CleanupStack::PopAndDestroy(); //scpClient  
+                  	}
+                            	
+                    iQueryCanceled = ETrue;
+                    return ETrue;
+                    }                    
+                case KErrGsmSSPasswordAttemptsViolation:
+                case KErrLocked:
+                    {
+                    iDestroyedPtr = &thisDestroyed;
+                    // security code blocked! 
+                    iNoteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNoteDlg));
+                    iNoteDlg->SetTimeout(CAknNoteDialog::ELongTimeout);
+                    iNoteDlg->SetTone(CAknNoteDialog::EErrorTone);
+                    err =KErrNone;
+                    TRAP(err,iNoteDlg->ExecuteLD(R_SEC_BLOCKED));
+                    
+                    // check if CSecurityHandler has been "killed"
+                    if ( thisDestroyed )
+                        {
+                        return EFalse;
+                        }
+                    
+                    iDestroyedPtr = NULL;
+                    iNoteDlg = NULL;
+
+                    if (err != KErrNone)
+                        {
+                        User::Leave(err);
+                        }
+                    break;
+                    }
+                case KErrGsm0707IncorrectPassword:
+                case KErrAccessDenied:
+                    {    
+                    iDestroyedPtr = &thisDestroyed;
+                    // code was entered erroneusly
+                    iNoteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNoteDlg));
+                    iNoteDlg->SetTimeout(CAknNoteDialog::ELongTimeout);
+                    iNoteDlg->SetTone(CAknNoteDialog::EErrorTone);
+                    err =KErrNone;
+                    TRAP(err,iNoteDlg->ExecuteLD(R_CODE_ERROR));    
+                    
+                    // check if CSecurityHandler has been "killed"
+                    if ( thisDestroyed )
+                        {
+                        return EFalse;
+                        }
+                    
+                    iDestroyedPtr = NULL;
+                    iNoteDlg = NULL;
+                    
+                    if (err != KErrNone)
+                        {
+                        User::Leave(err);
+                        }
+                    break;
+                    }    
+                default:
+                    {
+                    iDestroyedPtr = &thisDestroyed;
+                    err =KErrNone;
+                    TRAP(err,ShowGenericErrorNoteL(status));
+                                        
+                    // check if CSecurityHandler has been "killed"
+                    if ( thisDestroyed )
+                        {
+                        return EFalse;
+                        }
+                    
+                    iDestroyedPtr = NULL;
+                    iNoteDlg = NULL;
+                    
+                    if (err != KErrNone)
+                        {
+                        User::Leave(err);
+                        }    
+                    break;
+                    }
+                }     
+        
+            if (iQueryCanceled)
+                {
+                ret = EFalse;
+                break;
+                }    
+            
+            password = _L("");
+            iDestroyedPtr = &thisDestroyed;
+             if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    						FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))  
+    				{       
+                // Connect to the SCP server, and request the code query
+                RSCPClient scpClient;
+                User::LeaveIfError( scpClient.Connect() );
+                CleanupClosePushL( scpClient );
+                status = scpClient.SecCodeQuery( password, 
+                                      RSCPClient::SCP_OK_CANCEL,
+                                      EFalse,
+                                      0 ); 
+        
+                if ( status != KErrCancel )
+                    {
+                    // Set this "true" to indicate that the input wasn't cancelled
+                    ret = ETrue;
+                    }
+                else
+                    {
+                    ret = EFalse;
+                    }                                
+        
+                CleanupStack::PopAndDestroy(); //scpClient                              
+          }
+          else
+          {
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+            CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+						CleanupStack::PushL(deviceLockStatusObserver);
+						err =KErrNone;
+            TRAP(err,ret = iSecurityDlg->ExecuteLD(R_SECURITY_QUERY));         
+						CleanupStack::PopAndDestroy(deviceLockStatusObserver);
+          }
+            
+            // check if CSecurityHandler has been "killed"
+            if ( thisDestroyed )
+                {
+                return EFalse;
+                }
+    
+            iDestroyedPtr = NULL;
+            iSecurityDlg = NULL;
+            
+            if (err != KErrNone)
+                {
+                User::Leave(err);
+                }
+
+            if (!ret)
+                break;
+        } // while
+    }    // if
+
+    iQueryCanceled = ETrue;
+    return ret;
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::CancelSecCodeQuery()    
+// Cancels PIN2 and security code queries
+// ----------------------------------------------------------
+//
+EXPORT_C void CSecurityHandler::CancelSecCodeQuery()                
+    {
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::CancelSecCodeQuery()"));
+    #endif
+    if (!iQueryCanceled)
+        {
+        iQueryCanceled = ETrue;
+        if (iSecurityDlg != NULL)
+            {
+            delete iSecurityDlg;
+            }
+        if (iNoteDlg != NULL)
+            {
+            delete iNoteDlg;
+            }
+        iNoteDlg = NULL;
+        iSecurityDlg = NULL;
+        }
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::AskSecCodeInAutoLock()
+// for asking security code in autolock
+// ----------------------------------------------------------
+//
+EXPORT_C TBool CSecurityHandler::AskSecCodeInAutoLockL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    
+    #ifdef __WINS__
+    return ETrue;
+    #else
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL()"));
+    #endif
+    TInt res;
+    CWait* wait;
+        
+    RMobilePhone::TMobilePhoneLockSetting lockChange(RMobilePhone::ELockSetDisabled);
+    RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice;
+   
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() get autolock period"));
+    #endif
+
+    // get autolock period from Central Repository.
+    CRepository* repository = CRepository::NewL(KCRUidSecuritySettings);
+    TInt period = 0;
+    res = repository->Get(KSettingsAutoLockTime, period);
+    delete repository;
+
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() autolock period:%d"), res);
+    #endif
+    if (res == KErrNone)
+        {
+        // disable autolock in Domestic OS side too if autolock period is 0.
+        if (period == 0 )
+            {
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() Call SetLockSetting"));
+            #endif
+
+#ifdef RD_REMOTELOCK
+
+            // If remote lock is enabled, don't disable the domestic OS device lock
+            // since that would render the RemoteLock useless.
+            // Instead just re-set the DOS lock to enabled which as a side effect
+            // requests the security code from the user.
+
+            TBool remoteLockStatus( EFalse );
+            CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
+
+            if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
+                {
+                if ( remoteLockStatus )
+                    {
+                    // Remote lock is enabled
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - RemoteLock is enabled: lockChange = RMobilePhone::ELockSetEnabled" ) );
+                    #endif // _DEBUG
+
+                    lockChange = RMobilePhone::ELockSetEnabled;
+                    }
+                else
+                    {
+                    // Remote lock is disabled
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - RemoteLock is disabled: lockChange = RMobilePhone::ELockSetDisabled" ) );
+                    #endif // _DEBUG
+
+                    lockChange = RMobilePhone::ELockSetDisabled;
+                    }
+                }
+            else
+                {
+                // Failed to get remote lock status
+                #ifdef _DEBUG
+                RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get RemoteLock status" ) );
+                #endif // _DEBUG
+                }
+
+            delete remoteLockSettings;
+            remoteLockSettings = NULL;
+
+#else // not defined RD_REMOTELOCK
+
+                lockChange = RMobilePhone::ELockSetDisabled;
+
+#endif // RD_REMOTELOCK
+
+                wait = CWait::NewL();
+                iPhone.SetLockSetting(wait->iStatus,lockType,lockChange);
+                res = wait->WaitForRequestL();
+                delete wait;
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() SetLockSetting RESULT:%d"), res);
+                #endif
+            }
+        else
+            {	// ask security code
+                #if defined(_DEBUG)
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() Ask sec code via notifier"));
+            	#endif
+                RNotifier codeQueryNotifier;
+                User::LeaveIfError(codeQueryNotifier.Connect());
+                CWait* wait = CWait::NewL();
+                CleanupStack::PushL(wait);
+                TInt queryResponse = 0;
+                TPckg<TInt> response(queryResponse);
+                TSecurityNotificationPckg params;
+                params().iEvent = static_cast<TInt>(RMobilePhone::EPhonePasswordRequired);
+                params().iStartup = EFalse;
+                #if defined(_DEBUG)
+    			RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() Start Notifier"));
+    			#endif
+                codeQueryNotifier.StartNotifierAndGetResponse(wait->iStatus, KSecurityNotifierUid,params, response);
+                res = wait->WaitForRequestL();
+                CleanupStack::PopAndDestroy(); // wait
+              	#if defined(_DEBUG)
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() results:"));
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() res:%d"), res);
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() queryResponse:%d"), queryResponse);
+            	#endif
+            	if(res == KErrNone)
+                	res = queryResponse;
+            }
+        }
+    else
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() KERRSOMETHING:Call SetLockSetting"));
+        #endif
+
+#ifdef RD_REMOTELOCK
+
+        // If remote lock is enabled, don't disable the domestic OS device lock
+        // since that would render the RemoteLock useless.
+        // Instead just re-set the DOS lock to enabled which as a side effect
+        // requests the security code from the user.
+
+        TBool remoteLockStatus( EFalse );
+        CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
+
+        if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
+            {
+            if ( remoteLockStatus )
+                {
+                // Remote lock is enabled
+                #ifdef _DEBUG
+                RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get AutoLock status and RemoteLock is enabled: lockChange = RMobilePhone::ELockSetEnabled" ) );
+                #endif // _DEBUG
+
+                lockChange = RMobilePhone::ELockSetEnabled;
+                }
+            else
+                {
+                // Remote lock is disabled
+                #ifdef _DEBUG
+                RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get AutoLock status and RemoteLock is disabled: lockChange = RMobilePhone::ELockSetDisabled" ) );
+                #endif // _DEBUG
+
+                lockChange = RMobilePhone::ELockSetDisabled;
+                }
+            }
+        else
+            {
+            // Failed to get remote lock status
+            #ifdef _DEBUG
+            RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get AutoLock status and failed to get RemoteLock status" ) );
+            #endif // _DEBUG
+            }
+
+        delete remoteLockSettings;
+        remoteLockSettings = NULL;
+
+#else // not defined RD_REMOTELOCK
+
+        // could not get the current autolock time... disable autolock in Domestic OS side.
+        lockChange = RMobilePhone::ELockSetDisabled;
+
+#endif // RD_REMOTELOCK
+
+        wait = CWait::NewL();
+        iPhone.SetLockSetting(wait->iStatus,lockType,lockChange);
+        res = wait->WaitForRequestL();
+        delete wait;
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() KES: SetLockSetting RESULT:%d"), res);
+        #endif
+        }
+        
+    switch (res)
+        {
+        case KErrNone:
+            {
+                return ETrue;
+            }
+
+        case KErrGsmSSPasswordAttemptsViolation:
+        case KErrLocked:
+        case KErrGsm0707IncorrectPassword:
+        case KErrAccessDenied:
+            {
+			return AskSecCodeInAutoLockL();
+            }
+        case KErrAbort:
+        case KErrCancel:
+            // user pressed "cancel"
+            return EFalse;
+        default:
+            {
+            return AskSecCodeInAutoLockL();
+            }
+        }
+#endif // WINS
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::PassPhraseRequired()    
+// Handles PassPhraseRequired event
+// ----------------------------------------------------------
+//
+TInt CSecurityHandler::PassPhraseRequiredL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()"));
+    #endif
+    TBool StartUp = iStartup;
+
+    RMobilePhone::TMobilePassword password;
+    RMobilePhone::TMobilePassword required_fourth;
+    TInt status;
+    TInt autolockState;
+    TInt err( KErrGeneral );
+    err = RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, autolockState);
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Autolock Status result: %d"), err);
+    #endif
+    if(!StartUp)
+        User::LeaveIfError( err );
+TBool isConditionSatisfied = EFalse;
+TInt tarmFlag=0;
+if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ))
+  	{		
+	TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag );    
+    
+    if ( tRet != KErrNone )
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL():\
+            Warning: failed to get TARM Admin Flag state"));
+        #endif
+        }
+    else
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL(): TARM flag: %d"), tarmFlag );
+        #endif
+        }       
+ 
+    if ( ( StartUp ) || ( tarmFlag & KSCPFlagResyncQuery ) )
+	    			isConditionSatisfied = ETrue;  
+		}
+		else
+		{
+		    if (StartUp)
+		    isConditionSatisfied = ETrue;  
+		}
+		if (isConditionSatisfied)
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Dialog 1"));
+        #endif
+        // Security code at bootup: No "cancel" softkey; Emergency calls enabled.
+      if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    			FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+    		{                   	    		    		    		
+            // Connect to the SCP server, and request the code query
+            RSCPClient scpClient;
+            User::LeaveIfError( scpClient.Connect() );
+            CleanupClosePushL( scpClient );
+                
+            status = scpClient.SecCodeQuery( password, 
+                                             RSCPClient::SCP_OK_ETEL,
+                                             ETrue,
+                                             KSCPEtelRequest );              
+            // Note that SecCodeQuery doesn't indicate the return value from the dialog            
+        
+            CleanupStack::PopAndDestroy();  //scpClient                                         
+      }  
+      else
+      {     
+        CCodeQueryDialog* securityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiCodeEtelReqest);
+        if(AknLayoutUtils::PenEnabled())
+            securityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            securityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        securityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(securityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    		{
+    		// … -  add data that cover ui is interested in
+    		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode); // adds int to additional data to be posted to cover ui
+    		covercl->BufStream().CommitL(); // no more data to send so commit buf
+     		}  
+        #endif //__COVER_DISPLAY
+        status = securityDlg->ExecuteLD(R_SECURITY_REQUEST_QUERY);
+			}
+        }
+    else if ( (autolockState > EAutolockOff))    
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Dialog 2"));
+        #endif
+            // Autolock is On. Security event came from user pressing "unlock".
+            // Emergency call support must be enabled and there must be a "cancel" softkey.
+         if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    				FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))     
+		    		{                                    
+     	    // Connect to the SCP server, and request the code query
+            RSCPClient scpClient;
+            User::LeaveIfError( scpClient.Connect() );
+            CleanupClosePushL( scpClient );
+              
+            status = scpClient.SecCodeQuery( password, 
+                                             RSCPClient::SCP_OK_CANCEL,
+                                             ETrue,
+                                             KSCPEtelRequest );
+            // Note that SecCodeQuery doesn't indicate the return value from the dialog   
+        
+            CleanupStack::PopAndDestroy(); //scpClient
+		    		}
+			    else
+			    {
+        CCodeQueryDialog* securityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+        if(AknLayoutUtils::PenEnabled())
+            securityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            securityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        securityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(securityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+        #endif //__COVER_DISPLAY
+        status = securityDlg->ExecuteLD(R_SECURITY_QUERY);
+			     }
+        }
+    else    
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Dialog 3"));
+        #endif
+            // Code query due to a setting change; "Cancel" softkey active;
+            // no emergency call support.
+	        if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+	    			FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+	    		{
+     	    // Connect to the SCP server, and request the code query
+            RSCPClient scpClient;
+            User::LeaveIfError( scpClient.Connect() );
+            CleanupClosePushL( scpClient );
+              
+            status = scpClient.SecCodeQuery( password, 
+                                             RSCPClient::SCP_OK_CANCEL,
+                                             EFalse,
+                                             KSCPEtelRequest );            
+            // Note that SecCodeQuery doesn't indicate the return value from the dialog   
+        
+            CleanupStack::PopAndDestroy(); //scpClient
+			    }
+			    else
+			    {
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+        #endif //__COVER_DISPLAY
+        // read a flag to see whether the query is SecUi originated.
+        TInt secUiOriginatedQuery(ESecurityUIsETelAPIOriginated);
+        RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery);
+        CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+        CleanupStack::PushL(deviceLockStatusObserver);
+        CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+        CleanupStack::PushL(queryStatusObserver);
+        CSecUiLockObserver* callStatusObserver = NULL;
+        if(secUiOriginatedQuery == ESecurityUIsSystemLockOriginated)
+            {
+                callStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiCallStateObserver);
+                CleanupStack::PushL(callStatusObserver);
+            }
+        status = iSecurityDlg->ExecuteLD(R_SECURITY_QUERY);
+        
+        if(callStatusObserver == NULL)
+            CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+        else
+            CleanupStack::PopAndDestroy(3); //deviceLockStatusObserver, queryStatusObserver, callStatusObserver
+        iSecurityDlg = NULL;
+			      }
+        }
+TBool isCondition = EFalse;		
+if(!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+{
+    if (!status || (status == ESecUiEmergencyCall)  
+        || (status == EAknSoftkeyEmergencyCall) || (status == ESecUiDeviceLocked))
+    isCondition = ETrue;
+}
+else
+{
+    if  ( ( status == KErrCancel ) || (status == ESecUiEmergencyCall)  ||
+         (status == EAknSoftkeyEmergencyCall) || (status == ESecUiDeviceLocked))
+    isCondition = ETrue;
+}
+		if (isCondition)
+        {
+		#if defined(_DEBUG)
+		RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() DIALOG ERROR"));
+		#endif
+        if (!StartUp)
+            {
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() ABORT CALLED!!!!!!"));
+            #endif
+            iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePhonePassword);
+            }
+        return KErrCancel;
+        }
+
+    RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityCodePhonePassword;
+     CWait* wait = NULL;
+if(!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+{ 
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() VerifySecurityCode"));
+        #endif
+        wait = CWait::NewL();
+        iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
+        status = wait->WaitForRequestL();
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() VerifySecurityCode STATUS: %d"), status);
+        #endif
+        delete wait;
+  }
+  else
+  {
+		wait = NULL;
+  }
+    
+    TInt returnValue = status;
+    switch(status)
+        {        
+        case KErrNone:
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() KErrNone"));
+            #endif
+            // code approved 
+            CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
+        if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw))    
+        {
+                // Unset the admin flag if set
+                if ( tarmFlag & KSCPFlagResyncQuery )
+                    {
+                    TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag );
+                    
+                    if ( tRet == KErrNone )
+	                    {
+	                    tarmFlag &= ~KSCPFlagResyncQuery;
+	                    tRet = RProperty::Set( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag );
+	                    }
+	            
+	                if ( tRet != KErrNone )
+                        {
+                        #if defined(_DEBUG)
+                        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL():\
+                            FAILED to unset TARM Admin Flag"));
+                        #endif
+                        }                    
+                    }                    	            
+				        if(!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements)) 
+				        {           
+    			RSCPClient scpClient;
+                User::LeaveIfError( scpClient.Connect() );
+                CleanupClosePushL( scpClient );
+                TSCPSecCode newCode;
+                newCode.Copy( password );
+                scpClient.StoreCode( newCode );
+                CleanupStack::PopAndDestroy(); //scpClient
+                }
+
+          }
+        		
+            if (StartUp)
+                {
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; get autolock period."));
+                #endif
+
+                // get autolock period from Central Repository.
+                CRepository* repository = CRepository::NewL(KCRUidSecuritySettings);
+                TInt period = 0;
+                TInt res = repository->Get(KSettingsAutoLockTime, period);
+                delete repository;
+  
+     						_LIT_SECURITY_POLICY_PASS(KReadPolicy); 
+								_LIT_SECURITY_POLICY_C1(KWritePolicy, ECapabilityWriteDeviceData);
+    						RProperty::Define(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, RProperty::EInt, KReadPolicy, KWritePolicy);
+                RProperty::Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOff);
+                #if defined(_DEBUG)
+								RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() EAutolockOff")); 
+								#endif																
+
+                if (res == KErrNone)
+                    {
+                    // disable autolock in Domestic OS side too if autolock period is 0.
+                    if (period == 0 )
+                        {
+#ifdef RD_REMOTELOCK
+                        // If remote lock is enabled, don't disable the domestic OS device lock
+                        // since that would render the RemoteLock useless.
+
+                        TBool remoteLockStatus( EFalse );
+                        CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
+
+                        if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
+                            {
+                            if ( !remoteLockStatus )
+                                {
+                                // Remote lock is disabled
+                                #ifdef _DEBUG
+                                RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Autolock and RemoteLock are disabled -> disable DOS device lock" ) );
+                                #endif // _DEBUG
+
+                                // Disable DOS device lock setting
+                                wait = CWait::NewL();
+                                iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                                wait->WaitForRequestL();
+                                delete wait;
+                                }
+                            }
+                        else
+                            {
+                            // Failed to get remote lock status
+                            #ifdef _DEBUG
+                            RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Autolock is disabled, but failed to get RemoteLock status, so do nothing." ) );
+                            #endif // _DEBUG
+                            }
+
+                        delete remoteLockSettings;
+                        remoteLockSettings = NULL;
+
+#else // not defined RD_REMOTELOCK
+
+                        #if defined(_DEBUG)
+                        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; DisablePhoneLock."));
+                        #endif
+                        wait = CWait::NewL();
+                        iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                        wait->WaitForRequestL();
+                        #if defined(_DEBUG)
+                        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; DisablePhoneLock completed."));
+                        #endif
+                        delete wait;
+#endif // RD_REMOTELOCK
+                        }
+                    }
+                else
+                    {
+#ifdef RD_REMOTELOCK
+                    // If remote lock is enabled, don't disable the domestic OS device lock
+                    // since that would render the RemoteLock useless.
+
+                    TBool remoteLockStatus( EFalse );
+                    CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
+
+                    if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
+                        {
+                        if ( !remoteLockStatus )
+                            {
+                            // Remote lock is disabled
+                            #ifdef _DEBUG
+                            RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Failed to get Autolock period and RemoteLock is disabled -> disable DOS device lock" ) );
+                            #endif // _DEBUG
+
+                            wait = CWait::NewL();
+                            iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                            wait->WaitForRequestL();
+                            delete wait;
+                            }
+                        }
+                    else
+                        {
+                        // Failed to get remote lock status
+                        #ifdef _DEBUG
+                        RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Failed to get Autolock period and RemoteLock status, so do nothing." ) );
+                        #endif // _DEBUG
+                        }
+
+                    delete remoteLockSettings;
+                    remoteLockSettings = NULL;
+
+#else // not defined RD_REMOTELOCK
+
+                    #if defined(_DEBUG)
+                    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; Could not get autolock period."));
+                    #endif
+                    // could not get the current autolock time... disable autolock in Domestic OS side. 
+                    wait = CWait::NewL();
+                    iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                    wait->WaitForRequestL();
+                    #if defined(_DEBUG)
+                    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; NO AUTOLOCK PERIOD; DisablePhoneLock completed."));
+                    #endif
+                    delete wait;
+
+#endif // RD_REMOTELOCK
+                    }
+                
+                }
+
+            break;    
+        case KErrGsmSSPasswordAttemptsViolation:
+        case KErrLocked:
+            // security code blocked!
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() ErrGsmSSPasswordAttemptsViolation"));
+            #endif
+            CSecuritySettings::ShowResultNoteL(R_SEC_BLOCKED, CAknNoteDialog::EErrorTone);
+            break;
+        case KErrGsm0707IncorrectPassword:
+        case KErrAccessDenied:
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() KErrGsm0707IncorrectPassword"));
+            #endif
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            break;
+        default:
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() DEFAULT"));
+            #endif
+            CSecuritySettings::ShowErrorNoteL(status);
+            break;
+        }
+        
+    return returnValue;
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::Pin1Required()    
+// Handles Pin1Required event
+// ----------------------------------------------------------
+//
+TInt CSecurityHandler::Pin1RequiredL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    
+    RMobilePhone::TMobilePassword password;
+    RMobilePhone::TMobilePassword required_fourth;
+    RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityCodePin1;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
+    TBool StartUp = ETrue;   
+    TInt secUiOriginatedQuery(ESecurityUIsSecUIOriginatedUninitialized);
+    TInt err = KErrNone;
+    TInt res = KErrGeneral;
+    CWait* wait = CWait::NewL();
+    CleanupStack::PushL(wait);
+    
+
+    StartUp = iStartup;
+
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL()"));
+    #endif
+
+    if(!StartUp)
+    {
+        // read a flag to see whether the query is SecUi originated.
+        err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery);
+        
+    if ( err != KErrNone )
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL():\
+            FAILED to get the SECUI query Flag: %d"), err);
+        #endif
+        }
+    else
+            {
+               #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL():\
+                    SECUI query Flag: %d"), secUiOriginatedQuery);
+                #endif 
+            }
+    }  
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Execute dlg"));
+    #endif
+
+    if(StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone))
+    {	
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiCodeEtelReqest);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPIN1); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+        #endif //__COVER_DISPLAY
+
+        wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+        iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+        res = wait->WaitForRequestL();
+        #if defined(_DEBUG)
+        TInt attempts(codeInfo.iRemainingEntryAttempts);
+        RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Remaining Attempts query status: %d"), res);
+        RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Remaining Attempts: %d"), attempts);
+        #endif
+        User::LeaveIfError(res);
+        
+        if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
+            res = iSecurityDlg->ExecuteLD(R_PIN_REQUEST_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+                res = iSecurityDlg->ExecuteLD(R_PIN_REQUEST_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);
+            }
+        else
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN_ATTEMPT);
+                res = iSecurityDlg->ExecuteLD(R_PIN_REQUEST_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);   
+            }
+        
+        iSecurityDlg = NULL;
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Execute dlg RESULT: %d"), res);
+    	#endif
+        if ((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            { 
+            #if defined(_DEBUG)
+            RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() R_PIN_REQUEST_QUERY CANCEL!"));
+            #endif
+            CleanupStack::PopAndDestroy(wait);   
+            return KErrCancel;
+            }
+    }
+    else
+    {	
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    		{
+    		// … -  add data that cover ui is interested in
+    		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPIN1); // adds int to additional data to be posted to cover ui
+    		covercl->BufStream().CommitL(); // no more data to send so commit buf
+     		}  
+        #endif //__COVER_DISPLAY
+        
+        wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+        iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+        res = wait->WaitForRequestL();
+        User::LeaveIfError(res);
+        
+        CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+        CleanupStack::PushL(deviceLockStatusObserver);
+        CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+        CleanupStack::PushL(queryStatusObserver);
+        
+        if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
+            res = iSecurityDlg->ExecuteLD(R_PIN_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts );
+                res = iSecurityDlg->ExecuteLD(R_PIN_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);
+            }
+        else
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN_ATTEMPT);
+                res = iSecurityDlg->ExecuteLD(R_PIN_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);   
+            }
+        
+        CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+        iSecurityDlg = NULL;
+        if( !res || (res == ESecUiDeviceLocked))
+            {
+            #if defined(_DEBUG)
+            RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() R_PIN_QUERY cancel!"));
+            #endif 
+            // cancel code request
+            iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePin1);
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }      
+    }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityNotifier::Pin1RequiredL()VerifySecurityCode"));
+    #endif
+    iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
+    res = wait->WaitForRequestL();
+    CleanupStack::PopAndDestroy(wait); 
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL() VerifySecurityCode STATUS: %d"), res);
+    #endif
+    TInt returnValue = res;
+    switch(res)
+        {        
+        case KErrNone:
+            // code approved 
+            #if defined(_DEBUG)
+            RDebug::Print(_L("CSecurityHandler::Pin1RequiredL()code approved "));
+            #endif
+            CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
+            break;
+        case KErrGsm0707IncorrectPassword:
+        case KErrAccessDenied:
+            // code was entered erroneously
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            if(StartUp)
+            {
+            returnValue = Pin1RequiredL();
+            }
+            break;
+        case KErrGsmSSPasswordAttemptsViolation:
+        case KErrLocked:
+            // code blocked; show error note and terminate.
+            // code blocked
+            if(StartUp)
+                CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); 
+            break;
+        case KErrGsm0707SimWrong:
+            // sim lock active
+            break;
+        default:
+            CSecuritySettings::ShowErrorNoteL(res);        
+            if(StartUp)
+            {        
+            returnValue = Pin1RequiredL();
+            }
+            break;
+        }
+    return returnValue;
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::Puk1Required()
+// Handles Puk1Required event
+// ----------------------------------------------------------
+//
+TInt CSecurityHandler::Puk1RequiredL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL()"));
+    #endif            
+    RMobilePhone::TMobilePassword aPassword;
+    RMobilePhone::TMobilePassword aNewPassword;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
+    RMobilePhone::TMobilePhoneSecurityCode blockCodeType;
+    blockCodeType = RMobilePhone::ESecurityCodePuk1;
+    CWait* wait = CWait::NewL();
+    CleanupStack::PushL(wait);
+    
+    TBool StartUp(ETrue);
+    StartUp = iStartup;
+
+    TInt res(KErrNone);
+    wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Get Code info"));
+    #endif
+    iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
+    res = wait->WaitForRequestL();
+    
+    TInt thisTry = 0;
+
+	// If there was a problem (as there might be in case we're dropping off SIM Access Profile); try again a couple of times.
+	while ( res != KErrNone && ( thisTry++ ) <= KTriesToConnectServer )
+        {
+        User::After( KTimeBeforeRetryingRequest );
+        iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
+        res = wait->WaitForRequestL();
+        }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Get Code info result: %d"), res);
+    #endif
+    //If there's still an error we're doomed. Bail out.
+    User::LeaveIfError(res);
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Show last note"));
+    #endif
+    //show the last "Code Error" note of PIN verify result here so it won't be left under the PUK1 dialog
+    if(!StartUp && (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts))
+        CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+    
+    // ask PUK code
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aPassword,SEC_C_PUK_CODE_MIN_LENGTH,SEC_C_PUK_CODE_MAX_LENGTH,ESecUiPukRequired);
+    if(AknLayoutUtils::PenEnabled())
+        iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+    else
+        iSecurityDlg->SetEmergencyCallSupport(ETrue);
+    #ifdef __COVER_DISPLAY
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPUK1); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY   
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Show dialog"));
+    #endif    
+    if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts)
+            res = iSecurityDlg->ExecuteLD(R_PUK_REQUEST_QUERY);
+    else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PUK_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+         res = iSecurityDlg->ExecuteLD(R_PUK_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);
+       }
+    else
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PUK_ATTEMPT);
+         res = iSecurityDlg->ExecuteLD(R_PUK_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);   
+       }
+    
+    if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+        {
+        CleanupStack::PopAndDestroy(wait);
+        return KErrCancel;
+        }
+        
+    RMobilePhone::TMobilePassword verifcationPassword;
+    // new pin code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+    if(AknLayoutUtils::PenEnabled())
+        iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+    else
+        iSecurityDlg->SetEmergencyCallSupport(ETrue);
+    res = iSecurityDlg->ExecuteLD(R_NEW_PIN_CODE_REQUEST_QUERY);
+    if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+        {
+        CleanupStack::PopAndDestroy(wait);    
+        return KErrCancel;
+        }
+  
+    // verification code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+    if(AknLayoutUtils::PenEnabled())
+        iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+    else
+        iSecurityDlg->SetEmergencyCallSupport(ETrue);
+    res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN_CODE_REQUEST_QUERY);
+    if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+        {
+        CleanupStack::PopAndDestroy(wait);
+        return KErrCancel;
+        }
+                            
+    while (aNewPassword.CompareF(verifcationPassword) != 0) 
+        {
+        // codes do not match -> note -> ask new pin and verification codes again  
+        CSecuritySettings::ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone);
+        
+        verifcationPassword = _L("");
+        aNewPassword = _L("");
+
+        // new pin code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_NEW_PIN_CODE_REQUEST_QUERY);
+        if ((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+                
+        // verification code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN_CODE_REQUEST_QUERY);
+    	if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+        }            
+        
+    // send code
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Verify Code"));
+    #endif
+    iPhone.VerifySecurityCode(wait->iStatus,blockCodeType,aNewPassword,aPassword);
+    res = wait->WaitForRequestL();
+    CleanupStack::PopAndDestroy(wait);
+    
+    TInt returnValue = res;
+    switch(res)
+        {
+        case KErrNone:
+            // code approved -> note
+            CSecuritySettings::ShowResultNoteL(R_PIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone);
+            break;
+           case KErrGsm0707IncorrectPassword:
+        case KErrAccessDenied:
+            // wrong PUK code -> note -> ask PUK code again        
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            returnValue = Puk1RequiredL();
+            break;
+        case KErrGsm0707SimWrong:
+            // sim lock active
+            break;
+        case KErrGsmSSPasswordAttemptsViolation:
+        case KErrLocked:
+            // sim card rejected.
+            break;
+        default:
+            CSecuritySettings::ShowErrorNoteL(res);        
+            returnValue = Puk1RequiredL();
+            break;
+        }    
+
+        return returnValue;
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::Pin2Required()
+// Handles Pin2Required event
+// ----------------------------------------------------------
+//    
+void CSecurityHandler::Pin2RequiredL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL() BEGIN"));
+    #endif
+    RMobilePhone::TMobilePassword password;
+    RMobilePhone::TMobilePassword required_fourth;
+    RMobilePhone::TMobilePhoneSecurityCode secCodeType(RMobilePhone::ESecurityCodePin2);
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
+    CWait* wait = CWait::NewL();
+    CleanupStack::PushL(wait);
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): create dialog"));
+    #endif
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone);
+    #ifdef __COVER_DISPLAY
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): publish dialog"));
+    #endif
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPIN2); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY
+    
+	#if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): get PIN2 info"));
+    #endif
+    
+	wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+    iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+    TInt ret = wait->WaitForRequestL();
+        
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): get PIN2 info result: %d"), ret);
+    TInt attempts(codeInfo.iRemainingEntryAttempts);
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): attempts remaining: %d"), attempts);
+    #endif
+    User::LeaveIfError(ret);
+    
+        CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+	    CleanupStack::PushL(deviceLockStatusObserver);
+        CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+        CleanupStack::PushL(queryStatusObserver);
+        
+        if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
+            ret = iSecurityDlg->ExecuteLD(R_PIN2_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN2_ATTEMPTS, codeInfo.iRemainingEntryAttempts );
+                ret = iSecurityDlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);
+            }
+        else
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN2_ATTEMPT);
+                ret = iSecurityDlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);   
+            }
+    CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+    iSecurityDlg = NULL;
+    if (!ret  || (ret == ESecUiDeviceLocked))
+        {
+        iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePin2);
+        CleanupStack::PopAndDestroy(wait);
+        return;
+        }
+
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): Verify Code"));
+    #endif
+    iPhone.VerifySecurityCode(wait->iStatus,secCodeType,password,required_fourth);
+    TInt status = wait->WaitForRequestL();
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): destroy wait"));
+    #endif
+    CleanupStack::PopAndDestroy(wait);
+
+    switch(status)
+        {        
+        case KErrNone:
+            break;
+        case KErrGsm0707IncorrectPassword:
+        case KErrAccessDenied:
+            // code was entered erroneously
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);       
+            break;
+        case KErrGsmSSPasswordAttemptsViolation:
+        case KErrLocked:
+            // blocked
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            break;
+        default:
+            CSecuritySettings::ShowErrorNoteL(status);        
+            break;
+        }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): END"));
+    #endif
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::Puk2Required()
+// Handles Puk2Required event
+// ----------------------------------------------------------
+//    
+void CSecurityHandler::Puk2RequiredL()
+    {    
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    RMobilePhone::TMobilePassword aPassword;
+    RMobilePhone::TMobilePassword aNewPassword;
+    RMobilePhone::TMobilePassword verifcationPassword;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
+    RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
+    
+    RMobilePhone::TMobilePhoneSecurityCode blockCodeType;
+    blockCodeType = RMobilePhone::ESecurityCodePuk2;
+    CWait* wait = CWait::NewL();
+    CleanupStack::PushL(wait);
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL()"));
+    #endif
+    // ask PUK2
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aPassword,SEC_C_PUK2_CODE_MIN_LENGTH,SEC_C_PUK2_CODE_MAX_LENGTH,ESecUiNone);
+    #ifdef __COVER_DISPLAY
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPUK2); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY
+    CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+	CleanupStack::PushL(deviceLockStatusObserver);
+	
+	TInt ret(KErrNone);
+    wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+    iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
+    ret = wait->WaitForRequestL();
+    User::LeaveIfError(ret);
+        
+    if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts)
+            ret = iSecurityDlg->ExecuteLD(R_PUK2_REQUEST_QUERY);
+    else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PUK2_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+         ret = iSecurityDlg->ExecuteLD(R_PUK2_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);
+       }
+    else
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PUK2_ATTEMPT);
+         ret = iSecurityDlg->ExecuteLD(R_PUK2_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);   
+       }
+	
+	iSecurityDlg = NULL;
+    if(!ret  || (ret == ESecUiDeviceLocked))
+        {
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() PUK QUERY CANCEL"));
+    	#endif    
+        // cancel "get security unblock code" request
+        iPhone.AbortSecurityCode(blockCodeType);
+		CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+        return;
+        }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() NEW QUERY"));
+    #endif
+    // new pin2 code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone);
+    deviceLockStatusObserver->SetAddress(iSecurityDlg);
+    ret = iSecurityDlg->ExecuteLD(R_NEW_PIN2_CODE_QUERY);
+    if(!ret  || (ret == ESecUiDeviceLocked))
+        {
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() NEW QUERY CANCEL"));
+    	#endif 
+        // cancel "get security unblock code" request
+        iPhone.AbortSecurityCode(blockCodeType);
+        CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+        return;
+        }
+
+     // verification code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+    deviceLockStatusObserver->SetAddress(iSecurityDlg);
+    ret = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN2_CODE_QUERY);
+    if (!ret || (ret == ESecUiDeviceLocked))    
+        {
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() VERIFY QUERY CANCEL"));
+    	#endif 
+        // cancel "get security unblock code" request
+        iPhone.AbortSecurityCode(blockCodeType);
+        CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+        return;
+        }
+        
+    while (aNewPassword.CompareF(verifcationPassword) != 0) 
+        {
+        // codes do not match -> note -> ask new pin and verification codes again  
+        CSecuritySettings::ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone);
+        
+        verifcationPassword = _L("");
+        aNewPassword = _L("");
+
+        // new pin2 code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone);
+        deviceLockStatusObserver->SetAddress(iSecurityDlg);
+        deviceLockStatusObserver->StartObserver();
+        
+        ret = iSecurityDlg->ExecuteLD(R_NEW_PIN2_CODE_QUERY);
+    
+        if(!ret || (ret == ESecUiDeviceLocked))
+            {
+            // cancel "get security unblock code" request
+            iPhone.AbortSecurityCode(blockCodeType);
+            CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+            return;
+            }
+                    
+        // verification code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+        deviceLockStatusObserver->SetAddress(iSecurityDlg);
+        deviceLockStatusObserver->StartObserver();
+        ret = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN2_CODE_QUERY);
+        
+        if (!ret || (ret == ESecUiDeviceLocked))    
+            {
+            // cancel "get security unblock code" request
+            iPhone.AbortSecurityCode(blockCodeType);
+            CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+            return;
+            }
+        }            
+    CleanupStack::PopAndDestroy(deviceLockStatusObserver);            
+    // send code
+    
+    iPhone.VerifySecurityCode(wait->iStatus,blockCodeType,aNewPassword,aPassword);
+    TInt res = wait->WaitForRequestL();
+    CleanupStack::PopAndDestroy(wait);
+    
+    switch(res)
+        {
+        case KErrNone:
+            // code approved -> note
+            CSecuritySettings::ShowResultNoteL(R_PIN2_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone);
+            break;
+        case KErrGsm0707IncorrectPassword:
+        case KErrAccessDenied:
+            // wrong PUK2 code -> note -> ask PUK2 code again        
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            Puk2RequiredL();
+            break;
+        case KErrGsmSSPasswordAttemptsViolation:
+        case KErrLocked:
+            // Pin2 features blocked permanently!
+            CSecuritySettings::ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone);    
+            break;    
+        default:
+            CSecuritySettings::ShowErrorNoteL(res);            
+            Puk2RequiredL();
+            break;
+        }            
+    }
+
+//
+// ----------------------------------------------------------
+// CSecurityHandler::UPinRequiredL()
+// Hendles UniversalPinRequired event
+// ----------------------------------------------------------
+//  
+TInt CSecurityHandler::UPinRequiredL()
+    {
+    /*****************************************************
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+    if(wcdmaSupported || upinSupported)
+       {
+        RMobilePhone::TMobilePassword password;
+        RMobilePhone::TMobilePassword required_fourth;
+        RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
+        RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
+        RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityUniversalPin;
+        CWait* wait = CWait::NewL();
+        CleanupStack::PushL(wait);
+        TBool StartUp = ETrue; 
+        TInt secUiOriginatedQuery(ESecurityUIsSecUIOriginatedUninitialized);
+        TInt err = KErrNone;
+        TInt res = KErrGeneral;
+    
+        StartUp = iStartup;
+    
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::UPinRequiredL()"));
+        #endif
+    
+        if(!StartUp)
+        {
+            // read a flag to see whether the query is SecUi originated. 
+            err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery);
+        }
+        
+        #if defined(_DEBUG)
+        RDebug::Print(_L("CSecurityHandler::UPinRequiredL() Execute dlg"));
+        #endif 
+        if(StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone))
+        {
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiCodeEtelReqest);
+            if(AknLayoutUtils::PenEnabled())
+                iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+            else
+                iSecurityDlg->SetEmergencyCallSupport(ETrue);
+            #ifdef __COVER_DISPLAY
+            iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+            CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+    		if (covercl) // returns null if __COVER_DISPLAY is not defined
+        		{
+        		// … -  add data that cover ui is interested in
+        		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowUPIN); // adds int to additional data to be posted to cover ui
+        		covercl->BufStream().CommitL(); // no more data to send so commit buf
+         		}  
+            #endif //__COVER_DISPLAY
+            
+            wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+            iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+            res = wait->WaitForRequestL();
+            User::LeaveIfError(res);
+            
+            if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
+                res = iSecurityDlg->ExecuteLD(R_UPIN_REQUEST_QUERY);
+            else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_REQUEST_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);
+                }
+            else
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPIN_ATTEMPT);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_REQUEST_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);   
+                }
+            
+            
+            if ((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+                { 
+                CleanupStack::PopAndDestroy(wait);   
+                return KErrCancel;
+                }
+        }
+        else
+        {
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+            #ifdef __COVER_DISPLAY
+            iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+            CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+    		if (covercl) // returns null if __COVER_DISPLAY is not defined
+        		{
+        		// … -  add data that cover ui is interested in
+        		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowUPIN); // adds int to additional data to be posted to cover ui
+        		covercl->BufStream().CommitL(); // no more data to send so commit buf
+         		}  
+            #endif //__COVER_DISPLAY
+            
+    		wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+            iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+            res = wait->WaitForRequestL();
+            User::LeaveIfError(res);
+            
+            CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+    		CleanupStack::PushL(deviceLockStatusObserver);
+    		CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+            CleanupStack::PushL(queryStatusObserver);
+            
+            if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
+                res = iSecurityDlg->ExecuteLD(R_UPIN_QUERY);
+            else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);
+                }
+            else
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPIN_ATTEMPT);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);   
+                }
+    		
+    		CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+    		iSecurityDlg = NULL;
+            if( !res || (res == ESecUiDeviceLocked))
+                {
+                // cancel code request
+                CleanupStack::PopAndDestroy(wait);
+                iPhone.AbortSecurityCode(RMobilePhone::ESecurityUniversalPin);
+                return KErrCancel;
+                }      
+        }
+        
+        #if defined(_DEBUG)
+        RDebug::Print(_L("CSecurityNotifier::UPinRequiredL()VerifySecurityCode"));
+        #endif
+        iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
+        res = wait->WaitForRequestL();
+        CleanupStack::PopAndDestroy(wait);
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::UPinRequiredL() VerifySecurityCode STATUS: %d"), res);
+        #endif
+        TInt returnValue = res;
+        switch(res)
+            {        
+            case KErrNone:
+                // code approved 
+                #if defined(_DEBUG)
+                RDebug::Print(_L("CSecurityHandler::UPinRequiredL()code approved "));
+                #endif
+                CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
+                break;
+            case KErrGsm0707IncorrectPassword:
+            case KErrAccessDenied:
+                // code was entered erroneously
+                CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+                if(StartUp)
+                {
+                returnValue = UPinRequiredL();
+                }
+                break;
+            case KErrGsmSSPasswordAttemptsViolation:
+            case KErrLocked:
+                // code blocked; show error note and terminate.
+                if(StartUp)
+                    CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); 
+                break;
+            case KErrGsm0707SimWrong:
+                // sim lock active
+                break;
+            default:
+                CSecuritySettings::ShowErrorNoteL(res);
+                if(StartUp)
+                {
+                returnValue = UPinRequiredL();
+                }
+                break;
+            }
+    
+        return returnValue;
+       }
+    else
+        return KErrNone;
+    }
+//
+// ----------------------------------------------------------
+// CSecurityHandler::UPukRequiredL()
+// Handles UPukRequired event
+// ----------------------------------------------------------
+//
+TInt CSecurityHandler::UPukRequiredL()
+    {
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+    if(wcdmaSupported || upinSupported)
+       {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::UPukRequiredL()"));
+        #endif            
+        RMobilePhone::TMobilePassword aPassword;
+        RMobilePhone::TMobilePassword aNewPassword;
+        RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
+        RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
+    
+        RMobilePhone::TMobilePhoneSecurityCode blockCodeType;
+        blockCodeType = RMobilePhone::ESecurityUniversalPuk;
+        CWait* wait = CWait::NewL();
+        CleanupStack::PushL(wait);
+        
+        TBool StartUp(ETrue);
+        StartUp = iStartup;
+    
+        TInt res(KErrNone);
+        wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+        iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
+        res = wait->WaitForRequestL();
+        User::LeaveIfError(res);
+        //show last "Code Error" note for UPIN verify result so it won't be left under the PUK1 dialog
+        if(!StartUp && (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts))
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+        
+        // ask UPUK code
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aPassword,SEC_C_PUK_CODE_MIN_LENGTH,SEC_C_PUK_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+    		if (covercl) // returns null if __COVER_DISPLAY is not defined
+        		{
+        		// … -  add data that cover ui is interested in
+        		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowUPUK);// adds int to additional data to be posted to cover ui
+        		covercl->BufStream().CommitL(); // no more data to send so commit buf
+         		}  
+        #endif //__COVER_DISPLAY
+       
+            
+        if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts)
+                res = iSecurityDlg->ExecuteLD(R_UPUK_REQUEST_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+           {
+             HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPUK_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+             res = iSecurityDlg->ExecuteLD(R_UPUK_REQUEST_QUERY, *queryPrompt);
+             CleanupStack::PopAndDestroy(queryPrompt);
+           }
+        else
+           {
+             HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPUK_ATTEMPT);
+             res = iSecurityDlg->ExecuteLD(R_UPUK_REQUEST_QUERY, *queryPrompt);
+             CleanupStack::PopAndDestroy(queryPrompt);   
+           }
+        
+        if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+            
+        RMobilePhone::TMobilePassword verifcationPassword;
+        // new upin code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_NEW_UPIN_CODE_REQUEST_QUERY);
+        if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);    
+            return KErrCancel;
+            }
+      
+        // verification code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_UPIN_CODE_REQUEST_QUERY);
+        if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+                                
+        while (aNewPassword.CompareF(verifcationPassword) != 0) 
+            {
+            // codes do not match -> note -> ask new upin and verification codes again  
+            CSecuritySettings::ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone);
+            
+            verifcationPassword = _L("");
+            aNewPassword = _L("");
+    
+            // new upin code query
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+            if(AknLayoutUtils::PenEnabled())
+                iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+            else
+                iSecurityDlg->SetEmergencyCallSupport(ETrue);
+            res = iSecurityDlg->ExecuteLD(R_NEW_UPIN_CODE_REQUEST_QUERY);
+        	if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+                {
+                CleanupStack::PopAndDestroy(wait);
+                return KErrCancel;
+                }
+                    
+            // verification code query
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+            if(AknLayoutUtils::PenEnabled())
+                iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+            else
+                iSecurityDlg->SetEmergencyCallSupport(ETrue);
+            res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_UPIN_CODE_REQUEST_QUERY);
+        	if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+                {
+                CleanupStack::PopAndDestroy(wait);
+                return KErrCancel;
+                }
+            }            
+            
+        // send code
+        iPhone.VerifySecurityCode(wait->iStatus,blockCodeType,aNewPassword,aPassword);
+        res = wait->WaitForRequestL();
+        CleanupStack::PopAndDestroy(wait);
+        
+        TInt returnValue = res;
+        switch(res)
+            {
+            case KErrNone:
+                // code approved -> note
+                CSecuritySettings::ShowResultNoteL(R_UPIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone);
+                break;
+            case KErrGsm0707IncorrectPassword:
+            case KErrAccessDenied:
+                // wrong PUK code -> note -> ask UPUK code again        
+                CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+                returnValue = UPukRequiredL();
+                break;
+            case KErrGsm0707SimWrong:
+                // sim lock active
+                break;
+            case KErrGsmSSPasswordAttemptsViolation:
+            case KErrLocked:
+                // sim card rejected.
+                break;
+            default:
+                CSecuritySettings::ShowErrorNoteL(res);        
+                returnValue = UPukRequiredL();
+                break;
+            }   
+    
+        return returnValue;
+       }
+    else
+        return KErrNone;
+    }
+
+//
+// ----------------------------------------------------------
+// CSecurityHandler::SimLockEventL()
+// Shows "SIM restriction on" note
+// ----------------------------------------------------------
+//    
+void CSecurityHandler::SimLockEventL()
+    {
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityHandler::SimLockEventL()"));
+    #endif
+    CSecuritySettings::ShowResultNoteL(R_SIM_ON, CAknNoteDialog::EConfirmationTone);    
+    }
+// ---------------------------------------------------------
+// CSecurityHandler::RemoveSplashScreenL()
+// Removes splash screen
+// ---------------------------------------------------------
+void CSecurityHandler::RemoveSplashScreenL() const
+    {
+
+    }
+
+// ---------------------------------------------------------
+// CSecurityHandler::ShowGenericErrorNoteL(TInt aStatus)
+// Shows a generic error note
+// ---------------------------------------------------------
+
+void CSecurityHandler::ShowGenericErrorNoteL(TInt aStatus)
+    {
+       // Let's create TextResolver instance for error resolving...
+       CTextResolver* textresolver = CTextResolver::NewLC(); 
+       // Resolve the error
+       TPtrC errorstring;
+       errorstring.Set( textresolver->ResolveErrorString( aStatus ) );
+       iNoteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNoteDlg));
+       iNoteDlg->PrepareLC(R_CODE_ERROR);
+       iNoteDlg->SetTextL((TDesC&)errorstring);
+       iNoteDlg->RunDlgLD(CAknNoteDialog::ELongTimeout, CAknNoteDialog::EErrorTone);
+       CleanupStack::PopAndDestroy(textresolver); 
+    }
+                    
+
+// End of file