--- /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