wlansecuritysettings/wlaneapsettingsui/pap/notifierui/src/papnotifdlgplugin.cpp
branchRCL_3
changeset 19 c74b3d9f6b9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlansecuritysettings/wlaneapsettingsui/pap/notifierui/src/papnotifdlgplugin.cpp	Wed Sep 01 12:23:57 2010 +0100
@@ -0,0 +1,489 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of PapNotifDlg dialog plugin.
+*
+*/
+
+/*
+* %version: 9 %
+*/
+
+// INCLUDE FILES
+#include <coemain.h>
+#include <eikenv.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+#include <papnotifdlgui.rsg>
+
+#include <e32property.h>		// For RProperty 
+#include <UikonInternalPSKeys.h> // For KPSUidUikon and KUikGlobalNotesAllowed.
+
+#include <EapTtlsPapNotifierStruct.h>
+#include "papnotifdlgplugin.h"
+#include "papauthdialog.h"
+#include "papchallengemsgdialog.h"
+#include "papchallengereplydialog.h"
+
+// CONSTANTS
+//static const TUint KUtf8UnicodeRatio = 2;
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+// -----------------------------------------------------------------------------
+// CreateNotifiersL
+// -----------------------------------------------------------------------------
+//
+LOCAL_C void CreateNotifiersL( CArrayPtrFlat< MEikSrvNotifierBase2 >* aNotifiers )
+    {
+    MEikSrvNotifierBase2 *serNotify;
+    serNotify = CPapNotifDialogPlugin::NewL();
+    CleanupStack::PushL( serNotify );
+    aNotifiers->AppendL( serNotify );
+    CleanupStack::Pop( serNotify );
+    }
+
+
+// -----------------------------------------------------------------------------
+// NotifierArray
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CArrayPtr< MEikSrvNotifierBase2 >* NotifierArray()
+    {
+    // NotifierArray() can't leave
+    CArrayPtrFlat< MEikSrvNotifierBase2 >* array = 
+                new CArrayPtrFlat< MEikSrvNotifierBase2 >( KPluginGranularity );
+
+    if ( array )
+        {
+        TRAPD( err, CreateNotifiersL( array ) );
+        
+        if( err )
+            {
+            TInt count = array->Count();
+
+            while( count-- )
+                {
+                ( *array )[ count ]->Release();
+                }
+
+            delete array;
+            array = NULL;
+            }
+        }
+
+    return( array );
+    }
+
+
+//////////////////////////////////////////////////////////////
+// PAP dialog plugin
+/////////////////////////////////////////////////////////////
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::CPapNotifDialogPlugin
+// -----------------------------------------------------------------------------
+//
+CPapNotifDialogPlugin::CPapNotifDialogPlugin()
+: iCancelled( EFalse ),
+  iAuthDlgDismissed( EFalse ),
+  iChallengeMsgDismissed( EFalse ),
+  iChallengeReplyDismissed( EFalse )
+    {
+    iManager = NULL;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::~CPapNotifDialogPlugin
+// -----------------------------------------------------------------------------
+//
+CPapNotifDialogPlugin::~CPapNotifDialogPlugin()
+    {
+    CCoeEnv::Static()->DeleteResourceFile( iResource );
+
+    if ( !iAuthDlgDismissed )
+        {
+        delete iPapAuthDialog;
+        }
+
+    if ( !iChallengeMsgDismissed )
+        {
+        delete iPapChallengeMsgDialog;
+        }
+
+    if ( !iChallengeReplyDismissed )
+        {
+        delete iPapChallengeReplyDialog;
+        }
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::RegisterL
+// -----------------------------------------------------------------------------
+//
+CPapNotifDialogPlugin::TNotifierInfo CPapNotifDialogPlugin::RegisterL()
+    {
+    iInfo.iUid      = KUidPapDialog;
+    iInfo.iPriority = ENotifierPriorityHigh;
+    iInfo.iChannel  = KUidPapDialog;
+    return iInfo;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::NewL
+// -----------------------------------------------------------------------------
+//
+CPapNotifDialogPlugin* CPapNotifDialogPlugin::NewL()
+    {
+    CPapNotifDialogPlugin* self = new( ELeave ) CPapNotifDialogPlugin();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::ConstructL()
+    {
+    #if defined( _DEBUG ) || defined( DEBUG )
+        RDebug::Print(_L("CPapNotifDialogPlugin::ConstructL") );
+    #endif
+    
+    TFileName fileName;
+
+    fileName.Append( KDriveZ );
+    fileName.Append( KDC_RESOURCE_FILES_DIR );   
+    fileName.Append( KResourceFileName );
+
+    BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), fileName );
+    iResource = CCoeEnv::Static()->AddResourceFileL( fileName );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::StartL
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CPapNotifDialogPlugin::StartL( const TDesC8& /*aBuffer*/ )
+    {
+    return KNullDesC8().Ptr();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::StartL
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::StartL( const TDesC8& aBuffer, 
+                                    TInt aReplySlot, 
+                                    const RMessagePtr2& aMessage )
+    {
+    #if defined( _DEBUG ) || defined( DEBUG )
+        RDebug::Print(_L("CPapNotifDialogPlugin::StartL") );
+    #endif
+    
+    iCancelled = EFalse;
+    iReplySlot = aReplySlot;
+    iMessage   = aMessage;
+     
+    // This object gets constructed only once but
+    // can get called many times. 
+    // So initialize everything here.
+    iAuthDlgDismissed = EFalse;
+    iChallengeMsgDismissed = EFalse;
+    iChallengeReplyDismissed = EFalse;
+    iPapAuthDialog = NULL;
+    iPapChallengeMsgDialog = NULL;
+    iPapChallengeReplyDialog = NULL;
+    iDataPtr = NULL;
+    iDataPckgPtr = NULL;
+    
+    // We are about to display the password prompt.
+    // Since this part of the code can be executed during the bootup, check if 
+    // the UI has really started up to display notes/dialogs.
+    TInt notesAllowed = 0;
+    TInt error = RProperty::Get( KPSUidUikon, KUikGlobalNotesAllowed, 
+                                 notesAllowed );
+
+    // The above call can return error. Ignore the error. What we care is 
+    // if notesAllowed has turned to 1 from 0.
+    if ( notesAllowed )
+        {    
+        iDataPtr = new( ELeave ) TPapUiNotifierInfo; 
+        iDataPckgPtr = new( ELeave ) TPckg<TPapUiNotifierInfo>( *iDataPtr );
+        iDataPckgPtr->Copy( aBuffer );
+        
+        #if defined( _DEBUG ) || defined( DEBUG )
+            RDebug::Print(_L("CPapNotifDialogPlugin::StartL, state = %d"), iDataPtr->iState );
+        #endif
+        
+        switch ( iDataPtr->iState )
+            {
+            case TPapUiNotifierInfo::EPapUiNotifierAuthQueryDialog:
+                {
+                iPapAuthDialog = CPapAuthDialog::NewL(
+                                        iDataPtr->iUsrPwdInfo.iUserName, 
+                                        iDataPtr->iUsrPwdInfo.iPassword,
+                                        this );
+                                        
+                #if defined( _DEBUG ) || defined( DEBUG )                                        
+                    RDebug::Print(_L("CPapNotifDialogPlugin::StartL, executing auth dialog") );
+                #endif
+                                                    
+                iPapAuthDialog->ExecuteLD( R_PAPNOTIF_USERNAME_PASSWORD_QUERY );
+                
+                #if defined( _DEBUG ) || defined( DEBUG )
+                    RDebug::Print(_L("CPapNotifDialogPlugin::StartL, auth dialog executed") );
+                #endif
+                
+                break;
+                }
+                
+            case TPapUiNotifierInfo::EPapUiNotifierPapChallengeSize:
+                {
+                iChallengeSize = iDataPtr->iSrvChallengeSize;
+                break;
+                }
+
+            case TPapUiNotifierInfo::EPapUiNotifierPapChallengeMsgDialog:
+                {
+                #if defined( _DEBUG ) || defined( DEBUG )
+                    RDebug::Print(_L("CPapNotifDialogPlugin::StartL, chal msg dialog start") );
+                #endif
+    
+                HBufC16* challengetext = HBufC16::NewLC( KMaxPapChallengeLength );
+                TPtr16 text = challengetext->Des();                
+                text.Copy( iDataPtr->iPapChallenge ); 
+
+                #if defined( _DEBUG ) || defined( DEBUG )
+                    RDebug::Print(_L("CPapNotifDialogPlugin::StartL, create chal msg dialog") );
+                #endif
+    
+                iPapChallengeMsgDialog = CPapChallengeMsgDialog::NewL( text,
+                    this );
+                #if defined( _DEBUG ) || defined( DEBUG )
+                    RDebug::Print(_L("CPapNotifDialogPlugin::StartL, executing chal msg dialog") );
+                #endif
+                    
+                iPapChallengeMsgDialog->ExecuteLD( R_PAP_CHALLENGE_MESSAGE_QUERY );
+                #if defined( _DEBUG ) || defined( DEBUG )
+                    RDebug::Print(_L("CPapNotifDialogPlugin::StartL, chal msg dialog executed") );
+                #endif
+
+                CleanupStack::PopAndDestroy( challengetext );
+                
+                break;
+                }
+
+            case TPapUiNotifierInfo::EPapUiNotifierPapChallengeReplyQueryDialog:
+                {
+                // construct and show the challenge reply dialog,
+                // save the reply in the password field                       
+                iPapChallengeReplyDialog = CPapChallengeReplyDialog::NewL(
+                    iDataPtr->iUsrPwdInfo.iPassword, this );
+                iPapChallengeReplyDialog->ExecuteLD( R_PAP_CHALLENGE_REPLY_QUERY);
+    
+                break;
+                }
+
+            default:
+                {
+                break;
+                }
+                                
+            }
+    
+        } 
+
+    // In case if the notes are not allowed, this message gets completed when
+    // EAPOL time out occurs and a subsequent call to cancel
+    }
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::UpdateL
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CPapNotifDialogPlugin::UpdateL( const TDesC8& /*aBuffer*/ )
+    {
+    return KNullDesC8().Ptr();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::Cancel
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::Cancel()
+    {
+    #if defined( _DEBUG ) || defined( DEBUG )
+        RDebug::Print(_L("CPapNotifDialogPlugin::Cancel") );
+    #endif
+    
+    if ( !iCancelled )
+        {
+        iCancelled = ETrue;
+        
+        if ( !iMessage.IsNull() )
+            {
+            iMessage.Complete( KErrCancel );
+            }
+
+        if ( !iAuthDlgDismissed && iPapAuthDialog )
+            {
+            iAuthDlgDismissed = ETrue;
+            delete iPapAuthDialog;
+            iPapAuthDialog = NULL;
+            }
+            
+        if ( !iChallengeMsgDismissed && iPapChallengeMsgDialog )
+            {
+            iChallengeMsgDismissed = ETrue;
+            delete iPapChallengeMsgDialog;
+            iPapChallengeMsgDialog = NULL;
+            }
+            
+        if ( !iChallengeReplyDismissed && iPapChallengeReplyDialog )
+            {
+            iChallengeReplyDismissed = ETrue;
+            delete iPapChallengeReplyDialog;
+            iPapChallengeReplyDialog = NULL;
+            }            
+        
+        }
+
+    if ( iDataPtr )
+        {
+        delete iDataPtr;
+        iDataPtr = NULL;
+        }
+
+    if ( iDataPckgPtr )
+        {
+        delete iDataPckgPtr;
+        iDataPckgPtr = NULL;
+        } 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::CompleteL
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::CompleteL( TInt aStatus )
+    {
+    #if defined( _DEBUG ) || defined( DEBUG )
+        RDebug::Print(_L("CPapNotifDialogPlugin::CompleteL") );
+    #endif
+    
+    if ( aStatus == KErrNone && !iMessage.IsNull() )
+        {
+        iMessage.WriteL( iReplySlot, *iDataPckgPtr );
+        }
+        
+    iCancelled = ETrue;
+    
+    if ( !iMessage.IsNull() )
+        {
+        iMessage.Complete( aStatus );
+        }
+
+    if ( iDataPtr ) 
+        {
+        delete iDataPtr;
+        iDataPtr = NULL;		
+        }
+
+    if ( iDataPckgPtr )
+        {
+        delete iDataPckgPtr;
+        iDataPckgPtr = NULL;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::Release
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::Release()
+    {
+    delete this;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::Info
+// -----------------------------------------------------------------------------
+//
+CPapNotifDialogPlugin::TNotifierInfo CPapNotifDialogPlugin::Info() const
+    {
+    return iInfo;
+    }
+    
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::Username
+// -----------------------------------------------------------------------------
+//
+TDes& CPapNotifDialogPlugin::Username()
+    {
+    return ( iDataPtr->iUsrPwdInfo.iUserName ) ;
+    }
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::Password
+// -----------------------------------------------------------------------------
+//
+TDes& CPapNotifDialogPlugin::Password()
+    {
+    return ( iDataPtr->iUsrPwdInfo.iPassword ) ;
+    }
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::SetAuthDlgDismissed
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::SetAuthDlgDismissed()
+    {
+    iAuthDlgDismissed = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::SetChallengeMsgDismissed
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::SetChallengeMsgDismissed()
+    {
+    iChallengeMsgDismissed = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CPapNotifDialogPlugin::SetChallengeReplyDismissed
+// -----------------------------------------------------------------------------
+//
+void CPapNotifDialogPlugin::SetChallengeReplyDismissed()
+    {
+    iChallengeReplyDismissed = ETrue;
+    }
+
+
+
+// End of File